原理
为处理移动端网络断连问题,实现应用无关。我们考虑采用client<->proxy<->Internet
的三层架构。从client->proxy
这一环节,ProxyDroid已经能够实现。
因此接下来主要需要完成的工作是
proxy
的开发proxy
与Internet
互相之间的信息转发,以及剩余的从proxy->client
端信息传输。
在ProxyDroid端我们采用了Socks5协议。它的优势是:无需proxy
从报文内容中解析目的IP以及端口号,而是可以从正式数据传输前的握手信息获取。
Socks5代理工作模式
client
连接Socks5 proxy
服务器端口client
端发送命令{5,1,0}
proxy
返回应答{5,0}
,表示可以进行代理client
发送:{5,1,0,1}
+目的地址(4字节的16进制表示)+目的端口(2字节的16进制表示)proxy
提取出IP地址、端口号与外网建立socket
proxy
向client
返回应答:{5,0,0,1}
+外网套接字绑定的IP地址(4字节的16进制表示)+外网套接字绑定的端口号(2字节的16进制表示)proxy
不断检测client
套接字,读出数据发送给外网proxy
不断检测外网套接字,读出数据发送给client
代码
基本思想如下:
- 主活动类中会设置一个
ServerSocket
用于接收proxydroid
发送过来的socks5
报文从而建立socket
,然后将该socket
传递给服务器线程; - 服务器线程与
client
端通信,建立从cl