我需要监控VPN流量,即我需要读取传入和传出的VPN流量。
为此,我正在尝试创建自己的VPN客户端,但我没有找到任何“android.net.VpnService”的工作示例,我看了android示例应用程序ToyVpn,但它不起作用,我是得到以下异常:
E/ToyVpnService(2302): Got java.net.PortUnreachableException:
E/ToyVpnService(2302): Got java.net.SocketException: sendto failed: ECONNREFUSED (Connection refused)
此外,在任何地方都没有提到,“如何设置用户名”。
它认为我们可以使用隐藏的API,但这需要root访问权限,现在我没有root电话......
我想问这个(隐藏的API)方法是,使用隐藏API的应用程序,他们创建自己的VPN客户端还是使用Android的默认客户端?如果他们使用Android的默认客户端,那么仍然可以读取传入和传出流量吗?
我正在寻找一些关于使用“android.net.VpnService”创建自己的vpn客户端的指南或工作示例。
答案 0 :(得分:4)
我需要监控VPN流量,即我需要读取传入和传出的VPN流量。
除非这是你自己的VPN实现,否则你已经入侵了后门,出于明显的安全原因,这最好是不可能的。
我遇到了异常
关闭袖带,我的猜测是你没有运行ToyVPN服务器组件,或者你的测试环境无法访问它。但是,自从我玩ToyVPN以来,已经有一段时间了,而且我不是其代码库的专家。
此外,在任何地方都没有提到,“如何设置用户名”。
我不记得具有“用户名”概念的ToyVPN。
它认为我们可以使用隐藏的API,但这需要root访问权限
隐藏的API与root访问无关。
他们是创建自己的VPN客户端还是使用Android的默认客户端?
您必须向作者询问您所指的任何应用程序。
如果他们使用Android的默认客户端,那么仍然可以读取传入和传出的流量吗?
仅生成“传入和传出流量”。出于明显的安全原因,不应该监视其他应用的VPN流量。
答案 1 :(得分:0)
我需要监控VPN流量,即我需要读取传入和传出的VPN流量。
这是一个含糊不清的问题,因为VPN有一个传入和传出的流,应该实现传入和传出的隧道流。
对于传统的VPN,您必须协调两者;一方面建立到VPN服务器的隧道连接,并将VpnService接口的输入流写入隧道输出流,另一方面将隧道响应写回接口输出流。
与Mark在其答案中所说的相反,您确实将原始网络请求作为VpnService接口的输入流。请记住,您正在获取将通过网络接口传送的原始字节,因此您实际上必须不遗余力地解析IP数据包及其TCP或UDP有效负载。