iptables的应用学习去年定制化了一个wifi热点限速2M/s的功能,接下来把解决方案写下来。
iptables是Linux系统的IP信息包过滤工具,实际就是一个Linux命令,通过这个命令,可以对整个系统发出去的包,接收到的包,以及转发的包进行拦截、修改、拒绝等操作。刚好Android也是基于Linux内核的系统,也集成了iptables,一些android网络相关重要功能都是通过iptables实现。
android网络相关的重要功能在NetworkManagementService.java中实现,对iptables命令的执行可以在NetworkManagementService.java中操作,避免报GreenNetworkService: stderr: [-] set uid permission denied: Operation not permitted错误。
回归正题,WiFi Hotspot限速问题也是用到iptables命令,但我们的frameworks已经提供了接口,只需要调用下面接口就行。

INetworkManagementService mNetworkService=INetworkManagementService.Stub.asInterface(
 ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
 long limit=210241024L;
 int rxBytes = (int) (limit * 8 * 2) / (3 * 1024);
 int txBytes = (int) (limit * 8) / (3 * 1024);
 mNetworkService.setInterfaceThrottle(“ap0”,rxBytes,txBytes);