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应用上网屏蔽相关推荐

  1. android屏蔽表情输入法,Android中EditText屏蔽第三方输入法表情的方法示例

    前言 众所周知如果用第三方的输入法的表情会给开发带来一定的麻烦,一般地像服务器上传的字符都是普通的字符,但是测试,就是狠狠得拿出搜狗输入法,点几个表情,那么问题就来了,要么是显示异常,要么是直接cra ...

  2. Android GPRS上网过程中数据图标的变化过程

    以前也写了一些android数据上网的过程,其实目的就是一个,探寻这些模块之间发现的的通信和协作过程.TD-SCDMA模组平板上网的时候状态栏显示的是"1x"的图标,同事说这不正常 ...

  3. android 发广播屏蔽home键,如何在Android App中屏蔽(拦截)Home按键及其他按键

    如何在Android App中屏蔽(拦截)Home按键及其他按键 (2013-09-08 13:29:11) 标签: 关键 按键 关键点 方法 安卓 it 编写一个Acitivity,如下所示: 关键 ...

  4. 安卓java浮层不响应点击事件,Android悬浮窗屏蔽悬浮窗外部所有的点击事件的实例代码...

    Android可以在所有应用上方添加View,就是给WindowManager添加一个View,在创建的View的时候可以给这个View设置LayoutParams(android.view.Wind ...

  5. android系统网络管理,详解安全管家Android平台上网管理功能

    Android系统在这几年忽然兴起,并成为如今最受欢迎的智能手机操作系统,却始终没有能够很好地对自身的上网管理功能做出很好的优化.小编也和很多人一样,是Symbian转战Android的.而作为一名伪 ...

  6. 电脑通过android手机上网 .

    方案一 转自:http://blog.csdn.net/lastsweetop/article/details/7257546 话说没网络怎么能行啊,要是断网了怎么办,用android手机可以轻松上网 ...

  7. Android手机上网、彩信APN设置

    Android手机上网.彩信APN设置 Godaddy最新域名优惠码 -  帅哥推荐博客主机 -  linost圣诞促销返款 -  iPhone4销售状态查询 前几天师弟跑来问我G2(Magic)怎么 ...

  8. Android手机上网实现机制

    本章介绍DataConnectionTracker对DataConnection手机上网数据连接的管理机制和流程. 一.Android网络整体结构 流程结构图如下: Android网络中,在底层实现了 ...

  9. Android中如何屏蔽IP地址

    前言 前几篇介绍了iptables | 路由策略 | DNS等相关理论基础知识,现在在这基础上,去学习安卓的网络框架并应用这些知识点.Android的网络框架可以细分很多部分,按功能分的话,可以分网络 ...

最新文章

  1. Science:纽约西奈山医学院房刚组定量分析真核生物DNA 6mA解析细菌污染的影响...
  2. Android之android.graphics.drawable.Drawable.Callback回调接口
  3. MongoDB系列之——安装和启动
  4. 【入门4】数组 (今天刷洛谷了嘛)
  5. oracle中update补空格lpad,Oracle lpad 函数
  6. python自学免费教程-python免费入门教程/求完整的Python入门教程
  7. A5如何备份oracle数据库,oracle的数据库的导入导出
  8. 一些著名的大公司面试题目-java
  9. C# 文件查询管理器
  10. 【Ubuntu版】CMake安装教程
  11. vue2/vue3详细知识点
  12. 获取经纬度中心点函数工具,经纬度面积算法,D3js,xy轴转为经纬度算法,六代度坐标转换为经纬度
  13. 码云团队如何使用码云?
  14. Airtest框架和Poco框架常见问题
  15. 查看Debian版本号的方法
  16. reactjs 视频教程
  17. 如何搭建一套免费开源的微信群机器人问答系统?
  18. 机器学习(一)——随机游走
  19. 京东方校园招聘项目总结
  20. 潮州赤凤田湖溯溪历险记

热门文章

  1. 统计字符串中每个字符的个数。(原始字符串是:“aabccdeefff”,结果是:a2 b1 c2 d1 e2 f3)
  2. 2021年中国伏特加酒行业市场贸易及俄罗斯伏特加酒产量分析:瑞典、俄罗斯、意大利为中国伏特加酒主要进口市场[图]
  3. 1个月错失百万,为什么还要感恩饿了么?
  4. apt 安装 openssl
  5. 越南unicode范围
  6. [转载]从100PV到1亿级PV网站架构演变
  7. Python 可视化 | 关联图 - 散点图1
  8. word文档中公式和文字不等高
  9. Photoshop如何使用滤镜之实例演示?
  10. ArcMap制图相关问题