@
haohaolee - 系统才有,给到应用层的接口( VpnService )没有,VpnService 只能选择(劫持或不劫持,两种模式二选一)哪些应用。
- iptable 的思路也可以排除,因为 Android VPN 独立路由,没法按应用设置路由。另外,Android 应用没权限改路由表。
- root ,如果用户接受则是个方案,那就走 linux 的方式去搞了。
其实搞 VPN 按应用分流最适合的就是系统支持,客户端去做这个事情成本很高,主要是没有系统没有给应用层提供用来分流的信息。而系统层轻轻松松就可以实现,系统层的信息是完整的,它知道数据包是那个进程发出来的。
但是 IP 层网络又没有规范要求数据包标上进程 ID ,这个需求就变成标准之外的设计,如果这么用 VPN 接口(本地客户端拿流量,而非标准连远端服务器)的需求旺盛,操作系统估计可能支持一下,我觉得可以看看 Google Android 的未来计划,VPN 客户端自己没必要折腾分流,感觉设计不太合理。