java - VPN 如何在 Android 中工作以及可用的 API 列表? (棒糖)

标签 java android ip vpn tunneling

###引用:

Android 4.0 有一个 API 来构建 VPN 服务。

  1. VPNService (Android Docs)
  2. VPNService.Builder (Android Docs)
  3. Arne Schawbe's Implementation of OpenVPN for Android (github)

具有 VPN 服务的此类应用是 NetMotion Mobility® (Google Play)

从“ Lollipop ”版本开始,Android 提供了一种新的 VPN 类型,它提供有关 VPN 连接状态、请求是否通过 VPN 等信息。

###测试结果

(连接到 VPN)

  1. Android < =5.0(Android Lollipop)
  2. 与 WIFI(Wlan) 和 Cellular(rmnet) 接口(interface) IP 的连接成功。
  3. 使用 VPN(tun) 接口(interface) IP 地址连接成功,但未收到 VPN 连接/断开事件。
  4. Android > 5.0(Android Lollipop 5.1 和 6.0)
  5. 使用 WIFI(Wlan) 和 Cellular(rmnet) 接口(interface) IP 连接成功。
  6. 与 VPN(tun) 接口(interface) IP 地址的连接成功,并获得 VPN 连接/断开事件。

tun接口(interface)IP:SITE local Private IP().

  1. ConnectivityManager#TYPE_VPN
  2. NetworkCapabilites#TRANSPORT_VPN
  3. NetworkCapabilities#NET_CAPABILITY_NOT_VPN

Indicates that this network is not a VPN. This capability is set by default and should be explicitly cleared for VPN networks. Constant Value: 15 (0x0000000f)

###问题:

  1. 当设备上的 VPN 服务处于 Activity 状态时,来自 WhatsApp、Skype 或浏览器等第三方应用的请求如何工作?
  2. 连接 VPN 后,设备 IP 堆栈到底发生了什么?
  3. VPN 隧道如何在 Android 中工作?
  4. 绑定(bind)到 Activity IP 并发送请求的应用的设计是什么?
  5. lollipop (5.0) 中的 VPN API 不稳定吗?
  6. 如果 bindProcessToNetwork是通过 Celluar 网络完成的,并且设备中连接了 WiFi,VPN 将使用哪个网络?

最佳答案

将尝试回答几个问题:

1。 VPN 不会影响其他应用程序流——它只是“虚拟地”将您的设备置于另一个网络中。例如一些公司专用网络。这意味着通过 VPN 连接发送的所有请求都将发送到该网络,并且该网络内应用的所有规则/过滤器都适用于电话生成的流量 - 这可能会导致第三方应用出现问题。

2。流量通过 VPN 连接时的真实 IP 地址替换为 VPN 服务器分配的 VPN 的 IP 地址。您连接的 Web 服务器不会看到您的真实 IP 地址;他们会看到您连接的 VPN 网络网关的 IP。

5。借助 Android 5.0 Lollipop,VPN 客户端最终可以对哪些应用程序通过安全网络进行通信以及哪些应用程序直接连接到 Internet 进行精细控制。也许这会导致问题。

对于 VPN API 的使用,您可以查看这个项目:OpenVPN for Android

关于java - VPN 如何在 Android 中工作以及可用的 API 列表? (棒糖),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421186/

相关文章:

java - 为 Android Java 开发设置 Syntastic

location - 还有其他类似 freegeoip.net 的网站吗

sockets - 设置 UDP 套接字的源 IP

java - Firefox Gecko 驱动程序无法单击类型为 "file"的输入元素

android - 我应该在 Android Studio 的 Gradle 中将一些依赖项移动到 `runtime` 吗?

java - 获取选项菜单以显示在系统栏中

android - React native 和 Android 7 支持与 NDK 限制

ip - 在 Patricia Trie 中查找最长前缀搜索的算法/步骤

Java 流收集器在 Set::size 上出现 groovy 错误

java - 在 Java 中使用 PrintWriter 创建文件并写入该文件