linux 下 tcpdump 命令詳解


用途

在網絡上轉儲流量

語法

tcpdump [ -a ] [ -A ] [ -B buffer_size ] [ -d ] [ -D ] [ -e ] [ -f ] [ -l ] [ -K ] [ -L ] [ -M secret ] [ -r file ]][ -n ] [ -N ] [ -O ] [ -p ][ -q ] [ -Q [ -V ] ] [ -R ] [ -S ] [ -t ] [ -T ][ -u ] [ -U ] [ -v ] [ -x ] [ -X ] [ -c count ][ -C file_size ] [ -F file ] [ -G rotate_seconds ] [ -i  interface ] [ -s snaplen ] [ -w file ][ -E addr ] [ -y datalinktype ] [-z command ] [-Z user ] [ expression ]

描述

tcpdump 命令將打印網絡接口上與布爾表達式相匹配的信息包的頭部分。可以在運行此命令時附帶 -w 標志以將信息包數據保存在文件中,以便進一步進行分析。還可以在運行此命令時附帶 -r 標志,以從所保存的信息包文件中讀取數據,而不是從網絡接口中讀取信息包。在所有情況下,tcpdump 命令將只處理與表達式相匹配的信息包。

如果運行此命令時未帶 -c 標志,那么 tcpdump 將繼續捕獲信息包,直到它被 SIGINT 信號(通常為 control-C)或者 SIGTERM 信號(通常為 kill(1) 命令)中斷為止。如果運行 tcpdump 時帶有-c 標志,那么它將捕獲信息包,直到它被 SIGINT 或 SIGTERM 信號中斷,或者直到已經處理了指定數目的信息包為止。

在捕獲所有信息包之后, tcpdump 命令將返回下列計數:
“過濾器接收”的信息包
對所有信息包進行計數,而不管是否通過過濾表達式對其進行匹配。
“內核刪除”的信息包
由於缺乏緩沖區空間而刪除的信息包數。

允許的原語

dst host host
如果信息包的 IPv4/v6 目標字段為 host(它可以為地址或者名稱),那么為 True。
src host host
如果信息包的 IPv4/v6 源字段為 host,那么為 True。
host host
如果信息包的 IPv4/v6 源或目標為 host,那么為 True。以上任何 host 表達式可前置關鍵字 ip、arp、rarp 或 ip6,如在 ip host host 中所示,ip host host 等同於以下內容:
ether proto \ip and host host
復制如果 host 是帶有多個 IP 地址的名稱,那么會檢查每個地址是否相匹配。
ether dst ehost
如果以太網目標地址為  ehost,那么為 True。Ehost 可以為 /etc/ethers 的一個名稱,也可以為一個數字(請參閱 ethers(3N) 以了解數字格式)。
ether src ehost
如果以太網源地址為  ehost,那么為 True。
ether host ehost
如果以太網源地址或目標地址為  ehost,那么為 True。
gateway host
如果信息包使用 host 作為網關,那么為 True。例如,以太網源地址或目標地址為 host,但是 IP 源和 IP 目標都不是 host。host 必須為名稱,並且機器的 host-name-to-IP-address 解析機制(主機名文件、DNS 和 NIS 等)和機器的 host-name-to-Ethernet-address 解析機制(/etc/ethers 等)都必須找到它。等效的表達式為 ether host ehost,而不是可以結合 host/ehost 的名稱或數字使用的 host host。此時在支持 IPv6 的配置中語法不起作用。
dst net net
如果信息包的 IPv4/v6 目標地址有一個網絡號 net,那么為 True。
src net net
如果信息包的 IPv4/v6 源地址有一個網絡號 net,那么為 True。
net net
如果信息包的 IPv4/v6 源地址或目標地址有一個網絡號 net,那么為 True。
net net mask netmask
如果 IP 地址與帶有特定網絡掩碼的 net 相匹配,那么為 True。這可能受到 src 或 dst 限定。此語法對於 IPv6 網絡無效。
net net/len
如果 IPv4/v6 地址與帶有網絡掩碼長度位范圍的 net 相匹配,那么為 True。可能受到 src 或 dst 限定。
dst port port
如果信息包為 ip/tcp、ip/udp、ip6/tcp 或 ip6/udp,並具有目標端口值 port,那么為 True。port 可以為  /etc/services 中使用的數字或名稱(請參閱 tcp(4P) 和 udp(4P))。如果使用了名稱,那么檢查端口號和協議。如果使用了數字或者有歧義的名稱,那么將只檢查端口號(例如,dst port 513 將同時顯示 tcp/login 流量和 udp/who 流量,並且端口域將同時顯示 tcp/domain 和 udp/domain 流量)。
src port port
如果信息包具有源端口值 port,那么為 True。
port port
如果信息包的源或目標端口為 port,那么為 True。以上任何 port 表達式都可以前置關鍵字 tcp 或 udp,如 tcp src port port 中所示,tcp src port port 僅與源端口為 port 的 tcp 信息包相匹配。
less length
如果信息包的長度小於或等於 length,那么為 True。這等價於 len <= length。
greater length
如果信息包的長度大於或等於 length,那么為 True。這等價於:len >= length。
ip proto protocol
如果信息包為 protocol 類型協議的 IP 信息包,那么為 True。protocol 可以為一個數字或以下名稱之一:icmp、icmp6、igmp、igrp、pim、ah、esp、vrrp、udp 或 tcp。請注意,標識 tcp、udp 和 icmp 還是關鍵字,必須通過反斜杠(\)(在 C-shell 中為 \\)進行轉義。請注意,此原語不追蹤協議標題鏈。
ip6 proto protocol
如果信息包為 protocol 類型協議的 IPv6 信息包,那么為 True。請注意,此原語不追蹤協議標題鏈。
ip6 protochain protocol
如果信息包為 IPv6 信息包,並包含協議標題(在其協議標題鏈中帶有類型協議),那么為 True。例如,ip6 protochain 6 與任何 IPv6 信息包(在協議標題鏈中帶有 TCP 協議標題)都相匹配。在 IPv6 標題和 TCP 標題之間,信息包可能包含這幾個標題,例如,認證標題、路由標題或逐跳點選項標題。此原語發射的伯克利數據包過濾器 (BPF) 代碼很復雜, tcpdump中的 BPF 優化器代碼無法對其進行優化,所以它速度有些慢。
ip protochain protocol
等價於 ip6 protochain protocol。但是,此項用於 IPv4。
ether broadcast
如果信息包是以太網廣播信息包,那么為 True。ether 關鍵字為可選。
ip broadcast
如果信息包是 IPv4 廣播信息包,那么為 True。它檢查全 0 和全 1 的廣播約定,並查找已在其上完成捕獲的接口上的子網掩碼。

如果已在其中完成了捕獲的接口的子網掩碼不可用,例如,因為已在其中完成了捕獲的接口沒有網絡掩碼,那么無法正確執行此檢查。

ether multicast
如果信息包是以太網多點廣播信息包,那么為 True。ether 關鍵字為可選。它是  ether[0] & 1 != 0 的縮略語。
ip multicast
如果信息包是 IP 多點廣播信息包,那么為 True。
ip6 multicast
如果信息包是 IPv6 多點廣播信息包,那么為 True。
ether proto protocol
如果信息包為 ether 類型協議,那么為 True。protocol 可以為數字或以下名稱之一:ip、ip6、arp、rarp、atalk、aarp、decnet、sca、lat、mopdl、moprc、iso、stp、ipx 或 netbeui。請注意,這些標識也是關鍵字,並且必須通過反斜杠(\)進行轉義。
[在 FDDI(例如,“fddi protocol arp”)、令牌環(例如,“tr protocol arp”)和 IEEE 802.11 無線 LAN(例如,“wlan protocol arp”)的情況下,對於大部分這些協議,協議標識來源於 802.2 邏輯鏈路控制(LLC)標題,此標題通常位於 FDDI、令牌環或 802.11 標題的頂層。為 FDDI、令牌環或 802.11 上的大多數協議標識進行過濾時,對於封裝的以太網,tcpdump 僅檢查 LLC 標題的協議標識字段是否是帶有組織單元標識(OUI)0x000000 的所謂 SNAP 格式;它不檢查信息包是否是帶有 OUI 0x000000 的 SNAP 格式。異常如下:
iso
tcpdump 檢查 LLC 標題的 DSAP(目標服務訪問點)和 SSAP(源服務訪問點)字段。
stp and netbeui
tcpdump 檢查 LLC 標題的 DSAP。
atalk
tcpdump 檢查帶有 OUI 0x080007 和 AppleTalk etype 的 SNAP 格式的信息包。
在以太網的情況下, tcpdump 檢查大多數這些協議的以太網類型字段。異常如下:
iso、sap 和 netbeui
tcpdump 將檢查 802.3 框架,然后檢查 LLC 標題,這些操作與對 FDDI、令牌環和 802.11 的操作相同。
atalk
tcpdump 將檢查以太網框架中的 AppleTalk etype 和 SNAP 格式的信息包,這些操作與對 FDDI、令牌環和 802.11 的操作相同。
aarp
tcpdump 將要么檢查以太網框架中的 AppleTalk ARP etype,要么檢查帶有 OUI 0x000000 的 802.2 SNAP 框架中的 AppleTalk ARP etype;
ipx
tcpdump 將檢查以太網框架中的 IPX etype、LLC 標題中的 IPX DSAP、IPX 的不帶 LLC 標題的 802.3 封裝以及 SNAP 框架中的 IPX etype。
decnet src host
如果 DECNET 源地址為 host,它可能是格式 10.123 的地址,也可能是 DECNET 主機名。[DECNET 主機名支持只在經過配置以運行 DECNET 的 Ultrix 系統上可用。]
decnet dst host
如果 DECNET 目標地址為 host,那么為 True。
decnet host host
如果 DECNET 源地址或目標地址為 host,那么為 True。
ifname interface
如果信息包記錄為來自指定接口,那么為 True。
on interface
與 ifname 修飾符同義。
rnr num
如果信息包記錄為與指定 PF 規則號碼相匹配,那么為 True(僅適用於 OpenBSD 的 pf(4) 記錄的信息包)。
rulenum num
與 rnr 修飾符同義。
reason code
如果用指定 PF 原因碼來記錄信息包,那么為 True。已知的代碼為:match、bad-offset、fragment、short、normalize 和 memory(僅適用於 OpenBSD 的  pf(4) 記錄的信息包)。
action act
如果在記錄信息包時 PF 采取指定操作,那么為 True。已知的操作為:傳輸和阻塞(僅適用於 OpenBSD 的  pf(4) 記錄的信息包)
netbeui
ip、ip6、arp、rarp、atalk、aarp、decnet、iso、stp 和 ipx。

縮略語:

ether proto p
復制其中  p 是上述協議之一。

lat、moprc 和 mopdl

縮略語:
ether proto p
復制其中  p 是上述協議之一。請注意,tcpdump 當前不知道如何對這些協議進行語法分析。
vlan [ vlan_id]
如果包是 IEEE 802.1Q VLAN 包,那么為 True。如果指定了  vlan_id,那么僅具有所指定 vlan_id 的包才為 True。請注意,如果假定包是 VLAN 包,在表達式中遇到的第一個 vlan 關鍵字更改了表達式其余部分的譯碼偏移量。
tcp、udp 和 icmp
縮略語:
ip proto p or ip6 proto p
復制其中  p 是上述協議之一。
iso proto protocol
如果信息包是 protocol 類型協議的 OSI 信息包,那么為 True。protocol 可以為數字或以下名稱之一:clnp、esis 或 isis。
clnp、esis 和 isis
縮略語:
  • iso proto p
其中  p 是上述協議之一。
l1、l2、iih、lsp、snp、csnp 和 psnp
IS-IS PDU 類型的縮略語。
vpi  n
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並帶有虛路徑標識  n,那么為 True。
vci  n
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並帶有虛擬信道標識  n,那么為 True。
lane
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且是 ATM LANE 信息包,那么為 True。請注意,如果假定信息包是 LANE 模擬以太網信息包,或者是 LANE LE Control 信息包,那么在表達式中遇到的第一個 lane 關鍵字更改了在表達式其余部分中完成的測試。如果未指定 lane,那么在假定信息包是封裝 LLC 的信息包的情況下完成測試。
llc
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且是封裝 LLC 的信息包,那么為 True。
oamf4s
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且是段 OAM F4 流單元(VPI=0 和 VCI=3),那么為 True。
oamf4e
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且是端到端 OAM F4 流單元(VPI=0 和 VCI=4),那么為 True。
oamf4
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且是段或端到端 OAM F4 流單元(VPI=0 和(VCI=3 | VCI=4)),那么為 True。
oam
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且是段或端到端 OAM F4 流單元(VPI=0 和(VCI=3 | VCI=4)),那么為 True。
metac
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且位於元信令環路(VPI=0 和 VCI=1)上,那么為 True。
bcc
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且位於廣播信令環路(VPI=0 和 VCI=2)上,那么為 True。
sc
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且位於信令環路(VPI=0 和 VCI=5)上,那么為 True。
ilmic
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並且位於 ILMI 環路(VPI=0 和 VCI=16)上,那么為 True。
connectmsg
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並位於信令環路,而且是 Q.2931 設置、呼叫進程、連接、連接 ACK、發布或發布完成消息,那么為 True。
metaconnect
如果信息包是用於 Solaris 上 SunATM 的 ATM 信息包,並位於元信令環路,而且是 Q.2931 設置、呼叫進程、連接、發布或發布完成消息,那么為 True。
expr relop expr
如果關系成立,其中 relop 是 >、<、>=、<=、= 和 != 中的一個,expr 是算術表達式,此算術表達式由整數常量(用標准 C 語法表示)、常規二目運算符 [+、-、*、/、& 和 |]、長度運算符和特殊信息包數據存取器組成,那么為 true。要訪問信息包里的數據,請使用以下語法:
proto [ expr : size ]
復制Proto 是 ether、fddi、tr、wlan、ppp、slip、link、ip、arp、rarp、tcp、udp、icmp 或 ip6 其中之一,並且表明索引操作的協議層。(ether、fddi、wlan、tr、ppp、slip 和 link 都稱為鏈接層。)請注意,tcp、udp 和其他上層協議類型僅適用於 IPv4,而不是 IPv6(以后將對其進行修訂)。與表明的協議層相關的字節偏移量由 expr 給定。size 為可選,它表明興趣字段里的字節數;它可以為 1、2 或 4,缺省值為 1。由關鍵字 len 表示的長度運算符給定信息包的長度。

例如,ether[0] & 1 != 0 捕獲所有多點廣播流量。表達式 ip[0] & 0xf !=5 捕獲帶有選項的所有 IP 信息包。表達式 ip[6:2] & 0x1fff = 0 僅捕獲未分段的信息包和分段信息包的片段零。此檢查隱式適用於 tcp 和 udp 索引操作。例如,tcp[0] 始終表示 TCP 標題的第一個字節,而從不表示插入片段的第一個字節。

某些偏移量和字段值可以表達為名稱而不是數字值。以下協議標題字段偏移量可用:icmptype(ICMP 類型字段)、icmpcode(ICMP 代碼字段)和 tcpflags(TCP 標志字段)。

以下 ICMP 類型字段值可用:icmp-echoreply、icmp-unreach、icmp-sourcequench、icmp-redirect、icmp-echo、icmp-routeradvert、 icmp-routersolicit、icmp-timxceed、icmp-paramprob、icmp-tstamp、icmp-tstampreply、icmp-ireq、icmp-ireqreply、icmp-maskreq 和 icmp-maskreply。

以下 TCP 標志字段值可用:tcp-fin、tcp-syn、tcp-rst、tcp-push、tcp-ack 和 tcp-urg。

組合原語

用括號括起的原語組和運算符組(括號特定於 Shell 並且必須轉義)。
          非(“!”或“not”)。

          並置(“&&”或“and”)。
          或(“||”或“or”)。
復制“非”具有最高優先順序。“或”和“並置”具有相同的優先順序,並按由左向右的順序相連。請注意,現在需要“並置”的“顯式”和“標記”,而不需要“並列”。

如果給出了不帶關鍵字的標識,那么假定使用最新的關鍵字。例如,not host vs and ace 是 not host vs and host ace 的縮略語,不應與 not ( host vs or ace ) 混淆。

表達式自變量可作為單自變量或多自變量(選擇兩者中較方便的一種)傳遞給 tcpdump。通常,如果表達式包含 Shell 元字符,將其作為單個的、加引號的自變量來傳遞會更容易。多自變量在語法分析之前以空格並置。

標志

項目 描述
-a 嘗試將網絡地址和廣播地址轉換為名稱。
-A 以 ASCII 顯示每個信息包(去掉它的鏈接級別的頭)。方便捕獲 Web 頁面。
-B buffer_size 指示緩沖區大小(以千字節計)。將接受較小的值。如果緩沖區大小小於 BPF 設置的最低值,那么將忽略實際緩沖區大小並使用伯克利數據包過濾器 (BPF) 設置的值。如果未指定 -B 選項,那么緩沖區大小缺省為 32,768。
-c 在接收 Count 信息包后退出。
-C file_size 在將原始信息包寫入 savefile 之前,檢查文件當前是否大於 file_size,如果確實如此,那么關閉當前的 savefile 並打開新的 savefile。第一個savefile 之后的 savefile 擁有使用 -w 標志指定的名稱,名稱后帶有從 2 開始並連續遞增的數字。file_size 的單元以百萬字節為單位(1,000,000 字節,而不是 1,048,576 字節)。
-d 將編譯過的信息包匹配代碼轉儲至標准輸出,然后停止。
-D 顯示系統上可用、並且 tcpdump 可以在其中捕獲信息包的網絡接口的列表。顯示每個網絡接口的數字和接口名稱(可能帶有此接口的文本描述)。接口名稱或數字可以提供給 -i 標志以指定在其上進行捕獲的接口。
-dd 將信息包匹配代碼作為 C 程序片段進行轉儲。
-ddd 將信息包匹配代碼作為十進制數進行轉儲(添加在某個計數前面)。
-e 在每一轉儲行上顯示鏈接級別標題。
-E addr 使用 spi@ipaddr algo:secret 來解密 IPsec ESP 信息包,該信息包的地址將寫入 addr,且該信息包將包含安全參數索引值 spi。可以用逗號或換行分隔來重復此組合。
注:現在支持設置 IPv4 ESP 信息包的 secret。

算法可以為 des-cbc3des-cbcblowfish-cbcrc3-cbccast128-cbc 或沒有算法。缺省值為 des-cbc。如果安裝了 libcrypto並且它在 LIBPATH 中,將只顯示解密信息包的功能。

secret 為 ESP 密鑰的 ASCII 文本。如果在前面添加 0x,那么將讀取十六進制值。

此選項采用 RFC2406 ESP,而不是 RFC1827 ESP。此選項僅用於調試用途,使用此選項時不鼓勵帶有真密鑰。通過 ps(1) 和其他手段在命令行上顯示 IPsec 密鑰,您可以使他人看見密鑰。

除了上述語法以外,tcpdump 命令可以使用語法文件名來讀取所指定的文件。因為在接收到第一個 ESP 信息包時打開文件,因此還應該放棄可能已提供給 tcpdump 的任何特殊權限。

-f 以數字而非符號方式顯示外來 IPv4 地址。

通過使用在其上執行捕獲的接口的 IPv4 地址和網絡掩碼來完成外來 IPv4 地址的測試。如果該地址或網絡掩碼不可用,那么此選項不會正確發揮作用。

-F file 使用 file 作為過濾表達式的輸入。忽略了命令行上給出的其他表達式。
-G rotate_seconds 按每 rotate_seconds 秒一次的頻率循環使用通過 -w 選項指定的轉儲文件。如果與 -C 選項配合使用,那么文件名格式將為 file<count>,只要最先達到 size 變量中指定的值。否則,tcpdump 命令會在 rotate_seconds 變量中指定的時長值過去后循環使用該文件。
-i interface  interface 上偵聽。如果未指定,tcpdump 將搜索系統 interface 列表以查找最低編號和配置的 interface(回送除外)。通過選擇最早的匹配來中斷間距。

通過 -D 標志顯示的 interface 數字可以用作 interface 自變量。

-K 在執行硬件 TCP 校驗和計算的接口上跳過 TCP 校驗和驗證。如果未使用該標志,那么所有出站 TCP 校驗和將標記為不正確。
-l 緩存標准輸出行。如果您要在捕獲數據時查看數據,它很有用。例如:
tcpdump -l | tee dat
    或 tcpdump -l   >   dat & tail -f dat
復制
-L 列出接口和出口的已知的數據鏈路類型。
-m module  module 文件裝入 SMI MIB 模塊定義。可多次使用此選項來將多個 MIB 模塊裝入 tcpdump。
-M 通過使用 TCP-MD5 選項(請求注釋 (RFC) 2385),使用 secret 作為用於驗證 TCP 分段中 digest 的共享 secret。
-n 阻止將主機地址和端口號轉換為名稱。
-N 省略顯示主機名的域名限定。例如,tcpdump 將顯示 nic 而不是 nic.ddn.mil
-O 使 tcpdump 不運行信息包匹配代碼優化器。這僅在懷疑優化器中存在錯誤時有用。
-p 停止使接口處於混合方式。請注意,由於其他某種原因,接口可能處於混合方式;因此,-p 無法用作 ether host {local-hw-addr} 或 ether broadcast 的縮略語。
-q 快速輸出。因為顯示更少協議信息,所以輸出行更短。
-Q 對已記錄的數據啟用已過濾的系統跟蹤。必須運行 AIX® 跟蹤守護程序才能記錄與網絡通信子系統相關的選定系統事件。
-r file  file(用 -w 選項創建)中讀取信息包。如果 file 是“-”,那么使用標准輸入。
-R 假定 ESP/AH 信息包基於原有的規范。

(RFC1825 至 RFC1829)。如果指定了此標志,那么 tcpdump 不會顯示阻止重放字段。因為在 ESP/AH 規范中沒有協議版本字段,所以tcpdump 無法演繹 ESP/AH 協議版本。

-S 顯示絕對而非相對的 TCP 序號。
-s snaplen 從每一信息包捕獲 snaplen 數據字節,而不是缺省值 68。68 字節對 IP、ICMP、TCP 和 UDP 而言已足夠,但有可能截斷名稱服務器和 NFS 信息包的協議信息(請參閱以下內容)。因為有限快照而被截斷的信息包在輸出中顯示時帶有 [|proto],其中 proto 是發生截斷的協議級別的名稱。請注意,采用更大的快照將增加它處理信息包的時間,並有效減少信息包緩沖的數量。這可能會導致丟失信息包。應將 snaplen 限制為將捕獲您感興趣的協議信息的最小數目。將 snaplen 設置為 0 則意味着使用必需長度來捕獲所有信息包。
-T 強制使用指定類型解釋 expression 選擇的信息包。當前已知的類型有 cnfp(Cisco 網絡流量協議)、rpc(遠程過程調用)、rtp(實時應用協議)、rtcp(實時應用控制協議)、snmp(簡單網絡管理協議)、tftp(次要文件傳輸協議)、vat(可視音頻工具)、和 wb(分布式白板)。
-t 在每一轉儲行上省略時間戳記顯示。
-tt 在每一轉儲行上顯示未格式化的時間戳記。
-ttt 在每一轉儲行上顯示當前行和先前行之間的變化量(以微秒為單位)。
-tttt 在每一轉儲行上顯示前面帶有日期的缺省格式的時間戳記。
-ttttt 在每一轉儲行上顯示當前行和第一行之間的變化量(以微秒為單位)。
-u 顯示未譯碼的 NFS 句柄。
-U 通過 -w 選項(例如,“packet-buffered”)保存輸出。保存了每個信息包之后,就會將它寫入輸出文件,而不是僅當輸出緩沖區填滿時才將它寫入。
-v 指定稍微詳細些的輸出。例如,顯示 IP 信息包中的生存時間、標識、總長度和選項。還啟用其他信息包完整性檢查,例如,驗證 IP 和 ICMP 標題校驗和。
-vv 甚至比 -v 更詳細的輸出。例如,從 NFS 顯示其他字段,並對應答包進行完全譯碼。
-vvv 甚至比 -vv 更詳細的輸出。例如,完整顯示 Telnet SB 至 SE 選項。帶有 -X 的 Telnet 選項也以十六進制顯示。
-V 設置套接字的套接字調試標志(SO_DEBUG 套接字選項)和跟蹤級別。此標志必須與 -Q 標志一起使用。
-w file 將原始的信息包寫入 file,而不對其進行語法分析,也不將其顯示出來。以后可以用 -r 標志顯示它們。如果 File 為“-”,那么使用標准輸出。
-x 以十六進制顯示每個信息包(減去其鏈接級別標題)。將顯示整個信息包或者 snaplen 字節這兩者當中的較小者。請注意,這是整個鏈接層信息包,因此對於填充的鏈接層(例如,以太網),當更高層的信息包短於必需的填充時,還將顯示填充字節。
-xx 以十六進制顯示每個信息包,包括其鏈接級別標題。
-X 以十六進制和 ASCII 顯示每個信息包(減去其鏈接級別標題)。用於分析新協議時它非常方便。
-y datalinktype 設置在將信息包捕獲到 datalinktype 時要使用的數據鏈路類型。
-z command  -C 或 -G 選項結合使用時,會導致 tcpdump 命令在 savefile 上運行指定的命令。例如,指定 -z gzip 或 -z bzip2 會導致使用 gzip 或bzip2 命令壓縮每個 savefile
注:tcpdump 命令使用最低優先級將 -z 命令與捕獲進程並行運行,以便不干擾捕獲進程。
-Z user 由所指定的具有系統特權的用戶運行 tcpdump 命令。

參數

expressions
選擇要轉儲的信息包。如果提供了表達式,那么只會對表達式為  true 的信息包進行轉儲;否則,將轉儲網絡中的所有信息包。
表達式由一個或多個原語構成。原語通常由前面帶有一個或多個限定符的標識(名稱或數字)構成。存在三種不同的限定符:
  • type 限定符顯示標識名稱或數字所指的原語類型。可能的類型為 host、net 和 port。例如,“host foo”、“net 128.3”和“port 20”。如果沒有類型限定符,那么將采用 host。
  • dir 限定符指定到標識和/或來自標識的特定傳輸方向。可能的方向為 src、dst、src 或 dst 和 src 以及 dst。如果沒有 dir 限定符,那么將采用 src 或 dst。對於某些鏈接層(例如,SLIP)和某些其他設備類型,入站和出站限定符可以用來指定希望的方向。
  • proto 限定符限制與特定協議相匹配。可能的協議為 fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp 和 udp。如果沒有 proto 限定符,那么將采用與該類型一致的所有協議。

fddi 是 ether 的別名。解析器將其理解為:“在指定網絡接口上使用的數據鏈路級”。FDDI 頭部分包含類似以太網的源地址和目標地址,並經常包含類似以太網的信息包類型,因此可以在這些 FDDI 字段上進行過濾,此操作與對類似以太網字段的操作相同。FDDI 頭部分還包含其他字段,但是無法在過濾表達式中對其進行命名。

 fddi 類似,tr 和 wlan 是 ether 的別名。上一段有關 FDDI 頭部分的論述還適用於令牌環和 802.11 無線 LAN 頭部分。對於 802.11 頭部分,目標地址為 DA 字段,源地址為 SA 字段;不測試 BSSID、RA 和 TA 字段。

除以上所述之外,還有一些特殊的“原語”關鍵字不遵循這種模式:網關、廣播、小於、大於和算術表達式。所有這些關鍵字描述如下。

通過使用單詞 andor 和 not 組合原語來構建更復雜的過濾表達式。

環境變量

必須設置 LIBPATH 環境變量,或者  libcrypto 庫應該位於 -E 標志的 /usr/lib 以起作用。例如:
ksh$ LIBPATH=/opt/freeware/lib tcpdump -E"algo:secret"
復制

退出狀態

項目 描述
0 成功。
非零 錯誤。

安全性

從網絡接口讀取信息包需要對 /dev/bpf* 的讀訪問權,通常僅限於 root 用戶。從文件讀取信息包除了文件讀許可權之外,不需要任何特殊權限。

RBAC 用戶和可信 AIX 用戶注意:此命令可以執行特權操作。只有特權用戶才能運行特權操作。有關權限與特權的更多信息,請參閱安全性中的『特權命令數據庫』。要獲取與此命令相關聯的特權和權限的列表,請參閱 lssecattr 命令或 getcmdattr 子命令。

示例

  1. 要顯示從日落起到達或出發的所有包,請輸入:
    tcpdump host sundown
    復制
  2. 要顯示 helios 與 hot 或 ace 之間的流量,請輸入:
    tcpdump host helios and \( hot or ace \)
    復制
  3. 要顯示 ace 與除了 helios 之外任何主機之間的所有 IP 包,請輸入:
    tcpdump ip host ace and not helios
    復制
  4. 要顯示本地主機與伯克利的主機之間的所有流量,請輸入:
    tcpdump net ucb-ether
    復制
  5. 要顯示通過因特網網關 snup 的所有 ftp 流量,請輸入:
    tcpdump 'gateway snup and (port ftp or ftp-data)'
    復制
    注:將表達式用引號引起來,以防止 shell 誤解括號。
  6. 要顯示既不是來自本地主機也不是導向本地主機的流量(如果您的網關指向其他網絡,該網絡決不能連到您的本地網絡上),請輸入:
    tcpdump ip and not net localnet
    復制
  7. 要顯示涉及到非本地主機的每個 TCP 對話的開始和結束包(SYN 和 FIN 包),請輸入:
    tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and d dst net localnet'
    復制
  8. 要顯示通過網關 snup 發送的長度超過 576 字節的 IP 包,請輸入:
    tcpdump 'gateway snup and ip[2:2] > 576'
    復制
  9. 要顯示不是通過以太網廣播或多點廣播信息包發送的 IP 廣播或多點廣播包,請輸入:
    tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
    復制
  10. 要顯示不是回傳請求/答復的所有 ICMP 包(比如,不是 ping 包),請輸入:
    tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-e choreply'
    復制

標准錯誤

所有的錯誤和警告都發送到 stderr。

限制

跟蹤信息包時,如果跨越了夏令時變更,那么提供的時間戳記會有偏差(將忽略時間變更)。

在除了令牌環頭部分中的那些字段之外的字段中的過濾表達式會錯誤地處理源路由令牌環信息包。

在 802.11 頭部分中的那些字段之外的字段中的過濾表達式會錯誤地處理帶有 To DS 和 From DS 集合的 802.11 數據包。

ip6 proto 應該追蹤標題鏈,但在此時它未進行此操作。為此工作情況提供了 ip6 protochain。

傳輸層頭部分的算術表達式類似於 tcp[0],對 IPv6 信息包不起作用。它僅查看 IPv4 信息包。

包跟蹤在 WPAR 環境中不起作用,因為底層 BPF 驅動程序無法識別 WPAR。

文件

項目 描述
/usr/sbin/tcpdump tcpdump 命令的位置。
/usr/lib/libpcap.a  
/dev/bpf*  
/opt/freeware/lib/libcrypto.a(libcrypto.so) 可選


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM