真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

framework層和native層實現(xiàn)聯(lián)網(wǎng)控制(iptable方式)-創(chuàng)新互聯(lián)

最近工作中,需要開發(fā)一個功能----聯(lián)網(wǎng)控制,這個功能其實用過root的安卓機應該都知道,禁止某個應用連接移動網(wǎng)絡或者wifi。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供紅寺堡網(wǎng)站建設、紅寺堡做網(wǎng)站、紅寺堡網(wǎng)站設計、紅寺堡網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、紅寺堡企業(yè)網(wǎng)站模板建站服務,十多年紅寺堡做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

root后,通過su去執(zhí)行iptable的命令就可以根據(jù)uid去控制應用聯(lián)網(wǎng)權限

但是由于公司是做手機系統(tǒng)開發(fā),手機生產(chǎn)出來不允許帶有root權限,所以我們完成這個功能也是不可以使用root權限去實現(xiàn)的。

由于第一次做這種功能,剛開始我居然天真的以為系統(tǒng)中帶有這種控制權限的接口,然后只有個Internet權限,無法區(qū)分數(shù)據(jù)流量和wifi。

嗯,直接上最終實現(xiàn)的方式。

當時發(fā)現(xiàn)手機上有個功能是限制應用后臺數(shù)據(jù)流量,該功能如其所述就是限制應用在后臺狀態(tài)下無法使用流量。通過代碼追溯,找到其調(diào)用到的是一個 NetworkManagementService.java 這個Service,方法就是下面這個,里面的mConnector就是用來封裝發(fā)送命令的類。有興趣的可以自己去看一下 ---> NativeDaemonConnector.java

framework層和native層實現(xiàn)聯(lián)網(wǎng)控制(iptable方式)

    @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();
            }
        }
    }

framework層和native層實現(xiàn)聯(lián)網(wǎng)控制(iptable方式)

通過搜索addnaughtyapps這個關鍵字,在 CommandListener.cpp 這個類中找到了解析這個命令的地方,

framework層和native層實現(xiàn)聯(lián)網(wǎng)控制(iptable方式)

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

framework層和native層實現(xiàn)聯(lián)網(wǎng)控制(iptable方式)

最終在BandwidthController.cpp這個類中執(zhí)行操作iptable的命令,

Ok,既然這個Service擁有直接執(zhí)行iptable的權限,那么我們就直接在里面添加我們需要的方法不就OK了嗎。

因此,

1. 在CommandListener.cpp 中加入過濾關鍵字的判斷,

2. 在NetworkManagementService.java中加入接口去發(fā)送命令,

3. 最終實現(xiàn)在BandwidthController.cpp 中進行。

第三步主要就是iptable的操作了,如何使用網(wǎng)上很多,不過當時我還真是看了好久才弄懂iptable的操作......用到的主要就是 -I 和 -D 命令。

其實比起這些,我更好奇netd 進程是如何擁有執(zhí)行root命令的權限的。等有空了一定要研究下。

目前只知道在init.rc中可以配置以root權限去啟動service。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網(wǎng)站題目:framework層和native層實現(xiàn)聯(lián)網(wǎng)控制(iptable方式)-創(chuàng)新互聯(lián)
轉載來于:http://weahome.cn/article/dsphod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部