vpnservice 详解
来源:互联网 发布:淘宝店铺装修页尾 编辑:程序博客网 时间:2024/06/05 19:01
Vpnservice
这个类是一个基础的类,继承与vpnservice 创建自己的vpn 。通常,创建一个虚拟的网络接口,配置地址和路由规则,他将返回文件描述符给这应用。每次读文件描述符可以检索出来一个向外发出来的packet 这个ip数据包是被路由到这个网卡上的。每次将ip数据包写到这个文件描述符 就像从文件描述符中读取一个数据包一样从这个接口。这个接口是运行在网络层(即ip 层的)因此这个数据包也是总是包含一个ip header 。你的应用完成vpn连接通过一个进程和交换数据包 通过远程的服务器和通道。
让应用拦截数据包产生一个巨大的安全隐患,一个vpn应用能很轻易拦截网络数据。除此之外,他们之中还有两个冲突。系统有几个动作到地址
下面是几个关键点:
1,用户主动要求去创建一个vpn连接
2,仅仅是一个vpn 连接运行在同一时间。当一个新的网卡被创建,已经存在的虚拟网卡接口将失效。
3,系统管理通知 被展示在vpn连接的生命期间。
4,系统的对话框给一个信息关于当前vpn 连接。同时也提供一个按钮去关闭。
5,当网络描述符被关闭的时候,这个网络将会被自动修复。也包括另一种情况当这个vpn应用被清除或被系统杀掉了。
有两个主要的方法
1 prepare(context ) 和 establish();
这个模型处理具有用户的动作和停止vpn 连接 由其他的应用创建。后创建的vpn接口被使用参数提供给vpnservice.builder
2,应用必须调用prepare(context) 去授权使用这个类的其他方法,正确的方法能被调用在任何时候。
下面是通常创建 VPN 连接的 步骤:
1,当用户连接vpn连接的时候,调用 prepare(context) 和返回intent
2,当这个应用准备好的时候,启动这个服务。
3,创建一个通道到远程的服务器和参数对于这个 VPN链接
4,支持哪些参数使用VpnService.Builder 和创建一个VPN接口通过调用establish()这个方法;
5,应用进程交换数据报在隧道和返回到这个文件描述符。
6,当这个Onrevoke()方法被调用的时候,可以很好的关闭文件描述符和关闭隧道。
这个类继承与service 需要在清单文件中声明这个service 和涉及到的权限 intentfilter 。要求必须有这个BIND_VPN_SERVICE这个权限,和intent-filter 必须匹配SERVICE_INTERFACE 这个动作。
下面是一个例子声明一个VPNSERVICE 在androidManifest.xml
<service android:name=".ExampleVpnService" android:permission="android.permission.BIND_VPN_SERVICE"> <intent-filter> <action android:name="android.net.VpnService"/> </intent-filter> </service>从上面这个例子可以到,这个类 需要 bind_vpn_service 这个权限和一个过滤器intent-filter
与其相关类还有 vpnservice.builder
vpnservice .builder 帮助创建一个vpn 接口
几个 重要的方法
IBinder onBinder(intent intent)
返回一个返回一个通信接口对于这个service
void onrevoke();
当这个应用被取消掉的时候,调用这个方法。
static intent prepare(context context )
这是一个静态的方法 准备创建一个VPN连接
Boolean protect (int socket)
保护socket 从这个vpn连接经过
Boolean protect (DatagramSocket socket)
一个便利的方法保护datagramsaocket 经过这个VPN 连接
Boolean protect(Socket socket)
同上
public void onRevoke()
应用被废除的时候,调用这个方法。 在这个时刻,这个VPN借口已经被激活由系统。这个应用应该关闭这个文件描述符。stopSelf()默认已经实现了
调用这个方法也可能不应该在主线程中。
public static Intent prepare(Context context)
准备去建立一个VPN 连接。如果这个VPN应用已经准备就绪这个方法将返回null 除此之外,他将返回一个intent 到这个系统的activity。你的应用应该启动这个activity 通过
startactivityForResult(Intent ,int) 去 得到他自身是否准备好。这个activity 会被弹出一个dialog去要求用户响应,这个结果将返回到onActivityResult(int ,int,intent)。如果这个
结果是RESULT_OK,这个应用已经准备好了和授权了使用其他方法的权限对于这个VPNSERVICE 这个类。
在同一个时刻仅仅有一个应用被授权。 这个权利被取消当有其他应用被授权的时候。这个应用丢失权利将被通知调用Onrevoke()方法。除非他又 回到准备状态了。
public boolean protect(int socket)
保护socket 通过这个VPN连接,保护之后,数据被发送通过socket将会被直接的传到网卡上去。因此他的路由将不会通过VPN连接
这个方法是非常有用对于一些不需通过VPN连接的数据。例如:一个VPN通道应该保护他自己的目的地址被覆盖通过VPN路由。
一个很显而易见的问题外出的ip数据报被送回到VPN接口会造成无线循环。这个方法将失败如果应用没有准备好或被废除。
这个socket 没有被关闭通过这个方法。
- vpnservice 详解
- vpnservice 详解
- VpnService
- VPNservice
- VpnService ------ builder
- VpnService ------ builder
- VPNService 一串错误代码
- Android VpnService小结
- 用VpnService实现网络防火墙
- android 通过VPNService抓包
- AndroidManifest.xml 里VPNService权限的声明
- 基于VpnService实现网络防火墙的思路
- Android英文文档翻译系列(5)——VPNService
- Android英文文档翻译系列(5)——VPNService
- 使用Android系统自带的VpnService截取流量
- Android4.0后新出一个VPNService类,怎么实现抓包功能的?
- 详解
- 详解
- 第四章_对象与类
- 微信小程序入门之构建一个简单TODOS应用
- TCP网络编程中connect()、listen()和accept()三者之间的关系
- Java异常处理
- noi-1745-字符串判等
- vpnservice 详解
- iOS开发- 支付宝支付
- servlet过滤器、监听器、struts2拦截器的区别
- MacOSX中设置和改变$PATH变量
- jquery-ui中div拖动出现辅助线方便对齐
- 协调布局CoordinatorLayout的一些方法
- Java使用JNDI配置WEB项目数据源
- C/C++学习的50个经典网站
- ZKProgressHUD iOS 易于使用的 HUD