因为一些原因,需要开发一款<V服P务N>的APP。网上开源的项目很多,但是涉及到几个问题:
1:最简的软件框架,网上大多的开源项目都是很复杂很庞大的项目,看懂,并且抽丝剥茧,是个很烦躁的活。
2:代理服务的协议,透明代理的安全性很低,可靠的高匿代理协议要么很复杂,要么实现起来也很困难,并且还需要与高匿服务器沟通测试。
3:目前Android上的服务框架是IP协议层,意味着需要在JAVA上实现IP协议栈,不能直接使用已有API。
4:DNS污染问题,无法获取正确的域名所对应的IP地址,导致原始TCP请求的目标IP就已经不正确了,服务端也无法访问。
经过这段时间的研究,已经最简实现了一个APP。下面是截图
那么关于以上几个问题,我的做法 是这样的:
1:基于谷歌官方的例子
官方的代码很简单,但是也不能拿来就用,只是很好理解API是怎样工作的。
2:关于加密方法以及调试,建议寻找开源项目,够简单,有详细的readme文档。重中之重是先实现服务端可调试、可运行,再在APP上实现他的协议。具体我寻找的服务端,这里就不介绍了。
3:网上也有关于JAVA实现IP协议栈的代码,但是因为非官方,性能和安全不确定,同时这里的代码也很复杂,调试时出现问题也不好定位。所以这里有个取巧的方式。
简单来说就是二次NAT,将原始的TCP请求更改IP地址,通过网卡转发给本地TCP SERVER,再由TCP SERVER发送给服务端,使得IP层协议交给网卡完成。 1:创建 本地 TCP SERVER2:接收到网卡的原始数据,分析数据,完成转发工作3:TCP SERVER在连接/发送/接受数据时,进行加密/解密算法的实现4:关于DNS解析的问题,DNS的请求包是UDP。当接收到UDP,并且是DNS包时,拦截该请求(可以根据域名拦截)。在本地创建一个虚假IP,当作DNS回应包返回给APP。在TCP SERVER连接时,判断目标IP是否为虚假IP,如果是虚假IP,则将当时请求的域名加装在高匿协议中,由服务器区请求域名。