使用vmware workstation发现NAT模式端口转发存在一些问题。
1.在windows系统下虚拟XP,在XP中使用VPN,然后用ccproxy架设代理。虚拟xp使用的是NAT模式连网,使用vmware workstation自带的端口转发工具设置808端口转发(ccproxy代理端口)不能上网。
2.在centos系统下vmware workstation的网络工具中,没有NAT端口转发选项。手动更改配置文件实现端口转发失败。
其实我要的功能很简单,就一个端口转发。在B机器上安装好虚拟机C,用A机器去连接。因为B机器和A机器是不同网段且不相通(但是A能连接B),所以A连接C需要B转发。使用vmware workstation自带转发实现不了,于是自己写了一个端口转发的小程序。是使用JAVA编写的,能运行于全平台。
实现原理很简单,在B机器上运行程序,监听一个端口用于被连接,当收监听端口收到数据后向C机器发送数据,这样就实现B机器的中转功能了。注意的是需要创建两个socket分别用于数据的读写。以下是数据传输代码:
private static int BUFFER_SIZE = 10240; private Socket getDataSocket; private Socket putDataSocket; public TransPortData(Socket getDataSocket, Socket putDataSocket) { this.getDataSocket = getDataSocket; this.putDataSocket = putDataSocket; } @Override public void run() { try { while (true) { InputStream in = getDataSocket.getInputStream(); OutputStream out = putDataSocket.getOutputStream(); // 读入数据 byte[] data = new byte[BUFFER_SIZE]; int readlen = in.read(data); // 如果没有数据,则暂停 if (readlen <= 0) { Thread.sleep(300); continue; } out.write(data, 0, readlen); out.flush(); } } catch (Exception e) { } finally { // 关闭socket try { if (putDataSocket != null) { putDataSocket.close(); } } catch (Exception exx) { } try { if (getDataSocket != null) { getDataSocket.close(); } } catch (Exception exx) { } } }
附上可运行的demo:JAVA端口转发
发表回复