没有合适的资源?快使用搜索试试~ 我知道了~
首页详解Android 利用Iptables实现网络黑白名单(防火墙)
一、概述 为了使读此简笔的人对Iptables有一个简单的了解,此处强行百度了一波概念,如果想深入的了解Iptables的各种配置规则和内核对其的管理运行机制请自行www.baidu.com,这些并不是本简笔的目的所在。 闲言少叙,开始正文 —->以下概述来自baidu,读者可酌情跳过 iptables的前身叫ipfirewall (内核1.x时代),是从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到
资源详情
资源评论
资源推荐

详解详解Android 利用利用Iptables实现网络黑白名单实现网络黑白名单(防火墙防火墙)
一、概述一、概述
为了使读此简笔的人对Iptables有一个简单的了解,此处强行百度了一波概念,如果想深入的了解Iptables的各种配置规则和内
核对其的管理运行机制请自行www.baidu.com,这些并不是本简笔的目的所在。
闲言少叙,开始正文
—->以下概述来自baidu,读者可酌情跳过
iptables的前身叫ipfirewall (内核1.x时代),是从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简
易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进
内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起
来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。
他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来
读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议
栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)
—->以下是本文所关注的重点以下是本文所关注的重点
二、二、Iptables网络黑白名单网络黑白名单(防火墙防火墙)实现细节实现细节
因为考虑到一些权限的问题所以在实现方法上采用的是创建一个systemserver来运行这些方法。并提供出manager到三方应
用,这样在调用时可以排除一些权限的限制。同时本文只是做一个简单的参考概述,所以在后文中只提供了增加黑白名单的方
法和iptables规则,并没有提供相应的删除规则等,原理类似大家可自行补充添加。
2.1、创建、创建systemserver
2.1.1、 在/system/sepolicy/service.te中添加
type fxjnet_service, system_api_service, system_server_service, service_manager_type;
2.2.2、在/system/sepolicy/service_contexts中添加如下,
fxjnet u:object_r:fxjnet_service:s0
2.2.3、在frameworks/base/core/java/android/content/Context.java中添加
也可以不添加这个,只不过为了后面调用方便所以添加了。如果跳过此步,那么后面出现Context.FXJNET_SERVICE的地方
都用字串代替即可。
public static final String FXJNET_SERVICE="fxjnet";
2.2.4、在/frameworks/base/core/java/android/app/SystemServiceRegistry.java的静态代码块中添加如下代码注册service。
registerService(Context.FXJNET_SERVICE, FXJNETManager.class,
new CachedServiceFetcher<FXJNETManager>() {
@Override
public FXJNETManager createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(Context.FXJNET_SERVICE);
IFXJNETService service = IFXJNETService.Stub.asInterface(b);
return new FXJNETManager(ctx, service);
}});
2.2.5、在frameworks/base/services/java/com/android/server/SystemServer.java中添加如下代码,将service加入
systemserver中。
ServiceManager.addService(Context.FXJNET_SERVICE, new FXJNETService());
2.2.6 、AIDL文件
package android.os;
interface IFXJNETService{
void addNetworkRestriction(List<String> ipName,int type);
}
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0