VPNService原理-1
2023-12-28 19:39:10 0 举报
VPNService是一种实现虚拟专用网络的技术,其原理主要包括以下步骤:首先,用户设备通过加密隧道连接到VPN服务器,形成一个加密的通信通道。接着,用户设备将网络流量封装成VPN数据包,并在加密隧道中传输。在VPN服务器上,接收到的VPN数据包被解密,并转发到目的地。最后,响应流量同样通过加密隧道传回给用户设备,从而实现远程访问和隐私保护。在这个过程中,VPNService起到了关键作用,它负责管理加密隧道、处理网络数据包的封装和解封装,以及提供用户身份验证等功能。
作者其他创作
大纲/内容
给当前的网络代理,指定底层层网络连接
根据VPNService特殊定义的Intent查找对应服务的信息ResolveInfo
判断是否复用旧的vpn LinkProperties
创建NetworkCapabilities对象
设置DNS server
可以看到这里针对VPN链路有单独的LinkProperties对象,所以Netmanager#getActiveNetwork拿到的也会是这个对象
jniSetAddresses
jni层重置老的tun接口
返回新tun
AIDL
由JNI生成虚拟网卡tunParcelFileDescriptor
这里如果之前没有调用过prepare方法,这里会获取不到对应的vpn
不可复用
Vpn
packageManager.resolveService
绑定VPNService
检查是否调用prepare方法
根据用户userId获取到其vpn对象,并且调用其establish方法传递vpnconfig
VpnConfig
这里会检查VPNService是否在manifest中是否声明了权限BIND_VPN_SERVICE
传入当前连接想要控制流量的APP包名列表
Intent => VpnConfig.SERVICE_INTERFACE
发送intent显示vpn小图标
解注册旧的NetworkAgent
mNetworkAgent.setUnderlyingNetworks
设置虚拟网卡地址
VpnService
如果当前存在旧的VPNConfig,表明当前正在存在一个vpn连接,对比其vpnconfig的监听的APP是否一致,如果一致,那么复用
establish
新建LinkProperties对象
VpnManagerService
mVpns.get(user).establish(config)
解绑上一个服务
解绑上一个vpn服务
VPNManager
创建NetworkAgent
0 条评论
下一页