• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > framework层和native层实现联网控制(iptable方式),nativeiptable

framework层和native层实现联网控制(iptable方式),nativeiptable

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了iptable,关闭iptable,centos iptable,android iptable,iptable f等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

framework层和native层实现联网控制(iptable方式),nativeiptable


最近工作中,需要开发一个功能----联网控制,这个功能其实用过root的安卓机应该都知道,禁止某个应用连接移动网络或者wifi。

root后,通过su去执行iptable的命令就可以根据uid去控制应用联网权限

但是由于公司是做手机系统开发,手机生产出来不允许带有root权限,所以我们完成这个功能也是不可以使用root权限去实现的。

由于第一次做这种功能,刚开始我居然天真的以为系统中带有这种控制权限的接口,然后只有个Internet权限,无法区分数据流量和wifi。

嗯,直接上最终实现的方式。

当时发现手机上有个功能是限制应用后台数据流量,该功能如其所述就是限制应用在后台状态下无法使用流量。通过代码追溯,找到其调用到的是一个 NetworkManagementService.java 这个Service,方法就是下面这个,里面的mConnector就是用来封装发送命令的类。有兴趣的可以自己去看一下 ---> NativeDaemonConnector.java

 

    @Override
    public void setUidNetworkRules(int uid, boolean rejectOnQuotaInterfaces) {
        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);

        // silently discard when control disabled
        // TODO: eventually migrate to be always enabled
        if (!mBandwidthControlEnabled) return;

        synchronized (mQuotaLock) {
            final boolean oldRejectOnQuota = mUidRejectOnQuota.get(uid, false);
            if (oldRejectOnQuota == rejectOnQuotaInterfaces) {
                // TODO: eventually consider throwing
                return;
            }

            try {
                mConnector.execute("bandwidth",
                        rejectOnQuotaInterfaces ? "addnaughtyapps" : "removenaughtyapps", uid);
                if (rejectOnQuotaInterfaces) {
                    mUidRejectOnQuota.put(uid, true);
                } else {
                    mUidRejectOnQuota.delete(uid);
                }
            } catch (NativeDaemonConnectorException e) {
                throw e.rethrowAsParcelableException();
            }
        }
    }

 

通过搜索addnaughtyapps这个关键字,在 CommandListener.cpp 这个类中找到了解析这个命令的地方,

   if (!strcmp(argv[1], "addnaughtyapps") || !strcmp(argv[1], "ana")) {
        if (argc < 3) {
            sendGenericSyntaxError(cli, "addnaughtyapps <appUid> ...");
            return 0;
        }
        int rc = sBandwidthCtrl->addNaughtyApps(argc - 2, argv + 2);
        sendGenericOkFail(cli, rc);
        return 0;
    }

最终在BandwidthController.cpp这个类中执行操作iptable的命令,

Ok,既然这个Service拥有直接执行iptable的权限,那么我们就直接在里面添加我们需要的方法不就OK了吗。

 

因此,

1. 在CommandListener.cpp 中加入过滤关键字的判断,

2. 在NetworkManagementService.java中加入接口去发送命令,

3. 最终实现在BandwidthController.cpp 中进行。

第三步主要就是iptable的操作了,如何使用网上很多,不过当时我还真是看了好久才弄懂iptable的操作......用到的主要就是 -I 和 -D 命令。

其实比起这些,我更好奇netd 进程是如何拥有执行root命令的权限的。等有空了一定要研究下。

目前只知道在init.rc中可以配置以root权限去启动service。

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • framework层和native层实现联网控制(iptable方式),nativeiptable

相关文章

  • 2017-05-26Google官方MVP模式示例项目解析 todo-mvp,mvptodo-mvp
  • 2017-05-26Android新手入门2016(16)--画图
  • 2017-05-26安卓开发 第一篇 关于依赖注入框架dagger2的使用和理解
  • 2017-05-26linux 破解版 confluence
  • 2017-05-26【原创】Android ExpandableListView使用,expandablelistview
  • 2017-05-26MySQL rpl_semi_sync_master_timeout相关的一件BUG
  • 2017-05-26《Android Studio实用指南》12.18 文本搜索工具
  • 2017-05-26linux下神奇的script命令
  • 2017-05-26Android 颜色Color,android颜色color
  • 2017-05-26android开发之——获取相册图片和路径,

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓中Paint类和Canvas类的方法汇总,安卓中canvas
    • 解决webview调用 goBack() 返回上一页自动刷新闪白的情况,webviewgoback
    • ORB_SLAM2在Android上的移植过程
    • 自定义数字加减控件,自定义数字控件
    • Linux内核系列—7.操作系统开发之中断和异常,linux内核
    • WKWebView与js交互之完美解决方案
    • 国外干货!6个方法助你设计出优秀的APP,干货app
    • android 5.0后对于apk 跑32 64 的逻辑
    • Android基础TOP3:线性布局的特点,常用属性,及权重值,androidtop3
    • Redis3.0.7集群部署完整版

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有