5

我正在尝试在 android 上创建一个 VPN 客户端。我查看了 android 示例应用程序“ToyVpn”,我试图从这个应用程序连接到我的 PC(Windows 7),但我遇到了端口无法访问的异​​常。

E/ToyVpnService(2302): Got java.net.PortUnreachableException: 
E/ToyVpnService(2302): Got java.net.SocketException: sendto failed: ECONNREFUSED (Connection refused)

但是,当我通过 Android 的默认 vpn 客户端连接到我的 PC 时,它会成功连接。通过在命令行中输入“netstat”,我观察到我的电脑的 1723 端口连接到手机的 36302 端口。因此,可以访问离线端口。

它是示例应用程序,它应该可以工作......但我也看到了一些其他链接,其中提到他们无法通过此应用程序连接到服务器。

这个样本是否有效?这个 API 需要 root 手机吗?

除此之外,我没有找到任何示例或教程来显示正确使用“android.net.VpnService”。

谁能指导我这个..?

4

1 回答 1

10

ToyVpnService 是一个简单的自定义 VPN 的示例实现。它不符合标准。如果你想要一个符合标准的 VPN,你应该使用内置的。

如果您想测试示例,有一个 linux 服务器可以理解与 ToyVPN 示例一起打包的 ToyVPN 协议。

https://github.com/android/platform_development/tree/master/samples/ToyVpn

它被称为ToyVPN,因为它就是这样。

  • 它没有加密
  • 它没有相互认证
  • 它以纯文本形式发送预共享的身份验证密钥
  • 它不会优雅地处理意外的数据包
  • 它不保证数据包的完整性或来源

它只展示了 VpnService API 如何从手机上的应用程序中捕获发往 Internet 的数据包并将它们推送到隧道中。同样,如何将数据包注入应用程序,就好像它们来自网络一样。

其余的由开发人员来实现。

于 2013-02-13T10:55:03.817 回答