<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                本節將介紹IpFwd和FirewallCmd兩個命令。 **1.IpFwd命令** IpFwd命令比較簡單,主要是控制內核ipforward功能,其支持三個選項。 - status:用于判斷ipforward功能是否開啟。 - enable和disable:分別用于啟動和禁止ipforward功能。 上述功能借助TetherController控制對象來完成,其內部代碼非常簡單,就是通過讀寫/proc/sys/net/ipv4/ip_forward文件來實現對內核ipforward功能的管理。 >[info] **提示** 讀者可上網搜索/proc/sys/net/ipv4目錄下其他文件的作用。 **2.FirewallCmd命令** FirewallCmd用于防火墻控制。它支持以下命令選項。 - enable和is_enabled:用于啟動防火墻和判斷防火墻是否已經啟動。 - set_interface_rule:針對單個或多個NIC設備設置防火墻規則。 - set_egress_source_rule和set_egress_dest_rule:基于源IP和目標IP地址設置防火墻。 - set_uid_rule:根據uid設置單個進程的防火墻。 下面重點介紹防火墻功能的啟動以及如果針對單個進程的設置防火墻規則。 (1)啟動防火墻 本節介紹enable和set_uid_rule。其中,enable將調用FirewallCtronller的enableFireWall函數,代碼如下所示。 **FirewallController.cpp::enableFirewall** ~~~ int FirewallController::enableFirewall(void) { int res = 0; // 先清空fw_INPUT/fw_OUTPUT/fw_FORWARD鏈中的規則 disableFirewall(); // 啟動防火墻就是設置Filter表中fw_INPUT/fw_OUTPUT/fw_FORWARD的目標為DROP和REJECT res |= 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; } ~~~ 由上述代碼可知,當啟動防火墻時,filter表中三個用于防火墻控制的Chain的目標都改為DROP或REJECT,這樣系統就無法收發網絡數據包。圖2-19所示為筆者在Ubuntu機器上設置的規則。 :-: ![](https://box.kancloud.cn/549160290311bc3c07f7716191f6ac32_1182x318.jpg) 圖2-19 enable防火墻 圖2-19所示是利用Ubuntu機器模擬enableFirewall函數后的結果。防火墻啟動后,機器就無法連接網絡了。 讀者可能好奇,為什么enableFirewall的破壞作用如此之大?這是因為防火墻設置一般有兩種方法。 - 先允許整個系統都能上網,然后再單獨設置防火墻規則以禁止某些模塊連接網絡。 - 先禁止整個系統上網,然后再單獨設置防火墻規則以允許某些模塊能連接網絡。 由此可知,Android采用了第二種更為嚴厲的方式來設置防火墻。接下來的工作就需要設置各種防火墻規則以允許某些程序能夠上網了。本節討論如何為單個進程設置防火墻規則。 * * * * * **提示** 采用Ubuntu來測試enableFirewall,因為模擬器和主機也使用socket通信,一旦啟動防火墻,主機就無法再使用adb shell來控制模擬器了。 * * * * * (2)設置進程防火墻 本節介紹的針對單個應用程序設置其防火墻規則,是大部分軟件管家禁止某些應用程序上網的通用方法。代碼在setUidRule函數中,如下所示。 **FirewallController.cpp::setUidRule** ~~~ int FirewallController::setUidRule(int uid, FirewallRule rule) { char uidStr[16]; sprintf(uidStr, "%d", uid); const char* op; if (rule == ALLOW) { op = "-I"; } else { op = "-D"; } int res = 0; res |= execIptables(V4V6, op, LOCAL_INPUT,"-m", "owner", "--uid-owner", uidStr,"-j", "RETURN", NULL); res |= execIptables(V4V6, op, LOCAL_OUTPUT, "-m", "owner", "--uid-owner", uidStr,"-j", "RETURN", NULL); return res; } ~~~ 該函數很簡單,就是調用正確的iptables命令,它們分別如下。 ~~~ iptables-I FORWARD_INPUT-m owner--uid-owner uid-j RETURN iptables-I FORWARD_OUTPUT-m owner--uid-owner uid-j RETURN ~~~ 這里要特別指出的是,目前Android只能根據uid來區分進程。由于Android平臺允許不同應用程序共享同一個uid[^①]。多個應用程序共享同一個uid的情況下,如果用戶禁止了其中一個應用程序(軟件管家的防火墻控制允許用戶選擇是否禁止某個應用程序上網),則連帶其他的相關程序都不能上網,雖然用戶并沒有選擇禁止其他應用程序。 * * * * * **提示** 筆者測試了360安全衛士,當出現上述關聯情況時,它能提醒用戶哪些關聯程序也會被一并禁止上網。 * * * * * [^①]:參考《深入理解Android:卷Ⅱ》4.3.1節關于Android系統中UID/GID知識的介紹。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看