android应用上网屏蔽
Android 4.3
为了实现某个应用的上网控制,需要为Setting应用添加控制接口。
先说下原理,使用iptables控制应用uid访问网络。但是iptables命令的执行必须是root权限,也就是说不能在systemserver相关的系统服务中直接执行该命令,这个进程并不是root进程,执行命令不会生效。这样就有以下两个方案,简要说一下:
1 . 原生方案:
Android系统的防火墙或是带宽控制都是NetworkManagementService通过NativeDaemonConnector的excute()方法向Netd发送命令,Netd中CommandListener.cpp中持有该连接的socket进行通信,也就是说netd具有root权限,可以执行iptables指令,具体在init.rc也能看到netd的启动:
service netd /system/bin/netdclass mainsocket netd stream 0660 root systemsocket dnsproxyd stream 0660 root inetsocket mdns stream 0660 root system
socket <name> <type> <perm> [ <user> [ <group> ] ]
可见其user 为 root。
具体的init.rc解析见:http://www.cnblogs.com/lxjshuju/p/6915468.html
这样就可以在NetworkManagementService中添加接口,在netd中实现。
正常操作是在Firewall模块中实现对应cmd。但是Firewall可能是disable的,所以这个方案用起来不太方便。启用防火墙要更改访问规则,因为默认所有的应用是不能上网的:
int FirewallController::enableFirewall(void) {int res = 0;// flush any existing rulesdisableFirewall();// create default rule to drop all trafficres |= execIptables(V4V6, "-A", LOCAL_INPUT, "-j", "DROP", NULL);res |= execIptables(V4V6, "-A", LOCAL_OUTPUT, "-j", "REJECT", NULL);res |= execIptables(V4V6, "-A", LOCAL_FORWARD, "-j", "REJECT", NULL);return res;
}
所有的input、output及forward都reject了。所以启用防火墙还得再配置。
为什么会这样,科普下防火墙策略:
1)黑名单策略:
先允许所有应用都能上网,然后配置黑名单禁止
2)白名单策略:
先禁止所有应用上网,然后配置白名单允许
android采用了白名单策略。
这个方案网上已经有了很多实现,这里不再详述:
https://blog.csdn.net/xiaoxsen/article/details/78034353
https://book.2cto.com/201405/43233.html
2 . 其他方案:
写一个bindserver及client,生成可执行程序cmd。
这个程序在init.rc中启动以root账户启动
service cmd /system/bin/cmdclass mainuser root
cmd程序的server端执行 popen(input,“r”),input传入iptables指令。
具体的binder c++版不再详述。
执行iptables指令如下:
String inputReject = "iptables -A INPUT -m owner --uid-owner " + applicationInfo.uid +" -j REJECT";
String outputReject = "iptables -A OUTPUT -m owner --uid-owner " + applicationInfo.uid +" -j REJECT";
android应用上网屏蔽相关推荐
- android屏蔽表情输入法,Android中EditText屏蔽第三方输入法表情的方法示例
前言 众所周知如果用第三方的输入法的表情会给开发带来一定的麻烦,一般地像服务器上传的字符都是普通的字符,但是测试,就是狠狠得拿出搜狗输入法,点几个表情,那么问题就来了,要么是显示异常,要么是直接cra ...
- Android GPRS上网过程中数据图标的变化过程
以前也写了一些android数据上网的过程,其实目的就是一个,探寻这些模块之间发现的的通信和协作过程.TD-SCDMA模组平板上网的时候状态栏显示的是"1x"的图标,同事说这不正常 ...
- android 发广播屏蔽home键,如何在Android App中屏蔽(拦截)Home按键及其他按键
如何在Android App中屏蔽(拦截)Home按键及其他按键 (2013-09-08 13:29:11) 标签: 关键 按键 关键点 方法 安卓 it 编写一个Acitivity,如下所示: 关键 ...
- 安卓java浮层不响应点击事件,Android悬浮窗屏蔽悬浮窗外部所有的点击事件的实例代码...
Android可以在所有应用上方添加View,就是给WindowManager添加一个View,在创建的View的时候可以给这个View设置LayoutParams(android.view.Wind ...
- android系统网络管理,详解安全管家Android平台上网管理功能
Android系统在这几年忽然兴起,并成为如今最受欢迎的智能手机操作系统,却始终没有能够很好地对自身的上网管理功能做出很好的优化.小编也和很多人一样,是Symbian转战Android的.而作为一名伪 ...
- 电脑通过android手机上网 .
方案一 转自:http://blog.csdn.net/lastsweetop/article/details/7257546 话说没网络怎么能行啊,要是断网了怎么办,用android手机可以轻松上网 ...
- Android手机上网、彩信APN设置
Android手机上网.彩信APN设置 Godaddy最新域名优惠码 - 帅哥推荐博客主机 - linost圣诞促销返款 - iPhone4销售状态查询 前几天师弟跑来问我G2(Magic)怎么 ...
- Android手机上网实现机制
本章介绍DataConnectionTracker对DataConnection手机上网数据连接的管理机制和流程. 一.Android网络整体结构 流程结构图如下: Android网络中,在底层实现了 ...
- Android中如何屏蔽IP地址
前言 前几篇介绍了iptables | 路由策略 | DNS等相关理论基础知识,现在在这基础上,去学习安卓的网络框架并应用这些知识点.Android的网络框架可以细分很多部分,按功能分的话,可以分网络 ...
最新文章
- Science:纽约西奈山医学院房刚组定量分析真核生物DNA 6mA解析细菌污染的影响...
- Android之android.graphics.drawable.Drawable.Callback回调接口
- MongoDB系列之——安装和启动
- 【入门4】数组 (今天刷洛谷了嘛)
- oracle中update补空格lpad,Oracle lpad 函数
- python自学免费教程-python免费入门教程/求完整的Python入门教程
- A5如何备份oracle数据库,oracle的数据库的导入导出
- 一些著名的大公司面试题目-java
- C# 文件查询管理器
- 【Ubuntu版】CMake安装教程
- vue2/vue3详细知识点
- 获取经纬度中心点函数工具,经纬度面积算法,D3js,xy轴转为经纬度算法,六代度坐标转换为经纬度
- 码云团队如何使用码云?
- Airtest框架和Poco框架常见问题
- 查看Debian版本号的方法
- reactjs 视频教程
- 如何搭建一套免费开源的微信群机器人问答系统?
- 机器学习(一)——随机游走
- 京东方校园招聘项目总结
- 潮州赤凤田湖溯溪历险记
热门文章
- 统计字符串中每个字符的个数。(原始字符串是:“aabccdeefff”,结果是:a2 b1 c2 d1 e2 f3)
- 2021年中国伏特加酒行业市场贸易及俄罗斯伏特加酒产量分析:瑞典、俄罗斯、意大利为中国伏特加酒主要进口市场[图]
- 1个月错失百万,为什么还要感恩饿了么?
- apt 安装 openssl
- 越南unicode范围
- [转载]从100PV到1亿级PV网站架构演变
- Python 可视化 | 关联图 - 散点图1
- word文档中公式和文字不等高
- Photoshop如何使用滤镜之实例演示?
- ArcMap制图相关问题