android vpn的使用

        在信息飞速发达的社会中,信息安全也是相当于重要,怎们才能保证数据的安全,最重要的环节就是拦截数据,并筛选数据,接下来主要介绍重要环节 VPN (拦截手机数据流量)。

        VPN(虚拟专用网络):在手机网络上建立虚拟网络(tun),进行加密通讯。在企业办公环境中有广泛应用。VPN网关通过对数据包(IP包)的加密和数据包目标地址的转换实现远程访问。从而达到信息安全的一方面。

概览

VPN 可让实际不在网络中的设备安全地访问该网络。

Android 包含一个内置(PPTP 和 L2TP/IPSec)VPN 客户端,有时称为“旧版 VPN”。Android 4.0(API 级别 14)引入了 API,以便应用开发者能够提供自己的 VPN 解决方案。您将 VPN 解决方案打包到用户安装到设备上的应用中。开发者通常出于以下某个原因构建 VPN 应用:

  • 提供内置客户端不支持的 VPN 协议。
  • 帮助用户在不进行复杂配置的情况下连接到 VPN 服务。

本指南的其余部分将介绍如何开发 VPN 应用(包括始终开启按应用开启的 VPN),不会涉及内置 VPN 客户端。

用户体验

Android 提供了一个界面 (UI) 来帮助用户配置、启动和停止您的 VPN 解决方案。系统界面还会让设备的使用者知晓有效的 VPN 连接。Android 会显示用于 VPN 连接的以下界面组件:

  • 在 VPN 应用首次变为活动状态之前,系统会显示连接请求对话框。该对话框会提示设备的使用者确认他们信任 VPN 并接受请求。
  • VPN 设置屏幕(“设置”>“网络和互联网”>“VPN”)会显示用户接受了连接请求的 VPN 应用。有一个用于配置系统选项或取消保存 VPN 的按钮。
  • 当连接处于活动状态时,“快捷设置”栏会显示一个信息面板。点按标签会显示一个对话框,其中包含更多信息和指向“设置”的链接。
  • 状态栏包含一个 VPN(钥匙)图标以表示有效连接。

您的应用还需要提供界面,以便设备的使用者配置您的服务选项。例如,您的解决方案可能需要捕获帐号身份验证设置。应用应该显示以下界面:

  • 用于手动启动和停止连接的控件。始终开启的 VPN 可以在需要时连接,但允许用户在首次使用您的 VPN 时配置连接。
  • 服务处于活动状态时发出的不可关闭通知。通知可显示连接状态或提供更多信息(例如网络统计信息)。点按该通知会将您的应用调入前台。在服务变为非活跃状态后移除通知。VPN 服务

    您的应用将用户(或工作资料)的系统网络连接到 VPN 网关。每个用户(或工作资料)可以运行不同的 VPN 应用。您可以创建一项 VPN 服务,系统使用该服务启动和停止您的 VPN,并跟踪连接状态。您的 VPN 服务继承自 VpnService

    该服务还充当 VPN 网关连接及其本地设备接口的容器。您的服务实例调用 VpnService.Builder 方法来建立新的本地接口。

始终开启的 VPN

Android 可以在设备启动时启动 VPN 服务,并在设备开启时使其保持运行状态。此功能称为“始终开启的 VPN”,适用于 Android 7.0(API 级别 24)或更高版本。虽然 Android 维护着服务生命周期,但 VPN 网关连接由您的 VPN 服务负责。始终开启的 VPN 还可以屏蔽不使用 VPN 的连接。

用户体验

在 Android 8.0 或更高版本中,系统会显示以下对话框,让设备的使用者知晓始终开启的 VPN:

  • 当始终开启的 VPN 连接断开或无法连接时,用户会看到一条不可关闭的通知。点按通知会显示一个对话框,说明更多信息。当 VPN 重新连接或有人关闭始终开启的 VPN 选项时,通知会消失。
  • 始终开启的 VPN 可让设备使用者屏蔽任何不使用 VPN 的网络连接。开启此选项后,“设置”应用会警告用户,他们在 VPN 连接之前未连接到互联网。“设置”应用会提示设备的使用者继续或取消。

由于系统(而非用户)会启动和停止始终开启的连接,因此您需要调整应用的行为和界面:

  1. 停用任何断开连接的界面,因为系统和“设置”应用会控制连接。
  2. 在每次应用启动之间保存任何配置,并使用最新设置配置连接。由于系统会按需启动您的应用,因此设备的使用者可能并不总是想要配置连接。

您也可以使用托管配置来配置连接。借助托管配置,IT 管理员可远程配置您的 VPN。

检测始终开启的 VPN

Android 不包含用于确认系统是否已启动您的 VPN 服务的 API。但是,当应用标记其启动的任何服务实例时,您可以假设系统会为始终开启的 VPN 启动未标记的服务。示例如下:

  1. 创建 Intent 实例以启动 VPN 服务。
  2. 通过在 Intent 中放置 extra 来标记该 VPN 服务。
  3. 在服务的 onStartCommand() 方法中,在 intent 参数的 extra 中查找标志。

屏蔽的连接

设备的使用者(或 IT 管理员)可以强制所有流量使用 VPN。 系统会屏蔽所有不使用 VPN 的网络流量。使用设备的用户可以在“设置”的 VPN 选项面板中找到“屏蔽未使用 VPN 的连接”开关。

注意 :非 VPN 流量被屏蔽后,不在允许列表禁止列表中的应用会丢失网络连接。在创建允许或禁止的列表时,请考虑警告用户。如需了解详情,请参阅以下按应用设定的 VPN部分。

停用始终开启的 VPN

如果您的应用目前无法支持始终开启的 VPN,您可以通过将 SERVICE_META_DATA_SUPPORTS_ALWAYS_ON 服务元数据设置为 false 来选择停用相应功能(在 Android 8.1 或更高版本中)。以下应用清单示例展示了如何添加元数据元素:

<service android:name=".MyVpnService"
         android:permission="android.permission.BIND_VPN_SERVICE">
     <intent-filter>
         <action android:name="android.net.VpnService"/>
     </intent-filter>
     <meta-data android:name="android.net.VpnService.SUPPORTS_ALWAYS_ON"
             android:value=false/>
</service>

如果您的应用选择停用始终开启的 VPN,系统会停用“设置”中的选项界面控件。

按应用开启的 VPN

VPN 应用可以过滤哪些已安装的应用可以通过 VPN 连接发送流量。您可以创建允许列表或禁止列表,但不能同时创建两者。如果您不创建允许或禁止的列表,系统会通过 VPN 发送所有网络流量。

您的 VPN 应用必须先设置列表,然后建立连接。如果您需要更改列表,请建立新的 VPN 连接。将应用添加到列表中时,应用必须安装在设备上。


// The apps that will have access to the VPN.
String[] appPackages = {
    "com.android.chrome",
    "com.google.android.youtube",
    "com.example.a.missing.app"};

// Loop through the app packages in the array and confirm that the app is
// installed before adding the app to the allowed list.
VpnService.Builder builder = new VpnService.Builder();
PackageManager packageManager = getPackageManager();
for (String appPackage: appPackages) {
  try {
    packageManager.getPackageInfo(appPackage, 0);
    builder.addAllowedApplication(appPackage);
  } catch (PackageManager.NameNotFoundException e) {
    // The app isn't installed.
  }
}

// Complete the VPN interface config.
ParcelFileDescriptor localTunnel = builder
    .addAddress("2001:db8::1", 64)
    .addRoute("::", 0)
    .establish();

允许的应用

如需将应用添加到许可名单中,请调用 VpnService.Builder.addAllowedApplication()。如果该列表包含一个或多个应用,则只有列表中的应用才会使用 VPN。所有其他不在列表中的其他应用)使用系统网络,就像 VPN 未运行一样。当允许列表为空时,所有应用都将使用 VPN。

禁止的应用

如需将应用添加到禁止列表中,请调用 VpnService.Builder.addDisallowedApplication()。不允许的应用使用系统网络,就像 VPN 未运行一样,其他所有应用都会使用 VPN。

绕过 VPN

您的 VPN 可让应用绕过 VPN 并选择自己的网络。如需绕过 VPN,请在建立 VPN 接口时调用 VpnService.Builder.allowBypass()。启动 VPN 服务后,您将无法更改此值。如果应用未将其进程或套接字绑定到特定网络,应用的网络流量会继续通过 VPN。

当有人阻止未通过 VPN 的流量时,绑定到特定网络的应用会无法连接。如需通过特定网络发送流量,应用会在连接套接字之前调用 ConnectivityManager.bindProcessToNetwork() 或 Network.bindSocket() 等方法。

代理请求与VPN联合使用请参考

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚思app

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值