2.3 CommandListener中的命令linux
CL一共定義了11個命令,這些命令充分反映了Netd在Android系統中網絡管理和控制方面的職責。本節首先介紹Linux系統中經常使用的三個網絡管理工具,而後再分類介紹CL中的相關命令。網絡
2.3.1 iptables、tc和ip命令app
網絡管理和控制一直是一項比較複雜和專業的工做,因爲Linux系統中本來就有一些強大的網絡管理工具,故Netd也堅決果斷充分利用了它們。目前Netd中最依賴三個網絡管控工具,即iptables、tc和ip。tcp
1. iptables命令[7][8][9]工具
iptables是Linux系統中最重要的網絡管控工具。它與Kernel中的netfilter模塊配合工做,其主要功能是爲netfilter設置一些過濾(filter)或網絡地址轉換(NAT)的規則。當Kernel收到網絡數據包後,將會依據iptables設置的規則進行相應的操做。舉個最簡單的例子,能夠利用iptables設置這樣一條防火牆規則:丟棄來自IP地址爲192.168.1.108的全部數據包。ip
(1)iptables原理ci
iptables的語法比較複雜,但工做原理較易理解。清楚iptables的前提是理解它的表(Table)、鏈(Chain)和規則(Rule)。三者關係如圖2-10所示。
get
由圖2-10可知:io
iptables內部(實際上是Kernel的netfilter模塊)維護着四個Table,分別是filter、nat、mangle和raw,它們對應着不一樣的功能,稍後將詳細介紹它們的做用。table
Table中定義了Chain。一個Table能夠支持多個Chain,Chain其實是Rule的集合,每一個Table都有默認的Chain。例如filter表默認的Chain有INPUT、OUTPUT、FORWARD。用戶能夠自定義Chain,也可修改Chain中的Rule。稍後將介紹不一樣Table中默認Chain方面的知識。
Rule就是iptables工做的規則。首先,系統將檢查要處理的數據包是否知足Rule設置的條件,若是知足則執行Rule中設置的目標(Target),不然繼續執行Chain中的下一條Rule。
由前述內容可知,iptables中的Table和Chain是理解iptables工做的關鍵。表2-1總結了iptables中默認Table及Chain的相關內容。
由表2-1可知,有些Table的默認Chain具備相同的名字,致使咱們理解起來有些困難。爲此,讀者必須結合圖2-11所示的iptables數據包處理流程圖來理解前述內容。由圖可知,不一樣Table和Chain在此處理流程中起着不一樣的做用。
(2)iptables Target和經常使用參數
iptables中的Rule有四個默認定義的Target,以下。
ACCEPT:接收數據包。
DROP:直接丟棄數據包。沒有任何信息會反饋給數據源端。
RETURN:返回到調用Chain,略事後續的Rule處理。
QUEUE:數據返回到用戶空間去處理。
提示 iptables的擴展Target還支持REJECT。相比DROP而言,REJECT會發送反饋信息給數據源端,如主機不可達之類(icmp-host-unreachable)的信息。目前只有INPUT、OUTPUT、FORWARD以及被這三個鏈調用的自定義鏈支持REJECT。
iptables有不少參數,此處先介紹一些經常使用參數。
-t:指定table。若是不帶此參數,則默認爲filter表。
-A,--append chain rule-specification:在指定Chain的末尾添加一條Rule,rule-specification指明該Rule的內容。
-D,--delete chain rule-specification:刪除指定Chain中知足rule-specification的那條Rule。
-I,--insert chain [rule num] rule-specification:爲指定Chain插入一條Rule,位置由rule num指定。若是沒有該參數,則默認加到Chain的頭部。
-N:建立一條新Chain。
-L,--list:顯示指定Table的Chain和Rule的信息。
Rule-specification描述該Rule的匹配條件以及目標動做,它也有一些參數來指明這些信息。
-i:指定接收數據包的網卡名,如eth0、eth1等。
-o:指定發出數據包的網卡名。
-p:指定協議,如tcp、udp等。
-s,--source address[/mask]:指定數據包的源IP地址。
-j,--jump target:跳轉到指定目標,如ACCEPT、DROP等。
之前文提到的設置防火牆爲例,其對應的iptables設置參數以下。
iptables -t filter -A INPUT -s 192.168.1.108 -j DROP
若是僅攔截協議爲tcp的數據包,則相應參數以下。
iptables -t filter -A INPUT -p tcp -s 192.168.1.108 -j DROP
另外,iptables僅支持IPv4,若是需針對IPv6進行相應設置,則要使用ip6tables工具。
提示 iptables的用法很是靈活,若是沒有長期的使用經驗,將很難理解它們的真正做用。