天天看點

Linux tcpdump指令詳解(二)

UDP 資料包

UDP 資料包的顯示格式,可通過rwho這個具體應用所産生的資料包來說明:

actinide.who > broadcast.who: udp 84

其含義為:actinide主機上的端口who向broadcast主機上的端口who發送了一個udp資料包(nt: actinide和broadcast都是指Internet位址).

這個資料包承載的使用者資料為84個位元組.

一些UDP服務可從資料包的源或目的端口來識别,也可從所顯示的更高層協定資訊來識别. 比如, Domain Name service requests(DNS 請求,

在RFC-1034/1035中), 和Sun RPC calls to NFS(對NFS伺服器所發起的遠端調用(nt: 即Sun RPC),在RFC-1050中有對遠端調用的描述).

UDP 名稱服務請求

(注意:以下的描述假設你對Domain Service protoco(nt:在RFC-103中有所描述), 否則你會發現以下描述就是天書(nt:希臘文天書,

不必理會, 吓吓你的, 接着看就行))

名稱服務請求有如下的格式:

src > dst: id op? flags qtype qclass name (len)

(nt: 從下文來看, 格式應該是src > dst: id op flags qtype qclass? name (len))

比如有一個實際顯示為:

h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)

主機h2opolo 向helios 上運作的名稱伺服器查詢ucbvax.berkeley.edu 的位址記錄(nt: qtype等于A). 此查詢本身的id号為'3'. 符号

'+'意味着遞歸查詢标志被設定(nt: dns伺服器可向更高層dns伺服器查詢本伺服器不包含的位址記錄). 這個最終通過IP包發送的查詢請求

資料長度為37位元組, 其中不包括UDP和IP協定的頭資料. 因為此查詢操作為預設值(nt | rt: normal one的了解), op字段被省略.

如果op字段沒被省略, 會被顯示在'3' 和'+'之間. 同樣, qclass也是預設值, C_IN, 進而也沒被顯示, 如果沒被忽略, 她會被顯示在'A'之後.

異常檢查會在方括中顯示出附加的域: 如果一個查詢同時包含一個回應(nt: 可了解為, 對之前其他一個請求的回應), 并且此回應包含權威或附加記錄段, 

ancount, nscout, arcount(nt: 具體字段含義需補充) 将被顯示為'[na]', '[nn]', '[nau]', 其中n代表合适的計數. 如果包中以下

回應位(比如AA位, RA位, rcode位), 或者位元組2或3中任何一個'必須為0'的位被置位(nt: 設定為1), '[b2&3]=x' 将被顯示, 其中x表示

頭部位元組2與位元組3進行與操作後的值.

UDP 名稱服務應答

對名稱服務應答的資料包,tcpdump會有如下的顯示格式

src > dst: id op rcode flags a/n/au type class data (len)

比如具體顯示如下:

helios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)

helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)

第一行表示: helios 對h2opolo 所發送的3号查詢請求回應了3條回答記錄(nt | rt: answer records), 3條名稱伺服器記錄,

以及7條附加的記錄. 第一個回答記錄(nt: 3個回答記錄中的第一個)類型為A(nt: 表示位址), 其資料為internet位址128.32.137.3.

此回應UDP資料包, 包含273位元組的資料(不包含UPD和IP的頭部資料). op字段和rcode字段被忽略(nt: op的實際值為Query, rcode, 即

response code的實際值為NoError), 同樣被忽略的字段還有class 字段(nt | rt: 其值為C_IN, 這也是A類型記錄預設取值)

第二行表示: helios 對h2opolo 所發送的2号查詢請求做了回應. 回應中, rcode編碼為NXDomain(nt: 表示不存在的域)), 沒有回答記錄,

但包含一個名稱伺服器記錄, 不包含權威伺服器記錄(nt | ck: 從上文來看, 此處的authority records 就是上文中對應的additional

records). '*'表示權威伺服器回答标志被設定(nt: 進而additional records就表示的是authorityrecords).

由于沒有回答記錄, type, class, data字段都被忽略.

flag字段還有可能出現其他一些字元, 比如'-'(nt: 表示可遞歸地查詢, 即RA 标志沒有被設定), '|'(nt: 表示被截斷的消息, 即TC 标志

被置位). 如果應答(nt | ct: 可了解為, 包含名稱服務應答的UDP資料包, tcpdump知道這類資料包該怎樣解析其資料)的'question'段一個條

目(entry)都不包含(nt: 每個條目的含義, 需補充),'[nq]' 會被列印出來.

要注意的是:名稱伺服器的請求和應答資料量比較大, 而預設的68位元組的抓取長度(nt: snaplen, 可了解為tcpdump的一個設定選項)可能不足以抓取

資料包的全部内容. 如果你真的需要仔細檢視名稱伺服器的負載, 可以通過tcpdump 的-s 選項來擴大snaplen值.

SMB/CIFS 解碼

tcpdump 已可以對SMB/CIFS/NBT相關應用的資料包内容進行解碼(nt: 分别為'Server Message Block Common', 'InternetFile System'

'在TCP/IP上實作的網絡協定NETBIOS的簡稱'. 這幾個服務通常使用UDP的137/138以及TCP的139端口). 原來的對IPX和NetBEUI SMB資料包的

解碼能力依然可以被使用(nt: NetBEUI為NETBIOS的增強版本).

tcpdump預設隻按照最簡約模式對相應資料包進行解碼, 如果我們想要詳盡的解碼資訊可以使用其-v 啟動選現. 要注意的是, -v 會産生非常詳細的資訊,

比如對單一的一個SMB資料包, 将産生一螢幕或更多的資訊, 是以此選項, 确有需要才使用.

關于SMB資料包格式的資訊, 以及每個域的含義可以參看www.cifs.org 或者samba.org 鏡像站點的pub/samba/specs/ 目錄. linux 上的SMB 更新檔

(nt | rt: patch)由 Andrew Tridgell ([email protected])提供.

NFS 請求和回應

tcpdump對Sun NFS(網絡檔案系統)請求和回應的UDP資料包有如下格式的列印輸出:

src.xid > dst.nfs: len op args

src.nfs > dst.xid: reply stat len op results

以下是一組具體的輸出資料

sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165

wrl.nfs > sushi.6709: reply ok 40 readlink "../var"

sushi.201b > wrl.nfs:

144 lookup fh 9,74/4096.6878 "xcolors"

wrl.nfs > sushi.201b:

reply ok 128 lookup fh 9,74/4134.3150

第一行輸出表明: 主機sushi向主機wrl發送了一個'交換請求'(nt: transaction), 此請求的id為6709(注意, 主機名字後是交換

請求id号, 而不是源端口号). 此請求資料為112位元組, 其中不包括UDP和IP頭部的長度. 操作類型為readlink(nt: 即此操作為讀符号連結操作),

操作參數為fh 21,24/10.73165(nt: 可按實際運作環境, 解析如下, fd 表示描述的為檔案句柄, 21,24 表示此句柄所對應設

備的主/從裝置号對, 10表示此句柄所對應的i節點編号(nt:每個檔案都會在作業系統中對應一個i節點, 限于unix類系統中),

73165是一個編号(nt: 可了解為辨別此請求的一個随機數, 具體含義需補充)).

第二行中, wrl 做了'ok'的回應, 并且在results 字段中傳回了sushi想要讀的符号連接配接的真實目錄(nt: 即sushi要求讀的符号連接配接其實是一個目錄).

第三行表明: sushi 再次請求 wrl 在'fh 9,74/4096.6878'所描述的目錄中查找'xcolors'檔案. 需要注意的是, 每行所顯示的資料含義依賴于其中op字段的

類型(nt: 不同op 所對應args 含義不相同), 其格式遵循NFS 協定, 追求簡潔明了.

如果tcpdump 的-v選項(詳細列印選項) 被設定, 附加的資訊将被顯示. 比如:

sushi.1372a > wrl.nfs:

148 read fh 21,11/12.195 8192 bytes @ 24576

wrl.nfs > sushi.1372a:

reply ok 1472 read REG 100664 ids 417/0 sz 29388

(-v 選項一般還會列印出IP頭部的TTL, ID, length, 以及fragmentation 域, 但在此例中, 都略過了(nt: 可了解為,簡潔起見, 做了删減))

在第一行, sushi 請求wrl 從檔案 21,11/12.195(nt: 格式在上面有描述)中, 自偏移24576位元組處開始, 讀取8192位元組資料.

Wrl 回應讀取成功; 由于第二行隻是回應請求的開頭片段, 是以隻包含1472位元組(其他的資料将在接着的reply片段中到來, 但這些資料包不會再有NFS

頭, 甚至UDP頭資訊也為空(nt: 源和目的應該要有), 這将導緻這些片段不能滿足過濾條件, 進而沒有被列印). -v 選項除了顯示檔案資料資訊, 還會顯示

附加顯示檔案屬性資訊: file type(檔案類型, ''REG'' 表示普通檔案), file mode(檔案存取模式, 8進制表示的), uid 和gid(nt: 檔案屬主和

組屬主), file size (檔案大小).

如果-v 标志被多次重複給出(nt: 如-vv), tcpdump會顯示更加詳細的資訊.

必須要注意的是, NFS 請求包中資料比較多, 如果tcpdump 的snaplen(nt: 抓取長度) 取太短将不能顯示其詳細資訊. 可使用

'-s 192'來增加snaplen, 這可用以監測NFS應用的網絡負載(nt: traffic).

NFS 的回應包并不嚴格的緊随之前相應的請求包(nt: RPC operation).進而, tcpdump 會跟蹤最近收到的一系列請求包, 再通過其

交換序号(nt: transaction ID)與相應請求包相比對. 這可能産生一個問題, 如果回應包來得太遲, 超出tcpdump 對相應請求包的跟蹤範圍,

該回應包将不能被分析.

AFS 請求和回應

AFS(nt: Andrew 檔案系統, Transarc , 未知, 需補充)請求和回應有如下的答應

src.sport > dst.dport: rx packet-type

src.sport > dst.dport: rx packet-type service call call-name args

src.sport > dst.dport: rx packet-type service reply call-name args

elvis.7001 > pike.afsfs:

rx data fs call rename old fid 536876964/1/1 ".newsrc.new"

new fid 536876964/1/1 ".newsrc"

pike.afsfs > elvis.7001: rx data fs reply rename

在第一行, 主機elvis 向pike 發送了一個RX資料包.

這是一個對于檔案服務的請求資料包(nt: RX data packet, 發送資料包 , 可了解為發送包過去, 進而請求對方的服務), 這也是一個RPC

調用的開始(nt: RPC, remote procedure call). 此RPC 請求pike 執行rename(nt: 重命名) 操作, 并指定了相關的參數:

原目錄描述符為536876964/1/1, 原檔案名為 '.newsrc.new', 新目錄描述符為536876964/1/1, 新檔案名為 '.newsrc'.

主機pike 對此rename操作的RPC請求作了回應(回應表示rename操作成功, 因為回應的是包含資料内容的包而不是異常包).

一般來說, 所有的'AFS RPC'請求被顯示時, 會被冠以一個名字(nt: 即decode, 解碼), 這個名字往往就是RPC請求的操作名.

并且, 這些RPC請求的部分參數在顯示時, 也會被冠以一個名字(nt | rt: 即decode, 解碼, 一般來說也是取名也很直接, 比如,

一個interesting 參數, 顯示的時候就會直接是'interesting', 含義拗口, 需再翻).

這種顯示格式的設計初衷為'一看就懂', 但對于不熟悉AFS 和 RX 工作原理的人可能不是很

有用(nt: 還是不用管, 書面吓吓你的, 往下看就行).

如果 -v(詳細)标志被重複給出(nt: 如-vv), tcpdump 會列印出确認包(nt: 可了解為, 與應答包有差別的包)以及附加頭部資訊

(nt: 可了解為, 所有包, 而不僅僅是确認包的附加頭部資訊), 比如, RX call ID(請求包中'請求調用'的ID),

call number('請求調用'的編号), sequence number(nt: 包順序号),

serial number(nt | rt: 可了解為與包中資料相關的另一個順信号, 具體含義需補充), 請求包的辨別. (nt: 接下來一段為重複描述,

是以略去了), 此外确認包中的MTU協商資訊也會被列印出來(nt: 确認包為相對于請求包的确認包, MaximumTransmission Unit, 最大傳輸單元).

如果 -v 選項被重複了三次(nt: 如-vvv), 那麼AFS應用類型資料包的'安全索引'('security index')以及'服務索引'('service id')将會

被列印.

對于表示異常的資料包(nt: abort packet, 可了解為, 此包就是用來通知接受者某種異常已發生), tcpdump 會列印出錯誤号(error codes).

但對于Ubik beacon packets(nt: Ubik 燈塔訓示包, Ubik可了解為特殊的通信協定, beacon packets, 燈塔資料包, 可了解為指明通信中

關鍵資訊的一些資料包), 錯誤号不會被列印, 因為對于Ubik 協定, 異常資料包不是表示錯誤, 相反卻是表示一種肯定應答(nt: 即, yes vote).

AFS 請求資料量大, 參數也多, 是以要求tcpdump的 snaplen 比較大, 一般可通過啟動tcpdump時設定選項'-s 256' 來增大snaplen, 以

監測AFS 應用通信負載.

AFS 回應包并不顯示辨別RPC 屬于何種遠端調用. 進而, tcpdump 會跟蹤最近一段時間内的請求包, 并通過call number(調用編号), service ID

(服務索引) 來比對收到的回應包. 如果回應包不是針對最近一段時間内的請求包, tcpdump将無法解析該包.

KIP AppleTalk協定

(nt | rt: DDP in UDP可了解為, DDP, TheAppleTalk Data Delivery Protocol,

相當于支援KIP AppleTalk協定棧的網絡層協定, 而DDP 本身又是通過UDP來傳輸的,

即在UDP 上實作的用于其他網絡的網絡層,KIP AppleTalk是蘋果公司開發的整套網絡協定棧).

AppleTalk DDP 資料包被封裝在UDP資料包中, 其解封裝(nt: 相當于解碼)和相應資訊的轉儲也遵循DDP 包規則.

(nt:encapsulate, 封裝, 相當于編碼, de-encapsulate, 解封裝, 相當于解碼, dump, 轉儲, 通常就是指對其資訊進行列印).

/etc/atalk.names 檔案中包含了AppleTalk 網絡和節點的數字辨別到名稱的對應關系. 其檔案格式通常如下所示:

number name

1.254 ether

16.1 icsd-net

1.254.110 ace

頭兩行表示有兩個AppleTalk 網絡. 第三行給出了特定網絡上的主機(一個主機會用3個位元組來辨別,

而一個網絡的辨別通常隻有兩個位元組, 這也是兩者辨別的主要差別)(nt: 1.254.110 可了解為ether網絡上的ace主機).

辨別與其對應的名字之間必須要用空白分開. 除了以上内容, /etc/atalk.names中還包含空行以及注釋行(以'#'開始的行).

AppleTalk 完整網絡位址将以如下格式顯示:

net.host.port

以下為一段具體顯示:

144.1.209.2 > icsd-net.112.220

office.2 > icsd-net.112.220

jssmag.149.235 > icsd-net.2

(如果/etc/atalk.names 檔案不存在, 或者沒有相應AppleTalk 主機/網絡的條目, 資料包的網絡位址将以數字形式顯示).

在第一行中, 網絡144.1上的節點209通過2端口,向網絡icsd-net上監聽在220端口的112節點發送了一個NBP應用資料包

(nt | rt: NBP, name binding protocol, 名稱綁定協定, 從資料來看, NBP伺服器會在端口2提供此服務.

'DDP port 2' 可了解為'DDP 對應傳輸層的端口2', DDP本身沒有端口的概念, 這點未确定, 需補充).

第二行與第一行類似, 隻是源的全部位址可用'office'進行辨別.

第三行表示: jssmag網絡上的149節點通過235向icsd-net網絡上的所有節點的2端口(NBP端口)發送了資料包.(需要注意的是,

在AppleTalk 網絡中如果位址中沒有節點, 則表示廣播位址, 進而節點辨別和網絡辨別最好在/etc/atalk.names有所差別.

nt: 否則一個辨別x.port 無法确定x是指一個網絡上所有主機的port口還是指定主機x的port口).

tcpdump 可解析NBP (名稱綁定協定) and ATP (AppleTalk傳輸協定)資料包, 對于其他應用層的協定, 隻會列印出相應協定名字(

如果此協定沒有注冊一個通用名字, 隻會列印其協定号)以及資料包的大小.

NBP 資料包會按照如下格式顯示:

icsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*"

jssmag.209.2 > icsd-net.112.220: nbp-reply 190:"RM1140:LaserWriter@*" 250

techpit.2 > icsd-net.112.220: nbp-reply 190:"techpit:LaserWriter@*" 186

第一行表示: 網絡icsd-net 中的節點112 通過220端口向網絡jssmag 中所有節點的端口2發送了對'LaserWriter'的名稱查詢請求(nt:

此處名稱可了解為一個資源的名稱, 比如列印機). 此查詢請求的序列号為190.

第二行表示: 網絡jssmag 中的節點209 通過2端口向icsd-net.112節點的端口220進行了回應: 我有'LaserWriter'資源, 其資源名稱

為'RM1140', 并且在端口250上提供改資源的服務. 此回應的序列号為190, 對應之前查詢的序列号.

第三行也是對第一行請求的回應: 節點techpit 通過2端口向icsd-net.112節點的端口220進行了回應:我有'LaserWriter'資源, 其資源名稱

為'techpit', 并且在端口186上提供改資源的服務. 此回應的序列号為190, 對應之前查詢的序列号.

ATP 資料包的顯示格式如下:

jssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001

helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000

helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000

helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000

helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000

helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000

helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000

helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000

jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001

jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001

jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002

第一行表示節點 Jssmag.209 向節點helios 發送了一個會話編号為12266的請求包, 請求helios

回應8個資料包(這8個資料包的順序号為0-7(nt: 順序号與會話編号不同, 後者為一次完整傳輸的編号,

前者為該傳輸中每個資料包的編号. transaction, 會話, 通常也被叫做傳輸)). 行尾的16進制數字表示

該請求包中'userdata'域的值(nt: 從下文來看, 這并沒有把所有使用者資料都列印出來 ).

Helios 回應了8個512位元組的資料包. 跟在會話編号(nt: 12266)後的數字表示該資料包在該會話中的順序号.

括号中的數字表示該資料包中資料的大小, 這不包括atp 的頭部. 在順序号為7資料包(第8行)外帶了一個'*'号,

表示該資料包的EOM 标志被設定了.(nt: EOM, End Of Media, 可了解為, 表示一次會話的資料回應完畢).

接下來的第9行表示, Jssmag.209 又向helios 提出了請求: 順序号為3以及5的資料包請重新傳送. Helios 收到這個

請求後重新發送了這個兩個資料包, jssmag.209 再次收到這兩個資料包之後, 主動結束(release)了此會話.

在最後一行, jssmag.209 向helios 發送了開始下一次會話的請求包. 請求包中的'*'表示該包的XO 标志沒有被設定.

(nt: XO, exactly once, 可了解為在該會話中, 資料包在接受方隻被精确地處理一次, 就算對方重複傳送了該資料包,

接收方也隻會處理一次, 這需要用到特别設計的資料包接收和處理機制).

IP 資料包破碎

(nt: 指把一個IP資料包分成多個IP資料包)

碎片IP資料包(nt: 即一個大的IP資料包破碎後生成的小IP資料包)有如下兩種顯示格式.

(frag id:size@offset+)

(frag id:size@offset)

(第一種格式表示, 此碎片之後還有後續碎片. 第二種格式表示, 此碎片為最後一個碎片.)

id 表示破碎編号(nt: 從下文來看, 會為每個要破碎的大IP包配置設定一個破碎編号, 以便區分每個小碎片是否由同一資料包破碎而來).

size 表示此碎片的大小 , 不包含碎片頭部資料. offset表示此碎片所含資料在原始整個IP包中的偏移((nt: 從下文來看,

一個IP資料包是作為一個整體被破碎的, 包括頭和資料, 而不隻是資料被分割).

每個碎片都會使tcpdump産生相應的輸出列印. 第一個碎片包含了高層協定的頭資料(nt:從下文來看, 被破碎IP資料包中相應tcp頭以及

IP頭都放在了第一個碎片中 ), 進而tcpdump會針對第一個碎片顯示這些資訊, 并接着顯示此碎片本身的資訊. 其後的一些碎片并不包含

高層協定頭資訊, 進而隻會在顯示源和目的之後顯示碎片本身的資訊. 以下有一個例子: 這是一個從arizona.edu 到lbl-rtsg.arpa

途經CSNET網絡(nt: CSNET connection 可了解為建立在CSNET 網絡上的連接配接)的ftp應用通信片段:

arizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag595a:328@0+)

arizona > rtsg: (frag 595a:204@328)

rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560

有幾點值得注意:

第一, 第二行的列印中, 位址後面沒有端口号.

這是因為TCP協定資訊都放到了第一個碎片中, 當顯示第二個碎片時, 我們無法知道此碎片所對應TCP包的順序号.

第二, 從第一行的資訊中, 可以發現arizona需要向rtsg發送308位元組的使用者資料, 而事實是, 相應IP包經破碎後會總共産生512位元組

資料(第一個碎片包含308位元組的資料, 第二個碎片包含204個位元組的資料, 這超過了308位元組). 如果你在查找資料包的順序号空間中的

一些空洞(nt: hole,空洞, 指資料包之間的順序号沒有上下銜接上), 512這個資料就足夠使你迷茫一陣(nt: 其實隻要關注308就行,

不必關注破碎後的資料總量).

一個資料包(nt | rt: 指IP資料包)如果帶有非IP破碎标志, 則顯示時會在最後顯示'(DF)'.(nt: 意味着此IP包沒有被破碎過).

時間戳

tcpdump的所有輸出列印行中都會預設包含時間戳資訊.

時間戳資訊的顯示格式如下

hh:mm:ss.frac (nt: 小時:分鐘:秒.(nt: frac未知, 需補充))

此時間戳的精度與核心時間精度一緻, 反映的是核心第一次看到對應資料包的時間(nt: saw, 即可對該資料包進行操作). 

而資料包從實體線路傳遞到核心的時間, 以及核心花費在此包上的中斷處理時間都沒有算進來.

指令使用

tcpdump采用指令行方式,它的指令格式為:

tcpdump [-AdDeflLnNOpqRStuUvxX ] [ -c count ]

          [ -C file_size ] [ -F file ]

          [ -i interface ] [-m module ] [ -M secret ]

          [ -r file ] [ -s snaplen ] [-T type ] [ -w file ]

          [ -W filecount ]

          [ -E spi@ipaddralgo:secret,...  ]

          [ -y datalinktype ] [ -Z user]

          [ expression ]

tcpdump的簡單選項介紹

-A  以ASCII碼方式顯示每一個資料包(不會顯示資料包中鍊路層頭部資訊). 在抓取包含網頁資料的資料包時, 可友善檢視資料(nt: 即Handy forcapturing web pages).

-c  count

   tcpdump将在接受到count個資料包後退出.

-C  file-size (nt: 此選項用于配合-w file 選項使用)

   該選項使得tcpdump 在把原始資料包直接儲存到檔案中之前, 檢查此檔案大小是否超過file-size. 如果超過了, 将關閉此檔案,另創一個檔案繼續用于原始資料包的記錄. 新建立的檔案名與-w 選項指定的檔案名一緻, 但檔案名後多了一個數字.該數字會從1開始随着新建立檔案的增多而增加. file-size的機關是百萬位元組(nt: 這裡指1,000,000個位元組,并非1,048,576個位元組, 後者是以1024位元組為1k, 1024k位元組為1M計算所得, 即1M=1024 * 1024 = 1,048,576)

-d  以容易閱讀的形式,在标準輸出上列印出編排過的包比對碼, 随後tcpdump停止.(nt | rt: human readable, 容易閱讀的,通常是指以ascii碼來列印一些資訊.compiled, 編排過的. packet-matching code, 包比對碼,含義未知, 需補充)

-dd 以C語言的形式列印出包比對碼.

-ddd 以十進制數的形式列印出包比對碼(會在包比對碼之前有一個附加的'count'字首).

-D  列印系統中所有tcpdump可以在其上進行抓包的網絡接口. 每一個接口會列印出數字編号, 相應的接口名字, 以及可能的一個網絡接口描述. 其中網絡接口名字和數字編号可以用在tcpdump 的-i flag 選項(nt:把名字或數字代替flag), 來指定要在其上抓包的網絡接口.

   此選項在不支援接口清單指令的系統上很有用(nt: 比如, Windows 系統,或缺乏 ifconfig -a 的UNIX系統); 接口的數字編号在windows 2000 或其後的系統中很有用, 因為這些系統上的接口名字比較複雜, 而不易使用.

   如果tcpdump編譯時所依賴的libpcap庫太老,-D 選項不會被支援, 因為其中缺乏 pcap_findalldevs()函數.

-e  每行的列印輸出中将包括資料包的資料鍊路層頭部資訊

-E  spi@ipaddr algo:secret,...

   可通過spi@ipaddralgo:secret 來解密IPsec ESP包(nt |rt:IPsec Encapsulating Security Payload,IPsec 封裝安全負載,IPsec可了解為, 一整套對ip資料包的加密協定, ESP 為整個IP 資料包或其中上層協定部分被加密後的資料,前者的工作模式稱為隧道模式; 後者的工作模式稱為傳輸模式 . 工作原理, 另需補充).

   需要注意的是, 在終端啟動tcpdump 時, 可以為IPv4ESP packets 設定密鑰(secret).

   可用于加密的算法包括des-cbc,3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或者沒有(none).預設的是des-cbc(nt: des, Data Encryption Standard, 資料加密标準, 加密算法未知, 另需補充).secret為用于ESP 的密鑰, 使用ASCII 字元串方式表達. 如果以 0x開頭, 該密鑰将以16進制方式讀入.

   該選項中ESP 的定義遵循RFC2406, 而不是 RFC1827. 并且, 此選項隻是用來調試的, 不推薦以真實密鑰(secret)來使用該選項, 因為這樣不安全: 在指令行中輸入的secret 可以被其他人通過ps 等指令檢視到.

   除了以上的文法格式(nt:指spi@ipaddr algo:secret), 還可以在後面添加一個文法輸入檔案名字供tcpdump 使用(nt:即把spi@ipaddralgo:secret,... 中...換成一個文法檔案名).此檔案在接受到第一個ESP 包時會打開此檔案, 是以最好此時把賦予tcpdump 的一些特權取消(nt: 可了解為, 這樣防範之後, 當該檔案為惡意編寫時,不至于造成過大損害).

-f  顯示外部的IPv4 位址時(nt: foreign IPv4 addresses, 可了解為, 非本機ip位址), 采用數字方式而不是名字.(此選項是用來對付Sun公司的NIS伺服器的缺陷(nt:NIS, 網絡資訊服務, tcpdump 顯示外部位址的名字時會用到她提供的名稱服務): 此NIS伺服器在查詢非本地位址名字時,常常會陷入無盡的查詢循環).

   由于對外部(foreign)IPv4位址的測試需要用到本地網絡接口(nt: tcpdump 抓包時用到的接口)及其IPv4 位址和網絡掩碼. 如果此位址或網絡掩碼不可用, 或者此接口根本就沒有設定相應網絡位址和網絡掩碼(nt: linux 下的'any' 網絡接口就不需要設定位址和掩碼, 不過此'any'接口可以收到系統中所有接口的資料包), 該選項不能正常工作.

-F  file

   使用file 檔案作為過濾條件表達式的輸入, 此時指令行上的輸入将被忽略.

-i  interface

   指定tcpdump 需要監聽的接口.  如果沒有指定, tcpdump 會從系統接口清單中搜尋編号最小的已配置好的接口(不包括 loopback 接口).一但找到第一個符合條件的接口, 搜尋馬上結束.

   在采用2.2版本或之後版本核心的Linux 作業系統上, 'any' 這個虛拟網絡接口可被用來接收所有網絡接口上的資料包(nt: 這會包括目的是該網絡接口的, 也包括目的不是該網絡接口的). 需要注意的是如果真實網絡接口不能工作在'混雜'模式(promiscuous)下,則無法在'any'這個虛拟的網絡接口上抓取其資料包.

   如果 -D 标志被指定, tcpdump會列印系統中的接口編号,而該編号就可用于此處的interface 參數.

-l  對标準輸出進行行緩沖(nt:使标準輸出裝置遇到一個換行符就馬上把這行的内容列印出來).在需要同時觀察抓包列印以及儲存抓包記錄的時候很有用. 比如, 可通過以下指令組合來達到此目的:

   ``tcpdump  -l |  tee dat'' 或者 ``tcpdump  -l   > dat &  tail  -f  dat''.(nt: 前者使用tee來把tcpdump 的輸出同時放到檔案dat和标準輸出中, 而後者通過重定向操作'>', 把tcpdump的輸出放到dat 檔案中,同時通過tail把dat檔案中的内容放到标準輸出中)

-L  列出指定網絡接口所支援的資料鍊路層的類型後退出.(nt: 指定接口通過-i 來指定)

-m  module

   通過module 指定的file 裝載SMI MIB 子產品(nt:SMI,Structure of Management Information, 管理資訊結構MIB, Management Information Base, 管理資訊庫. 可了解為, 這兩者用于SNMP(Simple Network ManagementProtoco)協定資料包的抓取. 具體SNMP 的工作原理未知, 另需補充).

   此選項可多次使用, 進而為tcpdump 裝載不同的MIB 子產品.

-M  secret  如果TCP 資料包(TCP segments)有TCP-MD5選項(在RFC 2385有相關描述), 則為其摘要的驗證指定一個公共的密鑰secret.

-n  不對位址(比如, 主機位址, 端口号)進行數字表示到名字表示的轉換.

-N  不列印出host 的域名部分. 比如, 如果設定了此選現,tcpdump 将會列印'nic' 而不是 'nic.ddn.mil'.

-O  不啟用進行包比對時所用的優化代碼. 當懷疑某些bug是由優化代碼引起的,此選項将很有用.

-p  一般情況下, 把網絡接口設定為非'混雜'模式. 但必須注意 , 在特殊情況下此網絡接口還是會以'混雜'模式來工作; 進而, '-p' 的設與不設, 不能當做以下選現的代名詞:'ether host {local-hw-add}' 或  'ether broadcast'(nt: 前者表示隻比對以太網位址為host 的包, 後者表示比對以太網位址為廣播位址的資料包).

-q  快速(也許用'安靜'更好?)列印輸出. 即列印很少的協定相關資訊, 進而輸出行都比較簡短.

-R  設定tcpdump 對 ESP/AH 資料包的解析按照 RFC1825而不是RFC1829(nt: AH, 認證頭, ESP, 安全負載封裝, 這兩者會用在IP包的安全傳輸機制中).如果此選項被設定, tcpdump 将不會列印出'禁止中繼'域(nt:relay prevention field). 另外,由于ESP/AH規範中沒有規定ESP/AH資料包必須擁有協定版本号域,是以tcpdump不能從收到的ESP/AH資料包中推導出協定版本号.

-r  file

   從檔案file 中讀取包資料. 如果file 字段為 '-' 符号, 則tcpdump 會從标準輸入中讀取包資料.

-S  列印TCP 資料包的順序号時, 使用絕對的順序号, 而不是相對的順序号.(nt: 相對順序号可了解為, 相對第一個TCP 包順序号的差距,比如, 接受方收到第一個資料包的絕對順序号為232323, 對于後來接收到的第2個,第3個資料包, tcpdump會列印其序列号為1, 2分别表示與第一個資料包的差距為1 和 2. 而如果此時-S 選項被設定, 對于後來接收到的第2個, 第3個資料包會列印出其絕對順序号:232324, 232325).

-s  snaplen

   設定tcpdump的資料包抓取長度為snaplen, 如果不設定預設将會是68位元組(而支援網絡接口分接頭(nt:NIT, 上文已有描述,可搜尋'網絡接口分接頭'關鍵字找到那裡)的SunOS系列作業系統中預設的也是最小值是96).68位元組對于IP, ICMP(nt: Internet ControlMessage Protocol,網際網路控制封包協定), TCP 以及 UDP 協定的封包已足夠, 但對于名稱服務(nt: 可了解為dns, nis等服務),NFS服務相關的資料包會産生包截短. 如果産生包截短這種情況,tcpdump的相應列印輸出行中會出現''[|proto]''的标志(proto實際會顯示為被截短的資料包的相關協定層次). 需要注意的是, 采用長的抓取長度(nt: snaplen比較大), 會增加包的處理時間, 并且會減少tcpdump 可緩存的資料包的數量, 進而會導緻資料包的丢失. 是以, 在能抓取我們想要的包的前提下,抓取長度越小越好.把snaplen 設定為0 意味着讓tcpdump自動選擇合适的長度來抓取資料包.

-T  type

   強制tcpdump按type指定的協定所描述的包結構來分析收到的資料包.  目前已知的type 可取的協定為:

   aodv (Ad-hoc On-demand DistanceVector protocol, 按需距離向量路由協定, 在Adhoc(點對點模式)網絡中使用),

   cnfp (Cisco  NetFlow protocol),  rpc(Remote ProcedureCall), rtp (Real-Time Applications protocol),

   rtcp (Real-Time Applications con-trolprotocol), snmp (Simple Network Management Protocol),

   tftp (Trivial File Transfer Protocol,碎檔案協定), vat (Visual Audio Tool, 可用于在internet 上進行電

   視電話會議的應用層協定),以及wb (distributed White Board, 可用于網絡會議的應用層協定).

-t     在每行輸出中不列印時間戳

-tt    不對每行輸出的時間進行格式處理(nt: 這種格式一眼可能看不出其含義, 如時間戳列印成1261798315)

-ttt   tcpdump 輸出時, 每兩行列印之間會延遲一個段時間(以毫秒為機關)

-tttt  在每行列印的時間戳之前添加日期的列印

-u     列印出未加密的NFS句柄(nt: handle可了解為NFS 中使用的檔案句柄, 這将包括檔案夾和檔案夾中的檔案)

-U    使得當tcpdump在使用-w 選項時, 其檔案寫入與包的儲存同步.(nt:即, 當每個資料包被儲存時, 它将及時被寫入檔案中,而不是等檔案的輸出緩沖已滿時才真正寫入此檔案)

     -U 标志在老版本的libcap庫(nt: tcpdump 所依賴的封包捕獲庫)上不起作用, 因為其中缺乏pcap_cump_flush()函數.

-v    當分析和列印的時候, 産生詳細的輸出. 比如, 包的生存時間, 辨別, 總長度以及IP包的一些選項. 這也會打開一些附加的包完整性檢測, 比如對IP或ICMP標頭部的校驗和.

-vv   産生比-v更詳細的輸出. 比如, NFS回應包中的附加域将會被列印, SMB資料包也會被完全解碼.

-vvv  産生比-vv更詳細的輸出. 比如, telent 時所使用的SB,SE 選項将會被列印, 如果telnet同時使用的是圖形界面,

     其相應的圖形選項将會以16進制的方式列印出來(nt: telnet 的SB,SE選項含義未知, 另需補充).

-w    把包資料直接寫入檔案而不進行分析和列印輸出. 這些包資料可在随後通過-r 選項來重新讀入并進行分析和列印.

-W    filecount

     此選項與-C 選項配合使用, 這将限制可打開的檔案數目, 并且當檔案資料超過這裡設定的限制時, 依次循環替代之前的檔案, 這相當于一個擁有filecount 個檔案的檔案緩沖池. 同時, 該選項會使得每個檔案名的開頭會出現足夠多并用來占位的0, 這可以友善這些檔案被正确的排序.

-x    當分析和列印時,tcpdump 會列印每個包的頭部資料, 同時會以16進制列印出每個包的資料(但不包括連接配接層的頭部).總共列印的資料大小不會超過整個資料包的大小與snaplen 中的最小值. 必須要注意的是, 如果高層協定資料沒有snaplen 這麼長,并且資料鍊路層(比如,Ethernet層)有填充資料, 則這些填充資料也會被列印.(nt: so for link layers  that pad, 未能銜接了解和翻譯, 需補充 )

-xx   tcpdump 會列印每個包的頭部資料, 同時會以16進制列印出每個包的資料,其中包括資料鍊路層的頭部.

-X    當分析和列印時,tcpdump 會列印每個包的頭部資料, 同時會以16進制和ASCII碼形式列印出每個包的資料(但不包括連接配接層的頭部).這對于分析一些新協定的資料包很友善.

-XX   當分析和列印時,tcpdump 會列印每個包的頭部資料, 同時會以16進制和ASCII碼形式列印出每個包的資料, 其中包括資料鍊路層的頭部.這對于分析一些新協定的資料包很友善.

-y    datalinktype

     設定tcpdump 隻捕獲資料鍊路層協定類型是datalinktype的資料包

-Z    user

     使tcpdump 放棄自己的超級權限(如果以root使用者啟動tcpdump,tcpdump将會有超級使用者權限), 并把目前tcpdump的使用者ID設定為user, 組ID設定為user首要所屬組的ID(nt: tcpdump 此處可了解為tcpdump 運作之後對應的程序)

     此選項也可在編譯的時候被設定為預設打開.(nt:此時user 的取值未知, 需補充)

tcpdump條件表達式

 該表達式用于決定哪些資料包将被列印. 如果不給定條件表達式, 網絡上所有被捕獲的包都會被列印,否則, 隻有滿足條件表達式的資料包被列印.(nt: all packets, 可了解為, 所有被指定接口捕獲的資料包).

 表達式由一個或多個'表達元'組成(nt: primitive, 表達元, 可了解為組成表達式的基本元素). 一個表達元通常由一個或多個修飾符(qualifiers)後跟一個名字或數字表示的id組成(nt: 即, 'qualifiers id').有三種不同類型的修飾符:type, dir以及 proto.

type 修飾符指定id 所代表的對象類型,id可以是名字也可以是數字. 可選的對象類型有: host,net, port 以及portrange(nt: host 表明id表示主機, net 表明id是網絡, port 表明id是端而portrange表明id 是一個端口範圍).  如, 'host foo', 'net128.3', 'port 20', 'portrange 6000-6008'(nt: 分别表示主機foo,網絡 128.3, 端口 20, 端口範圍 6000-6008). 如果不指定type 修飾符, id預設的修飾符為host.

dir 修飾符描述id 所對應的傳輸方向, 即發往id 還是從id 接收(nt: 而id 到底指什麼需要看其前面的type 修飾符).可取的方向為: src, dst, src 或 dst, src并且dst.(nt:分别表示, id是傳輸源, id是傳輸目的,id是傳輸源或者傳輸目的, id是傳輸源并且是傳輸目的). 例如, 'src foo','dst net 128.3', 'src or dst port ftp-data'.(nt: 分别表示符合條件的資料包中, 源主機是foo, 目的網絡是128.3,源或目的端口為 ftp-data).如果不指定dir修飾符, id 預設的修飾符為src 或dst.對于鍊路層的協定,比如SLIP(nt: SerialLine InternetProtocol, 串聯線路網際網絡協定), 以及linux下指定'any' 裝置, 并指定'cooked'(nt | rt: cooked 含義未知, 需補充) 抓取類型, 或其他裝置類型,可以用'inbound' 和 'outbount' 修飾符來指定想要的傳輸方向.

proto 修飾符描述id 所屬的協定. 可選的協定有: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp以及 upd.(nt | rt: ether, fddi, tr, 具體含義未知, 需補充. 可了解為實體以太網傳輸協定, 光纖分布資料網傳輸協定,以及用于路由跟蹤的協定.  wlan, 無線區域網路協定; ip,ip6即通常的TCP/IP協定棧中所使用的ipv4以及ipv6網絡層協定;arp, rarp 即位址解析協定,反向位址解析協定; decnet, Digital EquipmentCorporation開發的, 最早用于PDP-11 機器互聯的網絡協定; tcp and udp, 即通常TCP/IP協定棧中的兩個傳輸層協定).

   例如, `ethersrc foo', `arp net 128.3', `tcp port 21', `udp portrange 7000-7009'分别表示 '從以太網位址foo 來的資料包','發往或來自128.3網絡的arp協定資料包', '發送或接收端口為21的tcp協定資料包', '發送或接收端口範圍為7000-7009的udp協定資料包'.

   如果不指定proto 修飾符, 則預設為與相應type比對的修飾符.例如, 'src foo' 含義是 '(ip or arpor rarp) src foo' (nt: 即, 來自主機foo的ip/arp/rarp協定資料包, 預設type為host),`net bar' 含義是`(ip  or arp  or rarp) net bar'(nt: 即, 來自或發往bar網絡的ip/arp/rarp協定資料包),`port 53' 含義是 `(tcp or udp) port 53'(nt: 即, 發送或接收端口為53的tcp/udp協定資料包).(nt: 由于tcpdump 直接通過資料鍊路層的 BSD 資料包過濾器或 DLPI(datalink providerinterface, 資料鍊層提供者接口)來直接獲得網絡資料包,其可抓取的資料包可涵蓋上層的各種協定, 包括arp,rarp, icmp(網際網路控制封包協定),ip, ip6, tcp, udp, sctp(流控制傳輸協定).

   對于修飾符後跟id 的格式,可了解為, type id 是對包最基本的過濾條件: 即對包相關的主機, 網絡, 端口的限制;dir 表示對包的傳送方向的限制; proto表示對包相關的協定限制)

   'fddi'(nt: Fiber Distributed DataInterface) 實際上與'ether' 含義一樣:tcpdump 會把他們當作一種''指定網絡接口上的資料鍊路層協定''. 如同ehter網(以太網), FDDI 的頭部通常也會有源, 目的, 以及包類型, 進而可以像ether網資料包一樣對這些域進行過濾. 此外, FDDI 頭部還有其他的域,但不能被放到表達式中用來過濾

   同樣, 'tr' 和 'wlan' 也和 'ether' 含義一緻, 上一段對fddi 的描述同樣适用于tr(TokenRing) 和wlan(802.11 wireless LAN)的頭部. 對于802.11 協定資料包的頭部,目的域稱為DA, 源域稱為 SA;而其中的 BSSID, RA, TA 域(nt | rt: 具體含義需補充)不會被檢測(nt: 不能被用于包過慮表達式中).

 除以上所描述的表達元('primitive'), 還有其他形式的表達元, 并且與上述表達元格式不同. 比如: gateway, broadcast, less, greater以及算術表達式(nt: 其中每一個都算一種新的表達元). 下面将會對這些表達元進行說明.

 表達元之間還可以通過關鍵字and, or 以及 not 進行連接配接, 進而可組成比較複雜的條件表達式. 比如,`host foo and not port ftp and not portftp-data'(nt: 其過濾條件可了解為, 資料包的主機為foo,并且端口不是ftp(端口21) 和ftp-data(端口20, 常用端口和名字的對應可在linux 系統中的/etc/service 檔案中找到)).

 為了表示友善, 同樣的修飾符可以被省略, 如'tcp dst port ftp or ftp-data or domain' 與以下的表達式含義相同'tcp dst port ftp or tcp dst port ftp-data ortcp dst port domain'.(nt: 其過濾條件可了解為,包的協定為tcp, 目的端口為ftp 或 ftp-data 或 domain(端口53) ).

 借助括号以及相應操作符,可把表達元組合在一起使用(由于括号是shell的特殊字元, 是以在shell腳本或終端中使用時必須對括号進行轉義, 即'(' 與')'需要分别表達成'′與′

').

 有效的操作符有:

否定操作 (`!' 或 `not')

與操作(`&&'或 `and')

或操作(`||' 或 `or')

 否定操作符的優先級别最高. 與操作和或操作優先級别相同, 并且二者的結合順序是從左到右. 要注意的是, 表達'與操作'時,

 需要顯式寫出'and'操作符, 而不隻是把前後表達元并列放置(nt: 二者中間的'and' 操作符不可省略).

 如果一個辨別符前沒有關鍵字, 則表達式的解析過程中最近用過的關鍵字(往往也是從左往右距離辨別符最近的關鍵字)将被使用.比如,

   not host vs and ace

 是以下表達的精簡:

   not host vs and host ace

 而不是not (host vs or ace).(nt: 前兩者表示, 所需資料包不是來自或發往host vs, 而是來自或發往ace.而後者表示資料包隻要不是來自或發往vs或ac都符合要求)

 整個條件表達式可以被當作一個單獨的字元串參數也可以被當作空格分割的多個參數傳入tcpdump, 後者更友善些. 通常, 如果表達式中包含元字元(nt: 如正規表達式中的'*', '.'以及shell中的'('等字元), 最好還是使用單獨字元串的方式傳入. 這時,整個表達式需要被單引号括起來. 多參數的傳入方式中, 所有參數最終還是被空格串聯在一起, 作為一個字元串被解析.

附錄:tcpdump的表達元

(nt: True 在以下的描述中含義為: 相應條件表達式中隻含有以下所列的一個特定表達元, 此時表達式為真, 即條件得到滿足)

dst host host

如果IPv4/v6 資料包的目的域是host, 則與此對應的條件表達式為真.host 可以是一個ip位址, 也可以是一個主機名.

src host host

如果IPv4/v6 資料包的源域是host, 則與此對應的條件表達式為真.

host 可以是一個ip位址, 也可以是一個主機名.

host host

如果IPv4/v6資料包的源或目的位址是 host, 則與此對應的條件表達式為真.以上的幾個host 表達式之前可以添加以下關鍵字:ip, arp, rarp, 以及 ip6.比如:

ip host host

也可以表達為:

ether proto \ip and host host(nt: 這種表達方式在下面有說明, 其中ip之前需要有\來轉義,因為ip 對tcpdump 來說已經是一個關鍵字了.)

如果host 是一個擁有多個IP 的主機, 那麼任何一個位址都會用于包的比對(nt: 即發向host 的資料包的目的位址可以是這幾個IP中的任何一個, 從host 接收的資料包的源位址也可以是這幾個IP中的任何一個).

ether dst ehost

如果資料包(nt: 指tcpdump 可抓取的資料包, 包括ip 資料包, tcp資料包)的以太網目标位址是ehost,則與此對應的條件表達式為真. Ehost 可以是/etc/ethers 檔案中的名字或一個數字位址(nt: 可通過 man ethers 看到對/etc/ethers 檔案的描述, 樣例中用的是數字位址)

ether src ehost

如果資料包的以太網源位址是ehost, 則與此對應的條件表達式為真.

ether host ehost

如果資料包的以太網源位址或目标位址是ehost, 則與此對應的條件表達式為真.

gateway host

如果資料包的網關位址是host, 則與此對應的條件表達式為真. 需要注意的是, 這裡的網關位址是指以太網位址, 而不是IP 位址(nt | rt: I.e., 例如, 可了解為'注意'.the Ethernet source or destinationaddress, 以太網源和目标位址, 可了解為, 指代上句中的'網關位址' ).host 必須是名字而不是數字, 并且必須在機器的'主機名-ip位址'以及'主機名-以太位址'兩大映射關系中 有其條目(前一映射關系可通過/etc/hosts檔案, DNS 或 NIS得到, 而後一映射關系可通過/etc/ethers 檔案得到. nt: /etc/ethers并不一定存在 , 可通過man ethers 看到其資料格式, 如何建立該檔案, 未知,需補充).也就是說host 的含義是 ether host ehost 而不是 host host, 并且ehost必須是名字而不是數字.

目前, 該選項在支援IPv6位址格式的配置環境中不起作用(nt: configuration, 配置環境, 可了解為,通信雙方的網絡配置).

dst net net

如果資料包的目标位址(IPv4或IPv6格式)的網絡号字段為 net, 則與此對應的條件表達式為真.

net 可以是從網絡資料庫檔案/etc/networks 中的名字, 也可以是一個數字形式的網絡編号.

一個數字IPv4 網絡編号将以點分四元組(比如, 192.168.1.0), 或點分三元組(比如, 192.168.1 ), 或點分二進制組(比如, 172.16), 或單一單元組(比如, 10)來表達;

對應于這四種情況的網絡掩碼分别是:四元組:255.255.255.255(這也意味着對net 的比對如同對主機位址(host)的比對:位址的四個部分都用到了),三元組:255.255.255.0, 二進制組: 255.255.0.0,一進制組:255.0.0.0.

對于IPv6 的位址格式, 網絡編号必須全部寫出來(8個部分必須全部寫出來); 相應網絡掩碼為:

ff:ff:ff:ff:ff:ff:ff:ff, 是以IPv6 的網絡比對是真正的'host'方式的比對(nt | rt | rc:位址的8個部分都會用到,是否不屬于網絡的位元組填寫0, 需接下來補充), 但同時需要一個網絡掩碼長度參數來具體指定前面多少位元組為網絡掩碼(nt: 可通過下面的net net/len 來指定)

src net net

如果資料包的源位址(IPv4或IPv6格式)的網絡号字段為 net, 則與此對應的條件表達式為真.

net net

如果資料包的源或目的位址(IPv4或IPv6格式)的網絡号字段為 net, 則與此對應的條件表達式為真.

net net mask netmask

如果資料包的源或目的位址(IPv4或IPv6格式)的網絡掩碼與netmask 比對, 則與此對應的條件表達式為真.此選項之前還可以配合src和dst來比對源網絡位址或目标網絡位址(nt: 比如 src net net mask 255.255.255.0).該選項對于ipv6 網絡位址無效.

net net/len

如果資料包的源或目的位址(IPv4或IPv6格式)的網絡編号字段的比特數與len相同, 則與此對應的條件表達式為真.此選項之前還可以配合src和dst來比對源網絡位址或目标網絡位址(nt | rt | tt: srcnet net/24, 表示需要比對源位址的網絡編号有24位的資料包).

dst port port

如果資料包(包括ip/tcp, ip/udp, ip6/tcp or ip6/udp協定)的目的端口為port, 則與此對應的條件表達式為真.port 可以是一個數字也可以是一個名字(相應名字可以在/etc/services 中找到該名字, 也可以通過man tcp 和man udp來得到相關描述資訊 ). 如果使用名字, 則該名字對應的端口号和相應使用的協定都會被檢查. 如果隻是使用一個數字端口号,則隻有相應端口号被檢查(比如, dst port 513 将會使tcpdump抓取tcp協定的login 服務和udp協定的who 服務資料包, 而port domain 将會使tcpdump 抓取tcp協定的domain 服務資料包, 以及udp 協定的domain 資料包)(nt | rt: ambiguous name isused 不可了解, 需補充).

src port port

如果資料包的源端口為port, 則與此對應的條件表達式為真.

port port

如果資料包的源或目的端口為port, 則與此對應的條件表達式為真.

dst portrange port1-port2

如果資料包(包括ip/tcp, ip/udp, ip6/tcp or ip6/udp協定)的目的端口屬于port1到port2這個端口範圍(包括port1, port2), 則與此對應的條件表達式為真. tcpdump 對port1 和port2 解析與對port 的解析一緻(nt:在dst port port 選項的描述中有說明).

src portrange port1-port2

如果資料包的源端口屬于port1到port2這個端口範圍(包括 port1, port2), 則與此對應的條件表達式為真.

portrange port1-port2

如果資料包的源端口或目的端口屬于port1到port2這個端口範圍(包括 port1, port2), 則與此對應的條件表達式為真.

以上關于port 的選項都可以在其前面添加關鍵字:tcp 或者udp, 比如:

tcp src port port

這将使tcpdump 隻抓取源端口是port 的tcp資料包.

less length

如果資料包的長度比length 小或等于length, 則與此對應的條件表達式為真. 這與'len <= length' 的含義一緻.

greater length

如果資料包的長度比length 大或等于length, 則與此對應的條件表達式為真. 這與'len >= length' 的含義一緻.

ip proto protocol

如果資料包為ipv4資料包并且其協定類型為protocol, 則與此對應的條件表達式為真.

Protocol 可以是一個數字也可以是名字, 比如:icmp6, igmp, igrp(nt: Interior Gateway Routing Protocol,内部網關路由協定), pim(Protocol Independent Multicast, 獨立多點傳播協定, 應用于多點傳播路由器),ah, esp(nt: ah, 認證頭, esp 安全負載封裝, 這兩者會用在IP包的安全傳輸機制中 ), vrrp(Virtual Router RedundancyProtocol, 虛拟路由器備援協定), udp, or tcp. 由于tcp , udp 以及icmp是tcpdump 的關鍵字,是以在這些協定名字之前必須要用\來進行轉義(如果在C-shell 中需要用\\來進行轉義). 注意此表達元不會把資料包中協定頭鍊中所有協定頭内容全部列印出來(nt: 實際上隻會列印指定協定的一些頭部資訊, 比如可以用tcpdump -i eth0 'ip proto \tcp and host 192.168.3.144', 則隻列印主機192.168.3.144 發出或接收的資料包中tcp 協定頭所包含的資訊)

ip6 proto protocol

如果資料包為ipv6資料包并且其協定類型為protocol, 則與此對應的條件表達式為真.

注意此表達元不會把資料包中協定頭鍊中所有協定頭内容全部列印出來

ip6 protochain protocol

如果資料包為ipv6資料包并且其協定鍊中包含類型為protocol協定頭, 則與此對應的條件表達式為真. 比如,

ip6 protochain 6

将比對其協定頭鍊中擁有TCP 協定頭的IPv6資料包.此資料包的IPv6頭和TCP頭之間可能還會包含驗證頭, 路由頭, 或者逐跳尋徑選項頭.

由此所觸發的相應BPF(Berkeley Packets Filter, 可了解為, 在資料鍊路層提供資料包過濾的一種機制)代碼比較繁瑣,

并且BPF優化代碼也未能照顧到此部分, 進而此選項所觸發的包比對可能會比較慢.

ip protochain protocol

與ip6 protochain protocol 含義相同, 但這用在IPv4資料包.

ether broadcast

如果資料包是以太網廣播資料包, 則與此對應的條件表達式為真. ether 關鍵字是可選的.

ip broadcast

如果資料包是IPv4廣播資料包, 則與此對應的條件表達式為真. 這将使tcpdump 檢查廣播位址是否符合全0和全1的一些約定,并查找網絡接口的網絡掩碼(網絡接口為當時在其上抓包的網絡接口).

如果抓包所在網絡接口的網絡掩碼不合法, 或者此接口根本就沒有設定相應網絡位址和網絡, 亦或是在linux下的'any'網絡接口上抓包(此'any'接口可以收到系統中不止一個接口的資料包(nt: 實際上, 可了解為系統中所有可用的接口)),網絡掩碼的檢查不能正常進行.

ether multicast

如果資料包是一個以太網多點廣播資料包(nt: 多點廣播, 可了解為把消息同時傳遞給一組目的位址, 而不是網絡中所有位址,後者為可稱為廣播(broadcast)), 則與此對應的條件表達式為真. 關鍵字ether 可以省略. 此選項的含義與以下條件表達式含義一緻:`ether[0] & 1 != 0'(nt: 可了解為, 以太網資料包中第0個位元組的最低位是1, 這意味這是一個多點廣播資料包).

ip multicast

如果資料包是ipv4多點廣播資料包, 則與此對應的條件表達式為真.

ip6 multicast

如果資料包是ipv6多點廣播資料包, 則與此對應的條件表達式為真.

ether proto protocol

如果資料包屬于以下以太協定類型, 則與此對應的條件表達式為真.

協定(protocol)字段, 可以是數字或以下所列出了名字: ip, ip6, arp, rarp, atalk(AppleTalk網絡協定),

aarp(nt: AppleTalk Address Resolution Protocol, AppleTalk網絡的位址解析協定),

decnet(nt: 一個由DEC公司所提供的網絡協定棧), sca(nt: 未知, 需補充),

lat(Local Area Transport, 區域傳輸協定, 由DEC公司開發的以太網主機互聯協定),

mopdl, moprc, iso(nt: 未知, 需補充), stp(Spanning tree protocol, 生成樹協定, 可用于防止網絡中産生連結循環),

ipx(nt: Internetwork Packet Exchange, Novell 網絡中使用的網絡層協定), 或者

netbeui(nt: NetBIOS Extended User Interface,可了解為, 網絡基本輸入輸出系統接口擴充).

protocol字段可以是一個數字或以下協定名之一:ip, ip6, arp,rarp, atalk, aarp, decnet, sca, lat,

mopdl, moprc, iso, stp, ipx, 或者netbeui.

必須要注意的是辨別符也是關鍵字, 進而必須通過'\'來進行轉義.

(SNAP:子網接入協定 (SubNetwork Access Protocol))

在光纖分布式資料網絡接口(其表達元形式可以是'fddi protocol arp'), 令牌環網(其表達元形式可以是'tr protocol arp'),

以及IEEE 802.11 無線區域網路(其表達元形式可以是'wlan protocol arp')中, protocol

辨別符來自802.2 邏輯鍊路控制層頭,

在FDDI, Token Ring 或 802.1頭中會包含此邏輯鍊路控制層頭.

當以這些網絡上的相應的協定辨別為過濾條件時, tcpdump隻是檢查LLC頭部中以0x000000為組成單元辨別符(OUI, 0x000000

辨別一個内部以太網)的一段'SNAP格式結構'中的protocol ID 域, 而不會管包中是否有一段OUI為0x000000的'SNAP格式

結構'(nt: SNAP, SubNetwork Access Protocol,子網接入協定 ). 以下例外:

iso tcpdump 會檢查LLC頭部中的DSAP域(Destination service Access Point, 目标服務接入點)和

SSAP域(源服務接入點).(nt: iso 協定未知, 需補充)

stp 以及 netbeui

tcpdump 将會檢查LLC 頭部中的目标服務接入點(Destination service Access Point);

atalk

tcpdump 将會檢查LLC 頭部中以0x080007 為OUI辨別的'SNAP格式結構', 并會檢查AppleTalk etype域.

(nt: AppleTalk etype 是否位于SNAP格式結構中, 未知, 需補充).

此外, 在以太網中, 對于ether proto protocol 選項, tcpdump 會為 protocol 所指定的協定檢查

以太網類型域(the Ethernet type field), 但以下這些協定除外:

iso, stp, and netbeui

tcpdump 将會檢查802.3 實體幀以及LLC 頭(這兩種檢查與FDDI, TR, 802.11網絡中的相應檢查一緻);

(nt: 802.3, 了解為IEEE 802.3, 其為一系列IEEE 标準的集合. 此集合定義了有線以太網絡中的實體層以及資料

鍊路層的媒體接入控制子層. stp 在上文已有描述)

tcpdump 将會檢查以太網實體幀中的AppleTalk etype 域 , 同時也會檢查資料包中LLC頭部中的'SNAP格式結構'

(這兩種檢查與FDDI, TR, 802.11網絡中的相應檢查一緻)

aarp tcpdump 将會檢查AppleTalk ARP etype 域, 此域或存在于以太網實體幀中, 或存在于LLC(由802.2 所定義)的

'SNAP格式結構'中, 當為後者時, 該'SNAP格式結構'的OUI辨別為0x000000;

(nt: 802.2, 可了解為, IEEE802.2, 其中定義了邏輯鍊路控制層(LLC), 該層對應于OSI 網絡模型中資料鍊路層的上層部分.

LLC 層為使用資料鍊路層的使用者提供了一個統一的接口(通常使用者是網絡層). LLC層以下是媒體接入控制層(nt: MAC層,

對應于資料鍊路層的下層部分).該層的實作以及工作方式會根據不同實體傳輸媒介的不同而有所差別(比如, 以太網, 令牌環網,

光纖分布資料接口(nt: 實際可了解為一種光纖網絡), 無線區域網路(802.11), 等等.)

ipx tcpdump 将會檢查實體以太幀中的IPX etype域, LLC頭中的IPX DSAP域,無LLC頭并對IPX進行了封裝的802.3幀,

以及LLC 頭部'SNAP格式結構'中的IPX etype 域(nt | rt: SNAP frame, 可了解為, LLC 頭中的'SNAP格式結構'.

該含義屬初步了解階段, 需補充).

decnet src host

如果資料包中DECNET源位址為host, 則與此對應的條件表達式為真.

(nt:decnet, 由Digital Equipment Corporation 開發, 最早用于PDP-11 機器互聯的網絡協定)

decnet dst host

如果資料包中DECNET目的位址為host, 則與此對應的條件表達式為真.

(nt: decnet 在上文已有說明)

decnet host host

如果資料包中DECNET目的位址或DECNET源位址為host, 則與此對應的條件表達式為真.

ifname interface

如果資料包已被标記為從指定的網絡接口中接收的, 則與此對應的條件表達式為真.

(此選項隻适用于被OpenBSD中pf程式做過标記的包(nt: pf, packet filter, 可了解為OpenBSD中的防火牆程式))

on interface

與 ifname interface 含義一緻.

rnr num

如果資料包已被标記為比對PF的規則, 則與此對應的條件表達式為真.

rulenum num

與 rulenum num 含義一緻.

reason code

如果資料包已被标記為包含PF的比對結果代碼, 則與此對應的條件表達式為真.有效的結果代碼有: match, bad-offset,

fragment, short, normalize, 以及memory.

rset name

如果資料包已被标記為比對指定的規則集, 則與此對應的條件表達式為真.

ruleset name

與 rset name 含義一緻.

srnr num

如果資料包已被标記為比對指定的規則集中的特定規則(nt: specified PF rule number, 特定規則編号, 即特定規則),

則與此對應的條件表達式為真.(此選項隻适用于被OpenBSD中pf程式做過标記的包(nt: pf, packet filter, 可了解為

OpenBSD中的防火牆程式))

subrulenum num

與 srnr 含義一緻.

action act

如果包被記錄時PF會執行act指定的動作, 則與此對應的條件表達式為真. 有效的動作有: pass, block.

ip, ip6, arp, rarp, atalk, aarp, decnet, iso, stp, ipx, netbeui

與以下表達元含義一緻:

ether proto p

p是以上協定中的一個.

lat, moprc, mopdl

p是以上協定中的一個. 必須要注意的是tcpdump目前還不能分析這些協定.

vlan [vlan_id]

如果資料包為IEEE802.1Q VLAN 資料包, 則與此對應的條件表達式為真.

(nt: IEEE802.1Q VLAN, 即IEEE802.1Q 虛拟網絡協定, 此協定用于不同網絡的之間的互聯).

如果[vlan_id] 被指定, 則隻有資料包含有指定的虛拟網絡id(vlan_id), 則與此對應的條件表達式為真.

要注意的是, 對于VLAN資料包, 在表達式中遇到的第一個vlan關鍵字會改變表達式中接下來關鍵字所對應資料包中資料的

開始位置(即解碼偏移). 在VLAN網絡體系中過濾資料包時, vlan [vlan_id]表達式可以被多次使用. 關鍵字vlan每出現一次都會增加

4位元組過濾偏移(nt: 過濾偏移, 可了解為上面的解碼偏移).

例如:

vlan 100 && vlan 200

表示: 過濾封裝在VLAN100中的VLAN200網絡上的資料包

再例如:

vlan && vlan 300 && ip

表示: 過濾封裝在VLAN300 網絡中的IPv4資料包, 而VLAN300網絡又被更外層的VLAN封裝

mpls [label_num]

如果資料包為MPLS資料包, 則與此對應的條件表達式為真.

(nt: MPLS, Multi-Protocol Label Switch, 多協定标簽交換, 一種在開放的通信網上利用标簽引導資料傳輸的技術).

如果[label_num] 被指定, 則隻有資料包含有指定的标簽id(label_num), 則與此對應的條件表達式為真.

要注意的是, 對于内含MPLS資訊的IP資料包(即MPLS資料包), 在表達式中遇到的第一個MPLS關鍵字會改變表達式中接下來關鍵字所對應資料包中資料的

開始位置(即解碼偏移). 在MPLS網絡體系中過濾資料包時, mpls [label_num]表達式可以被多次使用. 關鍵字mpls每出現一次都會增加

mpls 100000 && mpls 1024

表示: 過濾外層标簽為100000 而層标簽為1024的資料包

再如:

mpls && mpls 1024 && host 192.9.200.1

表示: 過濾發往或來自192.9.200.1的資料包, 該資料包的内層标簽為1024, 且擁有一個外層标簽.

pppoed

如果資料包為PPP-over-Ethernet的伺服器探尋資料包(nt: Discoverypacket,

其ethernet type 為0x8863),則與此對應的條件表達式為真.

(nt: PPP-over-Ethernet, 點對點以太網承載協定, 其點對點的連接配接建立分為Discovery階段(位址發現) 和

PPPoE 會話建立階段 , discovery 資料包就是第一階段發出來的包. ethernet type

是以太幀裡的一個字段,用來指明應用于幀資料字段的協定)

pppoes

如果資料包為PPP-over-Ethernet會話資料包(nt: ethernet type為0x8864, PPP-over-Ethernet在上文已有說明, 可搜尋

關鍵字'PPP-over-Ethernet'找到其描述), 則與此對應的條件表達式為真.

要注意的是, 對于PPP-over-Ethernet會話資料包, 在表達式中遇到的第一個pppoes關鍵字會改變表達式中接下來關鍵字所對應資料包中資料的

開始位置(即解碼偏移).

pppoes && ip

表示: 過濾嵌入在PPPoE資料包中的ipv4資料包

tcp, udp, icmp

ip proto p or ip6 proto p

其中p 是以上協定之一(含義分别為: 如果資料包為ipv4或ipv6資料包并且其協定類型為 tcp,udp, 或icmp則與此對

應的條件表達式為真)

iso proto protocol

如果資料包的協定類型為iso-osi協定棧中protocol協定, 則與此對應的條件表達式為真.(nt: [初解]iso-osi 網絡模型中每

層的具體協定與tcp/ip相應層采用的協定不同. iso-osi各層中的具體協定另需補充 )

protocol 可以是一個數字編号, 或以下名字中之一:

clnp, esis, or isis.

(nt: clnp, Connectionless Network Protocol, 這是OSI網絡模型中網絡層協定 , esis, isis 未知, 需補充)

clnp, esis, isis

是以下表達的縮寫

iso proto p

其中p 是以上協定之一

l1, l2, iih, lsp, snp, csnp, psnp

為IS-IS PDU 類型 的縮寫.

(nt: IS-IS PDU, Intermediate system to intermediate system Protocol Data Unit, 中間系統到

中間系統的協定資料單元. OSI(Open Systems Interconnection)網絡由終端系統, 中間系統構成.

終端系統指路由器, 而終端系統指使用者裝置. 路由器形成的本地組稱之為'區域'(Area)和多個區域組成一個'域'(Domain).

IS-IS 提供域内或區域内的路由. l1, l2, iih, lsp, snp, csnp, psnp 表示PDU的類型, 具體含義另需補充)

vpi n

如果資料包為ATM資料包, 則與此對應的條件表達式為真. 對于Solaris 作業系統上的SunATM裝置 ,

如果資料包為ATM資料包, 并且其虛拟路徑辨別為n, 則與此對應的條件表達式為真.

(nt: ATM, Asychronous Transfer Mode, 實際上可了解為由ITU-T(國際電信聯盟電信标準化部門)提出的一個與

TCP/IP中IP層功能等同的一系列協定, 具體協定層次另需補充)

vci n

如果資料包為ATM資料包, 并且其虛拟通道辨別為n, 則與此對應的條件表達式為真.

(nt: ATM, 在上文已有描述)

lane

如果資料包為ATM LANE 資料包, 則與此對應的條件表達式為真. 要注意的是, 如果是模拟以太網的LANE資料包或者

LANE邏輯單元控制包, 表達式中第一個lane關鍵字會改變表達式中随後條件的測試. 如果沒有

指定lane關鍵字, 條件測試将按照資料包中内含LLC(邏輯鍊路層)的ATM包來進行.

llc

如果資料包為ATM資料包, 并且内含LLC則與此對應的條件表達式為真

oamf4s

如果資料包為ATM資料包, 則與此對應的條件表達式為真. 對于Solaris 作業系統上的SunATM裝置 , 如果資料包為ATM資料包

并且是Segment OAM F4 信元(VPI=0 并且 VCI=3), 則與此對應的條件表達式為真.

(nt: OAM, Operation Administration and Maintenance, 操作管理和維護,可了解為:ATM網絡中用于網絡

管理所産生的ATM信元的分類方式.

ATM網絡中傳輸機關為信元, 要傳輸的資料終究會被分割成固定長度(53位元組)的信元,

(初了解: 一條實體線路可被複用, 形成虛拟路徑(virtual path). 而一條虛拟路徑再次被複用, 形成虛拟信道(virtual channel)).

通信雙方的編址方式為:虛拟路徑編号(VPI)/虛拟信道編号(VCI)).

OAM F4 flow 信元又可分為segment 類和end-to-end 類, 其差別未知, 需補充.)

oamf4e

并且是 end-to-end OAM F4 信元(VPI=0 并且 VCI=4), 則與此對應的條件表達式為真.

(nt: OAM 與 end-to-end OAM F4 在上文已有描述, 可搜尋'oamf4s'來定位)

oamf4

并且是 end-to-end 或 segment OAM F4 信元(VPI=0 并且 VCI=3 或者 VCI=4), 則與此對應的條件表達式為真.

oam

(nt: 此選項與oamf4重複, 需确認)

metac

并且是來自'元信令線路'(nt: VPI=0 并且 VCI=1, '元信令線路', meta signalingcircuit, 具體含義未知, 需補充),

則與此對應的條件表達式為真.

bcc

并且是來自'廣播信令線路'(nt: VPI=0 并且 VCI=2, '廣播信令線路', broadcastsignaling circuit, 具體含義未知, 需補充),

sc

并且是來自'信令線路'(nt: VPI=0 并且 VCI=5, '信令線路', signalingcircuit, 具體含義未知, 需補充),

ilmic

并且是來自'ILMI線路'(nt: VPI=0 并且 VCI=16, 'ILMI', Interim Local Management Interface , 可了解為

基于SNMP(簡易網絡管理協定)的用于網絡管理的接口)

connectmsg

并且是來自'信令線路'并且是Q.2931協定中規定的以下幾種消息: Setup, CallingProceeding, Connect,

Connect Ack, Release, 或者Release Done. 則與此對應的條件表達式為真.

(nt: Q.2931 為ITU(國際電信聯盟)制定的信令協定. 其中規定了在寬帶ISDN絡的使用者接口層建立, 維護, 取消

網絡連接配接的相關步驟.)

metaconnect

并且是來自'元信令線路'并且是Q.2931協定中規定的以下幾種消息: Setup, CallingProceeding, Connect,

expr relop expr

如果relop 兩側的操作數(expr)滿足relop 指定的關系, 則與此對應的條件表達式為真.

relop 可以是以下關系操作符之一: >, <, <=,=, !=.

expr 是一個算術表達式. 此表達式中可使用整型常量(表示方式與标準C中一緻), 二進制操作符(+, -, *, /, &, |,

<<, >>), 長度操作符, 以及對特定資料包中資料的引用操作符. 要注意的是, 所有的比較操作都預設操作數是無符号的,

例如, 0x80000000 和 0xffffffff 都是大于0的(nt: 對于有符号的比較, 按照補碼規則, 0xffffffff

會小于0). 如果要引用資料包中的資料, 可采用以下表達方式:

proto [expr : size]

proto 的取值可以是以下取值之一:ether, fddi, tr,wlan, ppp, slip, link, ip, arp, rarp,

tcp, udp, icmp, ip6 或者 radio. 這指明了該引用操作所對應的協定層.(ether, fddi, wlan,

tr, ppp, slip and link 對應于資料鍊路層, radio 對應于802.11(wlan,無線區域網路)某些資料包中的附帶的

"radio"頭(nt: 其中描述了波特率, 資料加密等資訊)).

要注意的是, tcp, udp 等上層協定目前隻能應用于網絡層采用為IPv4或IPv6協定的網絡(此限制會在tcpdump未來版本中

進行修改). 對于指定協定的所需資料, 其在包資料中的偏移位元組由expr 來指定.

以上表達中size 是可選的, 用來指明我們關注那部分資料段的長度(nt:通常這段資料

是資料包的一個域), 其長度可以是1, 2, 或4個位元組. 如果不給定size, 預設是1個位元組. 長度操作符的關鍵字為len,

這代碼整個資料包的長度.

例如, 'ether[0] & 1 != 0' 将會使tcpdump 抓取所有多點廣播資料包.(nt: ether[0]位元組的最低位為1表示

資料包目的位址是多點廣播位址). 'ip[0] & 0xf != 5' 對應抓取所有帶有選項的

IPv4資料包. 'ip[6:2] & 0x1fff = 0'對應抓取沒被破碎的IPv4資料包或者

其片段編号為0的已破碎的IPv4資料包. 這種資料檢查方式也适用于tcp和udp資料的引用,

即, tcp[0]對應于TCP 頭中第一個位元組, 而不是對應任何一個中間的位元組.

一些偏移以及域的取值除了可以用數字也可用名字來表達. 以下為可用的一些域(協定頭中的域)的名字: icmptype (指ICMP 協定頭

中type域), icmpcode (指ICMP 協定頭code 域), 以及tcpflags(指TCP協定頭的flags 域)

以下為ICMP 協定頭中type 域的可用取值:

icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo,icmp-routeradvert,

icmp-routersolicit, icmp-timx-ceed, icmp-paramprob, icmp-tstamp,icmp-tstampreply,

icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.

以下為TCP 協定頭中flags 域的可用取值:tcp-fin, tcp-syn, tcp-rst, tcp-push,

tcp-ack, tcp-urg.