为了解决移动端网络的断连问题,实现独立应用。在此基础上,我们考虑采用客户端<->proxy<->Internet的三层体系结构。通过client->proxy这个链接,ProxyDroid已经可以实现了。所以下一步要做参考如下。
第一步、开发proxy
proxy和Internet之间相互转发信息,其余信息从proxy->client端传送。
我们在ProxyDroid端采用Socks5协议。其优点是:无需proxy解析来自消息内容的目的IP和端口号,只需在正式数据传输之前从握手信息获取。
第二步、Socks5代理工作方式
客户端连接Socks5proxy服务器端口。
客户端端发送命令{5,1,0}
proxy返回一个答复{5,0},表明可以代理。
客户端发送:{5,1,0,1}+目的地址(用16进制表示4字节)+目的端口(用2字节表示16进制)
proxy提取IP地址,端口号,与外部网建立socket。
proxy将应答返回到client:{5,0,0,1}+IP地址(4字节的16进制表示)+外网套接字绑定端口号(2字节的16进制表示)
proxy会持续检测客户端套接字,读取数据并发送到外部网络。
proxy会不断地检测外网的套接字,读取的数据会发送到client。
基本观点:
在主活动类中设置一个ServerSocket,通过接收proxydroid发送的socks5消息来建立socket,然后将该socket传递给服务器线程;
通过在客户端和外部网络之间建立交互链路,服务器线程与客户端端进行通信。服务线程本身就是中间介质。