首頁 > 運維 > linux運維 > 主體

linux抓包指令tcpdump有什麼用?

青灯夜游
發布: 2020-11-03 11:15:15
原創
9130 人瀏覽過

linux抓包指令tcpdump用於傾倒網路傳輸數據,可以將網路中傳送的資料包的「頭」完全截獲下來提供分析;它支援針對網路層、協定、主機、網路或連接埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的資訊。

linux抓包指令tcpdump有什麼用?

相關推薦:《Linux影片教學

簡介

Linux tcpdump指令用於傾倒網路傳輸資料。

執行tcpdump指令可列出經過指定網路介面的封包檔案頭,在Linux作業系統中,你必須是系統管理員。

用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網路上的資料包進行截獲的套件分析工具。 tcpdump可以將網路中傳送的封包的「頭」完全截獲下來提供分析。它支援針對網路層、協定、主機、網路或連接埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的資訊。

實用指令實例

#預設啟動

tcpdump
登入後複製

普通情況下,直接啟動tcpdump將監視第一個網路介面上所有流過的封包。

監視指定網路介面的封包

tcpdump -i eth1
登入後複製

如果不指定網卡,預設tcpdump只會監視第一個網路接口,一般是eth0,下面的例子都沒有指定網路介面。

監視指定主機的封包

列印所有進入或離開sundown的封包.

tcpdump host sundown
登入後複製

也可以指定ip,例如截獲所有210.27.48.1 的主機收到的和發出的所有的資料包

tcpdump host 210.27.48.1
登入後複製

列印helios 與hot 或與ace 之間通訊的資料包

tcpdump host helios and \( hot or ace \)
登入後複製

截取主機210.27.48.1 和主機210.27.48.2 210.27.48.3的通訊

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
登入後複製

#ace與任何其他主機之間通訊的IP 封包, 但不包括與helios之間的封包.

tcpdump ip host ace and not helios
登入後複製

如果想要取得主機210.27.48.1除了和主機210.27.48.2之外所有主機通訊的ip包,使用指令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2
登入後複製

截取主機hostname發送的所有資料

tcpdump -i eth0 src host hostname
登入後複製

監視所有發送到主機hostname的封包

tcpdump -i eth0 dst host hostname
登入後複製

監視指定主機和連接埠的封包

如果想要取得主機210.27.48.1接收或發出的telnet包,使用以下指令

tcpdump tcp port 23 and host 210.27.48.1
登入後複製

對本機的udp 123 連接埠進行監視 123 ntp的服務連接埠

tcpdump udp port 123
登入後複製

監視指定網路的封包

列印本機與Berkeley網路上的主機之間的所有通訊資料包(nt: ucb-ether, 此處可理解為'Berkeley網路'的網路位址,此表達式最原始的意義可表達為: 列印網路位址為ucb-ether的所有封包)

tcpdump net ucb-ether
登入後複製

列印所有通過網關snup的ftp封包(注意, 表達式被單引號括起來了, 這可以防止shell對其中的括號進行錯誤解析)

tcpdump 'gateway snup and (port ftp or ftp-data)'
登入後複製

列印所有來源位址或目標位址是本機的IP封包

(如果本機網路透過閘道連接到了另一網路, 則另一網路並不能算是本機網路.(nt: 此句翻譯曲折,需補充).localnet 實際使用時要真正替換成本地網路的名字)

tcpdump ip and not net localnet
登入後複製

監視指定協定的資料包

##列印TCP會話中的開始和結束資料包, 並且資料包的來源或目的不是本地網路上的主機.(nt: localnet, 實際使用時要真正替換成本地網路的名字))

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
登入後複製
列印所有來源或目的連接埠是80, 網路層協定為IPv4, 並且含有資料,而不是SYN,FIN以及ACK-only等不含資料的資料包.(ipv6的版本的表達式可做練習)

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
登入後複製
(nt: 可理解為, ip[2:2]表示整個ip資料包的長度, (ip[0]&0xf)<<2)表示ip資料包頭的長度(ip[0] &0xf代表套件中的IHL域, 而此域的單位為32bit, 要換算

成字节数需要乘以4, 即左移2. (tcp[12]&0xf0)>>4 表示tcp头的长度, 此域的单位也是32bit, 换算成比特数为 ((tcp[12]&0xf0) >> 4) << 2, 
即 ((tcp[12]&0xf0)>>2). ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0 表示: 整个ip数据包的长度减去ip头的长度,再减去
tcp头的长度不为0, 这就意味着, ip数据包中确实是有数据.对于ipv6版本只需考虑ipv6头中的'Payload Length' 与 'tcp头的长度'的差值, 并且其中表达方式'ip[]'需换成'ip6[]'.)

打印长度超过576字节, 并且网关地址是snup的IP数据包

tcpdump 'gateway snup and ip[2:2] > 576'
登入後複製

打印所有IP层广播或多播的数据包, 但不是物理以太网层的广播或多播数据报

tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
登入後複製

打印除'echo request'或者'echo reply'类型以外的ICMP数据包( 比如,需要打印所有非ping 程序产生的数据包时可用到此表达式 .
(nt: 'echo reuqest' 与 'echo reply' 这两种类型的ICMP数据包通常由ping程序产生))

tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
登入後複製

tcpdump 与wireshark

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。
还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
登入後複製

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

使用tcpdump抓取HTTP包

tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
登入後複製

0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。

tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序(如Wireshark)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

输出信息含义

首先我们注意一下,基本上tcpdump总的的输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数

tcpdump 的输出格式与协议有关.以下简要描述了大部分常用的格式及相关例子.

链路层头

对于FDDI网络, '-e' 使tcpdump打印出指定数据包的'frame control' 域, 源和目的地址, 以及包的长度.(frame control域
控制对包中其他域的解析). 一般的包(比如那些IP datagrams)都是带有'async'(异步标志)的数据包,并且有取值0到7的优先级;
比如 'async4'就代表此包为异步数据包,并且优先级别为4. 通常认为,这些包们会内含一个 LLC包(逻辑链路控制包); 这时,如果此包
不是一个ISO datagram或所谓的SNAP包,其LLC头部将会被打印(nt:应该是指此包内含的 LLC包的包头).

对于Token Ring网络(令牌环网络), '-e' 使tcpdump打印出指定数据包的'frame control'和'access control'域, 以及源和目的地址,
外加包的长度. 与FDDI网络类似, 此数据包通常内含LLC数据包. 不管 是否有'-e'选项.对于此网络上的'source-routed'类型数据包(nt:
意译为:源地址被追踪的数据包,具体含义未知,需补充), 其包的源路由信息总会被打印.

对于802.11网络(WLAN,即wireless local area network), '-e' 使tcpdump打印出指定数据包的'frame control域,
包头中包含的所有地址, 以及包的长度.与FDDI网络类似, 此数据包通常内含LLC数据包.

(注意: 以下的描述会假设你熟悉SLIP压缩算法 (nt:SLIP为Serial Line Internet Protocol.), 这个算法可以在
RFC-1144中找到相关的蛛丝马迹.)

對於SLIP網路(nt:SLIP links, 可理解為一個網路, 即透過序列線路建立的連接, 而一個簡單的連接也可看成一個網路),
封包的'direction indicator' ('方向指示標誌')("I"表示入, "O"表示出), 類型以及壓縮訊息將會被列印. 套件類型會被先印出.

類型分為ip, utcp以及ctcp(nt:未知, 需補充). 對於ip包,連接資訊將不被列印(nt:SLIP連接上,ip包的連接資訊可能無用或沒有定義.
reconfirm).對於TCP封包, 連接標識緊接著類型表示被打印. 如果此包被壓縮, 其被編碼過的頭部將被打印.
此時對於特殊的壓縮包,會如下顯示:
*S n 或*SA n , 其中n代表包的(順序號或(順序號和應答號))增加或減少的數目(nt | rt:S,SA拗口, 需再譯).
對於非特殊的壓縮包,0個或更多的'改變'將會被打印.'改變'被打印時格式如下:
'標誌' /-/=n 包數據的長度壓縮的頭部長度.
其中'標誌'可以取以下值:
U(代表緊急指標), W(指緩衝視窗), A(應答), S(序號), I(包ID),而增量表達'=n'表示被賦予新的值, /-表示增加或減少.

例如, 以下顯示了對一個外發壓縮TCP數據包的打印, 這個數據包隱含一個連接標識(connection identifier); 應答號增加了6 ,
順序號增加了49, 包ID號增加了6; 包數據長度為3字節(octect), 壓縮頭部為6字節.(nt:如此看來這應該不是一個特殊的壓縮數據包).

ARP/RARP 封包

tcpdump對Arp/rarp包的輸出資訊中會包含請求類型及該請求對應的參數.顯示格式簡潔明了. 以下是從主機rtsg到主機csam的'rlogin'
(遠端登入)程序開始階段的封包範例:
arp who-has csam tell rtsg
arp reply csam is-at CSAM
第一行表示:rtsg發送了一個arp資料包(nt:向全網段發送,arp資料包)以詢問csam的以太網位址
Csam(nt:可從下文看出來, 是Csam)以她自己的以太網路位址做了回應(在這個例子中, 乙太網路位址以大寫的名字標識, 而internet
位址(即ip位址)以全部的小寫名字標識).

如果使用tcpdump -n , 可以清楚看到乙太網路以及ip位址而非名字識別:
arp who-has 128.3.254.6 tell 128.3.254.68
arp reply 128.3.254.6 is-at 02:07:01:00:01:00:01 c4

如果我們使用tcpdump -e, 則可以清晰的看到第一個資料包是全網廣播的, 而第二個資料包是點對點的:
RTSG Broadcast 0806 64: arp who-has csam tell rtsg
CSAM RTSG 0806 64: arp reply csam is-at CSAM
第一個封包顯示:以arp封包的來源乙太位址是RTSG, 目標位址是全乙太網路區段, type域的值為16進位0806(表示ETHER_ARP(nt:arp套件的型別標識)),
包的總長度為64位元組.

TCP 封包

(注意:以下將會假定你對RFC-793所描述的TCP熟悉. 如果不熟, 以下描述以及tcpdump程序可能對你幫助不大.(nt:警告可忽略,
只要繼續看, 不熟悉的地方可回頭再看.).

通常tcpdump對tcp封包的顯示格式如下:
src > dst: flags data-seqno ack window urgent options

src 和dst 是來源和目的IP位址以及對應的連接埠. flags 標誌由S(SYN), F(FIN), P(PUSH, R(RST),
W (ECN CWT(nt | rep:未知, 需補充))或E(ECN-Echo(nt | rep:未知, 需補充))組成,
單獨一個'.'表示沒有flags標識. 資料段順序號(Data-seqno)描述了此包中資料所對應序號空間中的一個位置(nt:整個資料被分段,
每段有一個順序號, 所有的順序號構成一個序號空間)(可參考以下範例). Ack 描述的是同一個連接,同一個方向,下一個本端應該接收的
(對方應該發送的)資料片段的順序號. Window是本端可用的資料接收緩衝區的大小(也是對方發送資料時需根據這個大小來組織資料).
Urg(urgent) 表示資料包中有緊急的資料. options 描述了tcp的一些選項, 這些選項都用尖括號來表示(如).

src, dst 和flags 這三個域總是會被顯示. 其他域的顯示與否依賴於tcp協定頭裡的資訊.

這是一個從trsg到csam的一個rlogin應用登錄的開始階段.
rtsg.1023 > csam.login: S 768512:768512(0) win 4096
csam. login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096
rtsg.1023 > csam.login: . ack 1 ## rtsg.1023 > csam.login: 。 login: P 1:2(1) ack 1 win 4096
csam.login > rtsg.1023: . ack 2 win 4096
rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096
csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077
csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urur 1
csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1
第一行表示有一個封包從rtsg主機的tcp埠1023傳送到了csam主機的tcp連接埠login上(nt:udp協定的連接埠和tcp協定的端
口是分別的兩個空間, 雖然取值範圍一致).S表示設定了SYN標誌. 套件的順序號碼是768512, 並且沒有包含資料.(表示格式
為:'first:last(nbytes)', 其意義是'此套件中資料的順序號碼從first開始直到last結束,不包括last. 並且總共包含nbytes的
用戶資料'.) 沒有捎帶應答(nt:從下文來看,第二行才是有捎帶應答的資料包), 可用的接受視窗的大小為4096bytes, 並且請求端(rtsg)
的最大可接受的資料段大小是1024位元組(nt:這個訊息作為請求發向應答端csam, 以便雙方進一步的協商).

Csam 向rtsg 回復了基本相同的SYN資料包, 其區別只是多了一個' piggy-backed ack'(nt:捎帶回的ack應答, 針對rtsg的SYN數據包).

rtsg 同樣針對csam的SYN數據包回復了一ACK數據包作為應答. '. '的意思是此包中沒有標誌被設定. 由於此應答包中不含有資料, 所以

包中也沒有資料段序號.提醒! 此ACK 資料包的順序號只是一個小整數 1.有如下解釋:tcpdump對於一個tcp連接上的會話, 只列印會話兩端的
初始資料包的序號,其後對應資料包只列印出與初始包序號的差異.即初始序號之後的序列號, 可被看作此會話上當前所傳資料片段在整個
要傳輸的資料中的'相對位元組'位置(nt:雙方的第一個位置都是1, 即'相對位元組'的開始編號). '-S'將覆蓋這個功能, 
使封包的原始順序號被打印出來.

第六行的含義為:rtsg 向csam發送了19字節的資料(位元組的編號為2到20,傳送方向為rtsg到csam). 包中設定了PUSH標誌. 在第7行,

csam 喊到, 她已經從rtsg中收到了21以下的字節, 但不包括21編號的位元組. 這些位元組存放在csam的socket的接收緩衝中, 相應地,
csam的接收緩衝視窗大小會減少19位元組(nt:可以從第5行和第7行win屬性值的變化看出來). csam在第7行這個包中也向rtsg發送了一個
字節. 在第8行和第9行, csam 繼續向rtsg 分別發送了兩個隻包含一個位元組的資料包, 並且這個資料包帶PUSH標誌.

如果所抓到的tcp包(nt:即這裡的snapshot)太小了,以至tcpdump無法完整得到其頭部數據, 這時, tcpdump會盡量解析這個不完整的頭,

並把剩下不能解析的部分顯示為'[|tcp]'. 如果頭部含有虛假的屬性信息(比如其長度屬性其實比頭部實際長度長或短), tcpdump會為該頭部
顯示'[bad opt]'. 如果頭部的長度告訴我們某些選項(nt | rt:從下文來看, 指tcp包的頭部中針對ip包的一些選項, 回頭再翻)會在此包中,
而真正的IP(數據包的長度又不夠容納這些選項, tcpdump會顯示'[bad hdr length]'.

抓取有特殊標誌的的TCP套件(如SYN-ACK標誌, URG-ACK標誌等).

在TCP的頭部, 有8位元(bit)用作控制位區域, 其值為:

CWR | ECE | URG | ACK | PSH | RST | SYN | FIN
(nt | rt:從表達方式上可推斷:這8個位是用或的方式來組合的, 可回頭再翻)

現假設我們想要監控建立一個TCP連接整個過程中所產生的數據包. 可回憶如下:TCP使用3次握手協議來建立一個新的連接; 其與此三次握手

連接順序對應,並帶有相應TCP控制標誌的資料包如下:
1) 連接發起方(nt:Caller)發送SYN標誌的資料包
2) 接收方(nt:Recipient)以帶有SYN和ACK標誌的資料包回應
3) 發起方收到接收方回應後再發送帶有ACK標誌的資料包回應

0 15 31
----------------------------------------- ------------------------
| source port | destination port |
------------- -------------------------------------------------- --
| sequence number |
-------------------------------------- ---------------------------
| acknowledgment number |
------------- -------------------------------------------------- --
| HL | rsvd |C|E|U|A|P|R|S|F| window size |
------------------ ----------------------------------------------
# | TCP checksum | urgent pointer |
---------------------------------------- -------------------------

一個TCP頭部,在不包含選項資料的情況下通常會佔用20個位元組(nt | rt:options 理解為選項數據,需回譯). 第一行包含0到3編號的位元組,
第二行包含編號4-7的位元組.

如果編號從0開始算, TCP控制標誌位於13位元組(nt:第四行左半部).

0 7| 15| 23| 31
--------- -------|---------------|---------------|---------- ------
| HL | rsvd |C|E|U|A|P|R|S|F| window size |
-------------- --|---------------|---------------|--------------- -
| | 13th octet | | |

##讓我們仔細看看編號13的位元組:

| |

|---------- -----|
|C|E|U|A|P|R|S|F|
|---------------|
| 7 5 3 0|

這裡有我們感興趣的控制標誌位. 從右往左這些位被依次編號為0到7, 從而PSH位在3號, 而URG位在5號.

提醒自己, 我們只是要得到包含SYN標誌的資料包. 讓我們看看在一個包的包頭中, 如果SYN位被設定, 到底

在13號字節發生了什麼:

|C|E|U|A|P|R|S|F|

|---------------|
|0 0 0 0 0 0 1 0|
|---------------|
|7 6 5 4 3 2 1 0|

在控制段的數據中, 只有比特1(bit number 1)被置位.

假設編號為13的字節是一個8位的無符號字符型,並且按照網絡字節號排序(nt:對於一個字節來說,網路字節序等同於主機字節序), 其二進位值

如下所示:
00000010

且其10進位值為:

0*2^7 0*2^6 0*2^5 0*2^4 0*2^3 0*2^2 1*2^1 0*2^0 = 2(nt: 1 * 2^6表示1乘以2的6次方, 也許這樣更

清楚些, 即把原來表達中的指數7 6 ... 0挪到了下面來表達)

接近目標了, 因為我們已經知道, 如果封包頭部中的SYN被置位, 那麼頭部中的第13個位元組的值為2(nt: 依照網路序列, 即大頭方式, 最重要的位元組

在前面(在前面,即該位元組實際記憶體位址比較小, 最重要的位元組,指數學表示中數的高位元, 如356中的3) ).

表達為tcpdump能理解的關係式就是:

tcp[13] 2

所以我們可以把此關係式當作tcpdump的過濾條件, 目標就是監控只含有SYN標誌的封包:

tcpdump -i xl0 tcp[13 ] 2 (nt: xl0 指網路介面, 如eth0)

這個表達式是說"讓TCP封包的第13個位元組擁有值2吧", 這也​​是我們想要的結果.

現在, 假設我們需要抓取帶有SYN標誌的封包, 而忽略它是否包含其他標誌.(nt:只要帶SYN就是我們想要的). 讓我們來看看當一個含有

SYN-ACK的封包(nt:SYN 和ACK 標誌都有), 來到時發生了什麼:
|C|E|U|A|P|R|S|F|
|- --------------|
|0 0 0 1 0 0 1 0|
|---------------|
|7 6 5 4 3 2 1 0|

13號位元組的1號和4號位元被置位, 其二進位的值為:

00010010

#轉換成十進位就是:

0*2^7 0*2^6 0*2^5 1*2^4 0*2^3 0*2^2 1*2^1 0*2 = 18( nt: 1 * 2^6 表示1乘以2的6次方, 也許這樣更

清楚些, 即把原來表達中的指數7 6 ... 0挪到了下面來表達)

現在, 卻不能只用'tcp[13] 18'作為tcpdump的過濾表達式, 因為這將導致只選擇含有SYN-ACK標誌的資料包, 其他的都被丟棄.

提醒一下自己, 我們的目標是: 只要包的SYN標誌被設定就行, 其他的標誌我們不理會.

為了達到我們的目標, 我們需要把13號字節的二進制值與其他的一個數做AND操作(nt:邏輯與)來得到SYN位元的值. 目標是:只要SYN 被設定

就行, 於是我們就把她與上13號位元組的SYN值(nt: 00000010).

#00010010 SYN-ACK 00000010 SYN

AND 00000010 (we want SYN) AND 00000010 (we want SYN)
-------- --------
= 00000010 = 00000010

我們可以發現, 不管包的ACK或其他標誌是否被設定, 以上的AND操作都會給我們相同的值, 其10進製表達就是2(2進製表達就是00000010).
從而我們知, 對於有SYN標誌的資料包, 以下的表達式的結果總是真(true):

( ( value of octet 13 ) AND ( 2 ) ) ( 2 ) (nt: value of octet 13, 即13號字節的值)

靈感隨之而來, 我們於是得到瞭如下的tcpdump 的過濾表達式
tcpdump -i xl0 'tcp[13] & 2 2'

注意, 單引號或反斜桿(nt: 這裡用的是單引號)不能省略, 這可以防止shell對&的解釋或替換.

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就表示的是authority records).
由於沒有回答記錄, 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 ', 'Internet File 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 (tridge@samba.org)提供.

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 wrl.nfs > sushi.6709: reply " ok/ var"
sushi.201b > wrl.nfs:
144 lookup fh 9,74/4096.6878 "xcolors"
wrl.nfs > sushi.201b:
reply 128 lookup fgt; sushi.201b:

reply 128 lookup fgt; 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/## 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: 確認包為相對於請求包的確認包, Maximum Transmission 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, The AppleTalk 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.12. 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 >ios; jssmag.209.165: atp-resp 12266:0 (512) 0xae040000
helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae0400.0099. resp 12266:2 (512) 0xae040000
helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000
helios.132 > ) 0xae040000
helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000
helios.132 > jssmag.20xae040000
helios.132 > jssmag.209.res100
2020206:0020p-602020p-x jssmag.209.165 >; .209.165: atp-resp 12266:5 (512) 0xae040000
jssmag.209.165 > helios.132: atp-rel 12266<0-7> helios.132: atp-rel 12266<0-7> 0xaef30001120002129990000x12:20999:0099990001129299990 月; * 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 (frag 595a: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  ] [ -m module ] [ -M secret ]
           [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
           [ -W filecount ]
           [ -E spi@ipaddr algo:secret,...  ]
           [ -y datalinktype ] [ -Z user ]
           [ expression ]
登入後複製

tcpdump的简单选项介绍

-A  以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy  capturing web pages).

-c  count
    tcpdump将在接受到count个数据包后退出.

-C  file-size (nt: 此选项用于配合-w file 选项使用)
    该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,,000个字节,并非1,,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M= *  = ,,)

-d  以容易阅读的形式,在标准输出上打印出编排过的包匹配码, 随后tcpdump停止.(nt | rt: human readable, 容易阅读的,通常是指以ascii码来打印一些信息. compiled, 编排过的. packet-matching code, 包匹配码,含义未知, 需补充)

-dd 以C语言的形式打印出包匹配码.

-ddd 以十进制数的形式打印出包匹配码(会在包匹配码之前有一个附加的前缀).

-D  打印系统中所有tcpdump可以在其上进行抓包的网络接口. 每一个接口会打印出数字编号, 相应的接口名字, 以及可能的一个网络接口描述. 其中网络接口名字和数字编号可以用在tcpdump 的-i flag 选项(nt: 把名字或数字代替flag), 来指定要在其上抓包的网络接口.

    此选项在不支持接口列表命令的系统上很有用(nt: 比如, Windows 系统, 或缺乏 ifconfig -a 的UNIX系统); 接口的数字编号在windows  或其后的系统中很有用, 因为这些系统上的接口名字比较复杂, 而不易使用.

    如果tcpdump编译时所依赖的libpcap库太老,-D 选项不会被支持, 因为其中缺乏 pcap_findalldevs()函数.

-e  每行的打印输出中将包括数据包的数据链路层头部信息

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

    可通过spi@ipaddr algo:secret 来解密IPsec ESP包(nt | rt:IPsec Encapsulating Security Payload,IPsec 封装安全负载, IPsec可理解为, 一整套对ip数据包的加密协议, ESP 为整个IP 数据包或其中上层协议部分被加密后的数据,前者的工作模式称为隧道模式; 后者的工作模式称为传输模式 . 工作原理, 另需补充).

    需要注意的是, 在终端启动tcpdump 时, 可以为IPv4 ESP 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@ipaddr algo:secret,... 中...换成一个语法文件名). 此文件在接受到第一个ESP 包时会打开此文件, 所以最好此时把赋予tcpdump 的一些特权取消(nt: 可理解为, 这样防范之后, 当该文件为恶意编写时,不至于造成过大损害).

-f  显示外部的IPv4 地址时(nt: foreign IPv4 addresses, 可理解为, 非本机ip地址), 采用数字方式而不是名字.(此选项是用来对付Sun公司的NIS服务器的缺陷(nt: NIS, 网络信息服务, tcpdump 显示外部地址的名字时会用到她提供的名称服务): 此NIS服务器在查询非本地地址名字时,常常会陷入无尽的查询循环).

    由于对外部(foreign)IPv4地址的测试需要用到本地网络接口(nt: tcpdump 抓包时用到的接口)及其IPv4 地址和网络掩码. 如果此地址或网络掩码不可用, 或者此接口根本就没有设置相应网络地址和网络掩码(nt: linux 下的  网络接口就不需要设置地址和掩码, 不过此接口可以收到系统中所有接口的数据包), 该选项不能正常工作.

-F  file
    使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.

-i  

    指定tcpdump 需要监听的接口.  如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口(不包括 loopback 接口).一但找到第一个符合条件的接口, 搜寻马上结束.

    在采用2.2版本或之后版本内核的Linux 操作系统上,  这个虚拟网络接口可被用来接收所有网络接口上的数据包(nt: 这会包括目的是该网络接口的, 也包括目的不是该网络接口的). 需要注意的是如果真实网络接口不能工作在模式(promiscuous)下,则无法在这个虚拟的网络接口上抓取其数据包.

    如果 -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 Management Protoco)协议数据包的抓取. 具体SNMP 的工作原理未知, 另需补充).

    此选项可多次使用, 从而为tcpdump 装载不同的MIB 模块.

-M  secret  如果TCP 数据包(TCP segments)有TCP-MD5选项(在RFC 2385有相关描述), 则为其摘要的验证指定一个公共的密钥secret.

-n  不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.

-N  不打印出host 的域名部分. 比如, 如果设置了此选现, tcpdump 将会打印 而不是 .

-O  不启用进行包匹配时所用的优化代码. 当怀疑某些bug是由优化代码引起的, 此选项将很有用.

-p  一般情况下, 把网络接口设置为非模式. 但必须注意 , 在特殊情况下此网络接口还是会以模式来工作; 从而,  的设与不设, 不能当做以下选现的代名词: 或  (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 和 . 而如果此时-S 选项被设置, 对于后来接收到的第2个, 第3个数据包会打印出其绝对顺序号:, ).

-s  snaplen
    设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节(而支持网络接口分接头(nt: NIT, 上文已有描述,可搜索关键字找到那里)的SunOS系列操作系统中默认的也是最小值是96).68字节对于IP, ICMP(nt: Internet Control Message 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 Distance Vector protocol, 按需距离向量路由协议, 在Ad hoc(点对点模式)网络中使用),
    cnfp (Cisco  NetFlow  protocol),  rpc(Remote Procedure Call), rtp (Real-Time Applications protocol),
    rtcp (Real-Time Applications con-trol protocol), 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  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', 'net 128.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: Serial Line 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 Equipment Corporation开发的, 最早用于PDP-11 机器互联的网络协议; tcp and udp, 即通常TCP/IP协议栈中的两个传输层协议).

    例如, `ether src 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 arp or 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 provider interface, 数据链层提供者接口)来直接获得网络数据包, 其可抓取的数据包可涵盖上层的各种协议, 包括arp, rarp, icmp(因特网控制报文协议),ip, ip6, tcp, udp, sctp(流控制传输协议).

    对于修饰符后跟id 的格式,可理解为, type id 是对包最基本的过滤条件: 即对包相关的主机, 网络, 端口的限制;dir 表示对包的传送方向的限制; proto表示对包相关的协议限制)

    'fddi'(nt: Fiber Distributed Data Interface) 实际上与'ether' 含义一样: tcpdump 会把他们当作一种''指定网络接口上的数据链路层协议''. 如同ehter网(以太网), FDDI 的头部通常也会有源, 目的, 以及包类型, 从而可以像ether网数据包一样对这些域进行过滤. 此外, FDDI 头部还有其他的域, 但不能被放到表达式中用来过滤

    同样, 'tr' 和 'wlan' 也和 'ether' 含义一致, 上一段对fddi 的描述同样适用于tr(Token Ring) 和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 port ftp-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 or tcp 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 destination address, 乙太網路來源與目標位址, 可理解為, 指涉上句中的'#網關位址' ).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: src net 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 is used 不可理解, 需補充).

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 Redundancy Protocol, 虛擬路由器冗餘協定), 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在上文已有描述)

atalk

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, 則與此對應的條件表達式為真.
(nt: decnet 在上文已有說明)

ifname interface
如果封包已被標記為從指定的網路介面中接收的, 則與此對應的條件表達式為真.
(此選項只適用於被OpenBSD中pf程式做過標記的包(nt: pf, packet filter, 可理解為OpenBSD中的防火牆程式))

on interface
#與ifname interface 意義一致.

rnr num
如果封包已被標記為符合PF的規則, 則與此對應的條件表達式為真.
(此選項只適用於被OpenBSD中pf程式做過標記的套件(nt: pf, packet filter, 可理解為OpenBSD中的防火牆程式))

rulenum num
與rulenum num 意義一致.

reason code
如果封包已被標記為包含PF的匹配結果代碼, 則與此對應的條件表達式為真.有效的結果代碼有: match, bad-offset,
fragment, short, normalize, 以及memory.
(此選項只適用於被OpenBSD中pf程式做過標記的套件(nt: pf, packet filter, 可理解為OpenBSD中的防火牆程式))

rset name
如果封包已被標記為符合指定的規則集, 則與此對應的條件表達式為真.
(此選項只適用於被OpenBSD中pf程序做過標記的包(nt: pf, packet filter, 可理解為OpenBSD中的防火牆程序) )

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.
(此選項只適用於被OpenBSD中pf程序做過標記的包(nt: pf, packet filter, 可理解為OpenBSD中的防火牆程式))

ip, ip6, arp, rarp, atalk, aarp, decnet, iso, stp, ipx, netbeui
與下列表達元意義一致:
ether proto p
p是上述協定中的一個.

lat, moprc, mopdl
與以下表達元意義一致:
ether proto p
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每出現一次都會增加
4位元組過濾偏移(nt: 過濾偏移, 可理解為上面的解碼偏移).

例如:
mpls 100000 && mpls 1024
表示: 過濾外層標籤為100000 而層標籤為1024的封包

再如:
mpls && mpls 1024 && host 192.9.200.1
表示: 過濾發送或來自192.9.200.1的封包, 此封包的內層標籤為1024, 且擁有一個外層標籤.

pppoed
如果封包為PPP-over-Ethernet的伺服器探尋封包(nt: Discovery packet,
其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封包, 則與此對應的條件表達式為真. 對於Solaris 運算系統上的SunATM設備,
如果封包為ATM封包, 並且其虛擬通道標識為n, 則與此對應的條件表達式為真.
(nt: ATM, 在上文已有描述)

lane

如果封包為ATM LANE 封包, 則與此對應的條件表達式為真. 要注意的是, 如果是模擬乙太網路的LANE封包或
LANE邏輯單元控制包, 表達式中第一個lane關鍵字會改變表達式中隨後條件的測試. 如果沒有
指定lane關鍵字, 條件測試將按照資料包中內含LLC(邏輯鏈結層)的ATM包來進行.

llc

如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM設備,
如果封包為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

如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM裝置, 如果封包為ATM封包
且為end -to-end OAM F4 訊號元(VPI=
0 且VCI=4), 則與此對應的條件表達式為真.(nt: OAM 與end -to-end OAM F4 在上文已有描述, 可搜尋
'oamf4s'來定位)

oamf4

如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM裝置, 如果封包為ATM封包
且是end-to-end 或segment OAM F4 訊號元(VPI=
0 且VCI=3 或VCI=4), 則與此對應的條件式為真.(nt: OAM與end-to-end OAM F4 在上文已有描述, 可搜尋
'oamf4s'來定位)##oam

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

且是end-to-end 或segment OAM F4訊號元(VPI=
0
且VCI=3 或VCI=4), 則與此對應的條件表達式為真.(nt : 此選項與oamf4重複, 需確認)

metac
如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM裝置, 如果封包為ATM封包
且是來自'元訊號線路'(nt: VPI=0 且VCI=1, '元訊號線路', meta signaling circuit, 具體意義未知, 需補充),
則與此對應的條件表達式為真.

bcc
如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM裝置, 如果封包為ATM封包
且是來自 '廣播訊號線路'(nt: VPI=0 且VCI=2, '廣播訊號線路', broadcast signaling circuit, 具體意義未知, 需補充),
則與此對應的條件表達式為真.

sc
如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM裝置, 如果封包為ATM封包
並且是來自' 訊號線路'(nt: VPI=0 且VCI=5, '訊號線路', signaling circuit, 具體意義未知, 需補充),
則與此對應的條件表達式為真.

##ilmic

如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM裝置, 如果封包為ATM封包
且是來自
'#ILMI線路'(nt: VPI=0 且VCI=16, 'ILMI', Interim Local Management Interface , 可理解為基於SNMP(簡易網路管理協定)的用於網路管理的介面)
則與此對應的條件表達式為真.

connectmsg

如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM裝置, 如果封包為ATM封包
且是來自
'訊號線路'且是Q.2931協定中規定的以下幾種訊息: Setup, Calling Proceeding, Connect,Connect Ack , Release, 或Release Done. 則與此對應的條件表達式為真.
(nt: Q.
2931 為ITU(國際電信聯盟)制定的信令協議. 其中規定了在寬頻綜合業務數位網路的使用者介面層建立, 維護, 取消網路連線的相關步驟.)

metaconnect

如果封包為ATM封包, 則與此對應的條件表達式為真. 對於Solaris 作業系統上的SunATM設備, 如果封包為ATM封包
並且是來自
'##元訊號線路'並且是Q.2931協議中規定的以下幾種訊息: Setup, Calling Proceeding, Connect,Connect Ack, Release, 或Release Done. 則與此對應的條件表達式為真.
expr relop expr

如果relop 兩側的運算元(expr)滿足relop 指定的關係, 則與此對應的條件表達式為真.

relop 可以是下列關係運算子之一: >, < , <=, =, !=.
expr 是一個算術表達式. 此表達式中可使用整數常數(表示方式與標準C中一致), 二進位運算子( , -, *, /, &, |,
<<, >>), 長度運算子, 以及對特定資料包中資料的引用運算子. 要注意的是, 所有的比較運算都預設運算元是無符號的,
例如,
0x80000000
0xffffffff 都是大於0的(nt: 對於有符號的比較, 按照補碼規則, 0xffffffffff會小於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-paramp, icmp-tstamp, icmp-tstamp-gmp
icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.

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

更多程式相關知識,請造訪:程式學習課程! !

以上是linux抓包指令tcpdump有什麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!