Android下基于Iptables的一种app网络访问控制方法(二)
程序员文章站
2023-11-24 22:55:34
3.如何在android中集成?
以上通过adb shell命令行在android设备上将方案调通之后,接下来考虑如何集成在android系统中。作为一个整体解决方案,需要至少解决两部分功能:
(1...
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命令的接口,可以在此基础上扩展。