手机企业网站开发,学院网站模板,本地网站搭建时需要使用的软件是,广元市建设银行网站最近工作中#xff0c;需要开发一个功能----联网控制#xff0c;这个功能其实用过root的安卓机应该都知道#xff0c;禁止某个应用连接移动网络或者wifi。 root后#xff0c;通过su去执行iptable的命令就可以根据uid去控制应用联网权限 但是由于公司是做手机系统开发#… 最近工作中需要开发一个功能----联网控制这个功能其实用过root的安卓机应该都知道禁止某个应用连接移动网络或者wifi。 root后通过su去执行iptable的命令就可以根据uid去控制应用联网权限 但是由于公司是做手机系统开发手机生产出来不允许带有root权限所以我们完成这个功能也是不可以使用root权限去实现的。 由于第一次做这种功能刚开始我居然天真的以为系统中带有这种控制权限的接口然后只有个Internet权限无法区分数据流量和wifi。 嗯直接上最终实现的方式。 当时发现手机上有个功能是限制应用后台数据流量该功能如其所述就是限制应用在后台状态下无法使用流量。通过代码追溯找到其调用到的是一个 NetworkManagementService.java 这个Service方法就是下面这个里面的mConnector就是用来封装发送命令的类。有兴趣的可以自己去看一下 --- NativeDaemonConnector.java Overridepublic void setUidNetworkRules(int uid, boolean rejectOnQuotaInterfaces) {mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);// silently discard when control disabled// TODO: eventually migrate to be always enabledif (!mBandwidthControlEnabled) return;synchronized (mQuotaLock) {final boolean oldRejectOnQuota mUidRejectOnQuota.get(uid, false);if (oldRejectOnQuota rejectOnQuotaInterfaces) {// TODO: eventually consider throwingreturn;}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。 转载于:https://www.cnblogs.com/oscar1011/p/5243877.html