【问题标题】:How OpenVPN etc create VPN connection if there is no Android API for that?如果没有 Android API,OpenVPN 等如何创建 VPN 连接?
【发布时间】:2019-07-18 16:37:45
【问题描述】:

关于 SO 的许多答案已经声称您无法在 Android 设备上以编程方式配置 VPN 配置文件。 Android 的 VpnService API 只允许在您自己的应用程序中使用 VPN,并且没有其他 API 可用。

OpenVPN for Android 等应用程序是如何实现这一目标的?我可以通过 OpenVPN 应用程序配置配置文件,其他应用程序将能够使用此连接。

【问题讨论】:

  • 为什么您认为 VpnService API 将 VPN 限制为单个应用程序?
  • 因为使用 VPNService 只会返回您可以发送/接收数据包的连接句柄。其他应用无权访问此句柄

标签: android vpn openvpn


【解决方案1】:

您误解了VpnService.Builderestablish() 方法返回的句柄/文件描述符的性质和用途。您可能需要再次阅读 API 说明。

它的要点是它是 TUN 设备的文件描述符,Android 通过策略路由将来自其他应用的网络流量引导到该设备(受影响的应用/流量可以通过构建器的方法进行控制)。然后应用程序可以使用文件描述符来读取其他应用程序发送的数据包,例如通过 VPN 连接(使用常规 UDP/TCP 套接字)转发它们。从 VPN 连接返回的流量同样可以通过写入 TUN 设备的文件描述符重新注入系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2019-03-31
    • 1970-01-01
    • 2018-04-27
    • 2019-12-28
    • 2010-09-24
    • 2014-11-25
    相关资源
    最近更新 更多