tcpdump命令的使用方法(8)
tcpdump命令的使用方法
有效的操作符有:
否定操作 (`!' 或 `not') 與操作(`&&' 或 `and') 或操作(`||' 或 `or')
否定操作符的優(yōu)先級別最高. 與操作和或操作優(yōu)先級別相同, 并且二者的結(jié)合順序是從左到右. 要注意的是, 表達(dá)'與操作'時(shí),
需要顯式寫出'and'操作符, 而不只是把前后表達(dá)元并列放置(nt: 二者中間的'and' 操作符不可省略).
如果一個標(biāo)識符前沒有關(guān)鍵字, 則表達(dá)式的解析過程中最近用過的關(guān)鍵字(往往也是從左往右距離標(biāo)識符最近的關(guān)鍵字)將被使用.比如,
not host vs and ace
是以下表達(dá)的精簡:
not host vs and host ace
而不是not (host vs or ace).(nt: 前兩者表示, 所需數(shù)據(jù)包不是來自或發(fā)往host vs, 而是來自或發(fā)往ace.而后者表示數(shù)據(jù)包只要不是來自或發(fā)往vs或ac都符合要求)
整個條件表達(dá)式可以被當(dāng)作一個單獨(dú)的字符串參數(shù)也可以被當(dāng)作空格分割的多個參數(shù)傳入tcpdump, 后者更方便些. 通常, 如果表達(dá)式中包含元字符(nt: 如正則表達(dá)式中的'_, '.'以及shell中的'('等字符), 最好還是使用單獨(dú)字符串的方式傳入. 這時(shí),整個表達(dá)式需要被單引號括起來. 多參數(shù)的傳入方式中, 所有參數(shù)最終還是被空格串聯(lián)在一起, 作為一個字符串被解析.
附錄:tcpdump的表達(dá)元
(nt: True 在以下的描述中含義為: 相應(yīng)條件表達(dá)式中只含有以下所列的一個特定表達(dá)元, 此時(shí)表達(dá)式為真, 即條件得到滿足)
dst host host
如果IPv4/v6 數(shù)據(jù)包的目的域是host, 則與此對應(yīng)的條件表達(dá)式為真.host 可以是一個ip地址, 也可以是一個主機(jī)名.
src host host
如果IPv4/v6 數(shù)據(jù)包的源域是host, 則與此對應(yīng)的條件表達(dá)式為真.
host 可以是一個ip地址, 也可以是一個主機(jī)名.
host host
如果IPv4/v6數(shù)據(jù)包的源或目的地址是 host, 則與此對應(yīng)的條件表達(dá)式為真.以上的幾個host 表達(dá)式之前可以添加以下關(guān)鍵字:ip, arp, rarp, 以及 ip6.比如:
ip host host
也可以表達(dá)為:
ether proto \ip and host host(nt: 這種表達(dá)方式在下面有說明, 其中ip之前需要有\(zhòng)來轉(zhuǎn)義,因?yàn)閕p 對tcpdump 來說已經(jīng)是一個關(guān)鍵字了.)
如果host 是一個擁有多個IP 的主機(jī), 那么任何一個地址都會用于包的匹配(nt: 即發(fā)向host 的數(shù)據(jù)包的目的地址可以是這幾個IP中的任何一個, 從host 接收的數(shù)據(jù)包的源地址也可以是這幾個IP中的任何一個).
ether dst ehost
如果數(shù)據(jù)包(nt: 指tcpdump 可抓取的數(shù)據(jù)包, 包括ip 數(shù)據(jù)包, tcp數(shù)據(jù)包)的以太網(wǎng)目標(biāo)地址是ehost,則與此對應(yīng)的條件表達(dá)式為真. Ehost 可以是/etc/ethers 文件中的名字或一個數(shù)字地址(nt: 可通過 man ethers 看到對/etc/ethers 文件的描述, 樣例中用的是數(shù)字地址)
ether src ehost
如果數(shù)據(jù)包的以太網(wǎng)源地址是ehost, 則與此對應(yīng)的條件表達(dá)式為真.
ether host ehost
如果數(shù)據(jù)包的以太網(wǎng)源地址或目標(biāo)地址是ehost, 則與此對應(yīng)的條件表達(dá)式為真.
gateway host
如果數(shù)據(jù)包的網(wǎng)關(guān)地址是host, 則與此對應(yīng)的條件表達(dá)式為真. 需要注意的是, 這里的網(wǎng)關(guān)地址是指以太網(wǎng)地址, 而不是IP 地址(nt | rt: I.e., 例如, 可理解為'注意'.the Ethernet source or destination address, 以太網(wǎng)源和目標(biāo)地址, 可理解為, 指代上句中的'網(wǎng)關(guān)地址').host 必須是名字而不是數(shù)字, 并且必須在機(jī)器的'主機(jī)名-ip地址'以及'主機(jī)名-以太地址'兩大映射關(guān)系中 有其條目(前一映射關(guān)系可通過/etc/hosts文件, DNS 或 NIS得到, 而后一映射關(guān)系可通過/etc/ethers 文件得到. nt: /etc/ethers并不一定存在 , 可通過man ethers 看到其數(shù)據(jù)格式, 如何創(chuàng)建該文件, 未知,需補(bǔ)充).也就是說host 的含義是 ether host ehost 而不是 host host, 并且ehost必須是名字而不是數(shù)字.
目前, 該選項(xiàng)在支持IPv6地址格式的配置環(huán)境中不起作用(nt: configuration, 配置環(huán)境, 可理解為,通信雙方的網(wǎng)絡(luò)配置).
dst net net
如果數(shù)據(jù)包的目標(biāo)地址(IPv4或IPv6格式)的網(wǎng)絡(luò)號字段為 net, 則與此對應(yīng)的條件表達(dá)式為真.
net 可以是從網(wǎng)絡(luò)數(shù)據(jù)庫文件/etc/networks 中的名字, 也可以是一個數(shù)字形式的網(wǎng)絡(luò)編號.
一個數(shù)字IPv4 網(wǎng)絡(luò)編號將以點(diǎn)分四元組(比如, 192.168.1.0), 或點(diǎn)分三元組(比如, 192.168.1 ), 或點(diǎn)分二元組(比如, 172.16), 或單一單元組(比如, 10)來表達(dá);
對應(yīng)于這四種情況的網(wǎng)絡(luò)掩碼分別是:四元組:255.255.255.255(這也意味著對net 的匹配如同對主機(jī)地址(host)的匹配:地址的四個部分都用到了),三元組:255.255.255.0, 二元組: 255.255.0.0, 一元組:255.0.0.0.
對于IPv6 的地址格式, 網(wǎng)絡(luò)編號必須全部寫出來(8個部分必須全部寫出來); 相應(yīng)網(wǎng)絡(luò)掩碼為:
ff:ff:ff:ff:ff:ff:ff:ff, 所以IPv6 的網(wǎng)絡(luò)匹配是真正的'host'方式的匹配(nt | rt | rc:地址的8個部分都會用到,是否不屬于網(wǎng)絡(luò)的字節(jié)填寫0, 需接下來補(bǔ)充), 但同時(shí)需要一個網(wǎng)絡(luò)掩碼長度參數(shù)來具體指定前面多少字節(jié)為網(wǎng)絡(luò)掩碼(nt: 可通過下面的net net/len 來指定)
src net net
如果數(shù)據(jù)包的源地址(IPv4或IPv6格式)的網(wǎng)絡(luò)號字段為 net, 則與此對應(yīng)的條件表達(dá)式為真.
net net
如果數(shù)據(jù)包的源或目的地址(IPv4或IPv6格式)的網(wǎng)絡(luò)號字段為 net, 則與此對應(yīng)的條件表達(dá)式為真.
net net mask netmask
如果數(shù)據(jù)包的源或目的地址(IPv4或IPv6格式)的網(wǎng)絡(luò)掩碼與netmask 匹配, 則與此對應(yīng)的條件表達(dá)式為真.此選項(xiàng)之前還可以配合src和dst來匹配源網(wǎng)絡(luò)地址或目標(biāo)網(wǎng)絡(luò)地址(nt: 比如 src net net mask 255.255.255.0).該選項(xiàng)對于ipv6 網(wǎng)絡(luò)地址無效.
net net/len
如果數(shù)據(jù)包的源或目的地址(IPv4或IPv6格式)的網(wǎng)絡(luò)編號字段的比特?cái)?shù)與len相同, 則與此對應(yīng)的條件表達(dá)式為真.此選項(xiàng)之前還可以配合src和dst來匹配源網(wǎng)絡(luò)地址或目標(biāo)網(wǎng)絡(luò)地址(nt | rt | tt: src net net/24, 表示需要匹配源地址的網(wǎng)絡(luò)編號有24位的數(shù)據(jù)包).
dst port port
如果數(shù)據(jù)包(包括ip/tcp, ip/udp, ip6/tcp or ip6/udp協(xié)議)的目的端口為port, 則與此對應(yīng)的條件表達(dá)式為真.port 可以是一個數(shù)字也可以是一個名字(相應(yīng)名字可以在/etc/services 中找到該名字, 也可以通過man tcp 和man udp來得到相關(guān)描述信息 ). 如果使用名字, 則該名字對應(yīng)的端口號和相應(yīng)使用的協(xié)議都會被檢查. 如果只是使用一個數(shù)字端口號,則只有相應(yīng)端口號被檢查(比如, dst port 513將會使tcpdump抓取tcp協(xié)議的login 服務(wù)和udp協(xié)議的who 服務(wù)數(shù)據(jù)包, 而port domain 將會使tcpdump 抓取tcp協(xié)議的domain 服務(wù)數(shù)據(jù)包, 以及udp 協(xié)議的domain 數(shù)據(jù)包)(nt | rt: ambiguous name is used 不可理解, 需補(bǔ)充).
src port port
如果數(shù)據(jù)包的源端口為port, 則與此對應(yīng)的條件表達(dá)式為真.
port port
如果數(shù)據(jù)包的源或目的端口為port, 則與此對應(yīng)的條件表達(dá)式為真.
dst portrange port1-port2
如果數(shù)據(jù)包(包括ip/tcp, ip/udp, ip6/tcp or ip6/udp協(xié)議)的目的端口屬于port1到port2這個端口范圍(包括port1, port2), 則與此對應(yīng)的條件表達(dá)式為真. tcpdump 對port1 和port2 解析與對port 的解析一致(nt:在dst port port 選項(xiàng)的描述中有說明).
src portrange port1-port2
如果數(shù)據(jù)包的源端口屬于port1到port2這個端口范圍(包括 port1, port2), 則與此對應(yīng)的條件表達(dá)式為真.
portrange port1-port2
如果數(shù)據(jù)包的源端口或目的端口屬于port1到port2這個端口范圍(包括 port1, port2), 則與此對應(yīng)的條件表達(dá)式為真.
以上關(guān)于port 的選項(xiàng)都可以在其前面添加關(guān)鍵字:tcp 或者udp, 比如:
tcp src port port
這將使tcpdump 只抓取源端口是port 的tcp數(shù)據(jù)包.
less length
如果數(shù)據(jù)包的長度比length 小或等于length, 則與此對應(yīng)的條件表達(dá)式為真. 這與'len <= length' 的含義一致.
greater length
如果數(shù)據(jù)包的長度比length 大或等于length, 則與此對應(yīng)的條件表達(dá)式為真. 這與'len >= length' 的含義一致.
ip proto protocol
如果數(shù)據(jù)包為ipv4數(shù)據(jù)包并且其協(xié)議類型為protocol, 則與此對應(yīng)的條件表達(dá)式為真.