Android上的VPN客户端:有关VPN客户端和隐藏API使用的问题

时间:2012-11-05 09:01:01

标签: android vpn

我需要监控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客户端的指南或工作示例。

2 个答案:

答案 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有效负载。