3.如何在Android系统中集成?
以上通过adb shell命令行在Android设备上将方案调通之后,接下来考虑如何集成在Android系统中。作为一个整体解决方案,需要至少解决两部分功能:
(1)网络访问规则。包括规则定义、存储、对外接口、对内转化成Iptables命令。
(2)Iptables命令执行。
第一部分比较简单,在此不详述。主要看第二部分。
对于某一个垂直功能,Android经典的架构一般是由Java层的服务和接口、C++层的守护进程、Linux内核这由上到下的三层架构。网络管理架构也是如此。
Java层的服务包括NetworkManagementService/ConnectivityService/NetworkStatsService等,可以以AIDL对外提供接口。C++层的守护进程是Netd。
可以在NetworkManagementService和Netd扩充接口实现执行Iptables命令:
(1)在INetworkManagementService.aidl中定义扩充接口。
(2)在NetworkManagementService.java中实现接口。
NetworkManagementService通过一个NativeDaemonConnector类的成员变量,与Netd通信(通过Socket),可以通过这个成员变量向Netd发Iptables命令。新增加一种命令类型专门处理Iptables命令。
(3)在Netd中实现对(2)中下发的命令的处理。
CommandListener在Netd中负责侦听Java层命令。NetdConstants中已经有执行Iptables命令的接口,可以在此基础上扩展。