1

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

4

2 回答 2

4

我需要监控 VPN 流量,即我需要读取传入和传出的 VPN 流量。

除非这是您自己入侵后门的 VPN 实现,否则出于明显的安全原因,这最好是不可能的。

我收到以下异常

即兴发挥,我的猜测是您没有运行 ToyVPN 服务器组件,或者您的测试环境无法访问它。然而,自从我玩 ToyVPN 以来已经有一段时间了,而且我不是它的代码库专家。

此外,任何地方都没有提到“如何设置用户名”。

我不记得 ToyVPN 有“用户名”的概念。

它读到我们可以使用隐藏的 API,但这需要 root 访问权限

隐藏的 API 与 root 访问无关。

他们是创建自己的 VPN 客户端还是使用 android 的默认客户端?

您必须询问您所指的任何应用程序的作者。

如果他们使用android的默认客户端,那么这仍然可以读取传入和传出的流量吗?

只有它们生成的“传入和传出流量”。出于明显的安全原因,应该不可能监视其他应用程序的 VPN 流量。

于 2012-11-05T11:52:50.523 回答
0

我需要监控 VPN 流量,即我需要读取传入和传出的 VPN 流量。

这是一个模棱两可的问题,因为 VPN 有传入和传出流,并且应该实现传入和传出隧道流。

对于传统的 VPN,您必须同时协调两者;一方面建立到 VPN 服务器的隧道连接,并将 VpnService 接口的输入流写入隧道输出流,另一方面将隧道响应写回接口输出流。

与 Mark 在他的回答中所说的相反,您确实将原始网络请求作为 VpnService 接口的输入流。请记住,您正在获取将通过网络接口进行通信的原始字节,因此您实际上必须不遗余力地解析 IP 数据包及其 TCP 或 UDP 有效负载。

于 2013-11-28T16:55:31.273 回答