other languages
TCPDUMP(8) | System Manager's Manual | TCPDUMP(8) |
NAME¶
tcpdump - 轉儲網路上的數據流總覽 (SYNOPSIS)¶
tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ]描述 (DESCRIPTION)¶
Tcpdump 列印出 在某個 網路界面 上, 匹配 布爾表達式 expression 的報文 的 報頭. 對於 SunOS 的 nit 或 bpf 界面: 要 運行 tcpdump , 你 必須 有 /dev/nit 或 /dev/bpf* 的 讀訪問 權限.選項 (OPTIONS)¶
- -a
- 試著 把 網路和廣播地址 轉換成 名稱.
- -c
- 當 收到 count 報文 後 退出.
- -d
- 把 編譯好的 報文匹配代碼 (packet-matching code) 翻譯成 可讀形式, 傳往 標準輸出, 然後退出.
- -dd
- 把 報文匹配代碼 (packet-matching code) 以 C 程式片斷 的 形式 輸出.
- -ddd
- 把 報文匹配代碼 (packet-matching code) 以 十進制數 形式 輸出 (前面 加上 總數).
- -e
- 顯示 鏈路層報頭.
- -f
- 以 數字形式 顯示 '外部的' 網際網路地址, 而不是 字符形式 (這個 選項 用來 繞開 腦殼壞光的 SUN 黃頁伺服器 的 問題 — 一般說來 當它 翻譯 外部網路 的 數字地址 時 會長期掛起).
- -F
- 把 file 的內容 用作 過濾表達式. 忽略 命令行 上 的 表達式.
- -i
- 監聽 interface. 如果 不指定 接口, tcpdump 在 系統 的 接口 清單 中, 尋找 號碼最小, 已經 配置好的 接口 (loopback 除外). 選中的時候 會 中斷 連接.
- -l
- 行緩沖 標準輸出.
可用於 捕捉 數據 的
同時 查看 數據. 例如,
- -n
- 不要把 地址 轉換成 名字 (指的是 主機地址, 端口號等)
- -N
- 不顯示 主機名字 中的 域名 部分. 例如, 如果 使用 這個 選項, tcpdump 只顯示 ``nic'', 而不是 ``nic.ddn.mil''.
- -O
- 禁止運行 報文匹配代碼 的 優化器. 這個選項 只有 當你 懷疑 優化器 有 bug 時 才有用.
- -p
- 禁止 把 接口 置成 promiscuous(雜湊) 模式. 注意, 接口 有可能 因 其他原因 而 處於 promiscuous 模式; 因此, '-p' 不能 作為 `ether host {local-hw-addr} 或 ether broadcast' 的 簡寫.
- -q
- 快速輸出. 顯示 較少的 協議信息, 輸出行 會 短一點點.
- -r
- 從 file 中 讀入 數據報 (檔案 是用 -w 選項 創建的). 如果 file 是 ``-'', 就從 標準輸入 讀入.
- -s
- 從每個 報文 中
截取 snaplen 字節的數據,
而不是 預設的 68
(如果是 SunOS 的 NIT,
最小值是 96). 68 個字節
適用於 IP, ICMP, TCP 和 UDP, 但是
有可能 截掉
名字伺服器 和 NFS 報文
的 協議 信息 (見下文).
輸出時 如果指定 ``[|
proto]'', tcpdump 可以 指出
那些 捕捉量過小 的
數據報, 這裏的 proto 是
截斷發生處 的 協議層
名稱. 注意, 採用
更大的 捕捉范圍 不但
增加了 處理 報文 的
時間, 而且 減少了
報文的 緩沖 數量,
可能 導致
報文的丟失. 你 應該
把 snaplen 設的 盡量小,
只要 能夠 容納 你
需要 的 協議信息
就可以了.
- -T
- 把 通過 "expression" 挑選出來的 報文 解釋成 指定的 type. 目前 已知 的 類型 有: rpc (遠程過程調用 Remote Procedure Call), rtp (實時應用協議 Real-Time Applications protocol), rtcp (實時應用控制協議 Real-Time Applications control protocol), vat (可視音頻工具 Visual Audio Tool), 和 wb (分布式白板 distributed White Board).
- -S
- 顯示 絕對的, 而不是 相對的 TCP 流序號.
- -t
- 禁止 顯示 時戳標誌.
- -tt
- 顯示 未格式化的 時戳標誌.
- -v
- (稍微多一點) 繁瑣的輸出. 例如, 顯示 IP 數據報 中的 生存周期 和 服務類型.
- -vv
- 更繁瑣的輸出. 例如, 顯示 NFS 應答報文 的 附加域.
- -w
- 把 原始報文 存進 file, 不做 分析 和 顯示. 它們 可以 以後 用 -r 選項 顯示. 如果 file 是 ``-'', 就 寫往 標準輸出.
- -x
- 以 16 進制數 形式 顯示 每一個 報文 (去掉鏈路層報頭後) . 可以 顯示 較小的 完整 報文, 否則 只 顯示 snaplen 個 字節 .
- expression
用來 選擇 要
轉儲 的 數據報. 如果
沒有 指定 expression , 就
轉儲 網路的 全部 報文.
否則, 只轉儲 相對 expression
為 `true' 的 數據報.
expression 由 一個或多個
原語 (primitive) 組成. 原語
通常 由 一個 標識 (id,
名稱或數字), 和 標識
前面的 一個或多個
修飾子(qualifier) 組成. 修飾子
有 三種 不同的類型:
作為 上述 的 補充,
有一些 特殊的 `原語'
關鍵字: gateway, broadcast, less,
greater 和 數學表達式.
它們 不同於
上面的模式, 這些 在
後面 有 敘述.
更復雜的
過濾器表達式 可以
通過 and, or 和 not 連接
原語 來 組建. 例如, `host foo and
not port ftp and not port ftp-data'.
為了少敲點鍵,
可以忽略 相同的
修飾子. 例如, `tcp dst port ftp or ftp-data or
domain' 實際上 就是 `tcp dst port ftp or tcp dst
port ftp-data or tcp dst port domain'.
允許的 原語 有:
作為
的 簡寫形式, 不應該 和
混淆. 表達式參數 可以 作為 單個 參數, 也可以 作為 復合參數 傳給 tcpdump, 後者 更方便 一些. 一般說來, 如果 表達式 包含 Shell 元字符(metacharacter), 傳遞 單個 括起來 的 參數 要 容易 一些. 復合參數 在 被解析前 用 空格 聯接 一起.
- type
- 類型修飾子 指出
標識名稱 或 標識數字
代表 什麼
類型的東西.
可以使用的 類型 有
host, net 和 port. 例如, `host
foo', `net 128.3', `port 20'. 如果 不指定
類型修飾子, 就使用
預設的 host .
- dir
- 方向修飾子 指出 相對於 標識 的 傳輸方向 (數據是 傳入還是傳出 標識). 可以使用的 方向 有 src, dst, src or dst 和 src and dst. 例如, `src foo', `dst net 128.3', `src or dst port ftp-data'. 如果 不指定 方向修飾子, 就使用 預設的 src or dst . 對於 `null' 鏈路層 (就是說 像 slip 之類的 點到點 協議), 用 inbound 和 outbound 修飾子 指定 所需的 傳輸方向.
- proto
- 協議修飾子 要求 匹配 指定的協議. 可以使用的 協議 有: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp 和 udp. 例如, `ether src foo', `arp net 128.3', `tcp port 21'. 如果 不指定 協議修飾子, 就使用 所有 符合 類型 的 協議. 例如, `src foo' 指 `(ip 或 arp 或 rarp) src foo' (注意後者不符合語法), `net bar' 指 `(ip 或 arp 或 rarp) net bar', `port 53' 指 `(tcp 或 udp) port 53'.
- dst host host
- 如果 報文中 IP 的 目的地址域 是 host, 則 邏輯 為 真. host 既可以 是 地址, 也可以 是 主機名.
- src host host
- 如果 報文中 IP 的 源地址域 是 host, 則 邏輯 為 真.
- host host
- 如果 報文中 IP 的
源地址域 或者
目的地址域 是 host, 則
邏輯 為 真. 上面
所有的 host 表達式
都可以 加上 ip, arp, 或
rarp 關鍵字 做 前綴,
就像:
ip host host
它等價於:
ether proto \ip and host host
如果 host 是 擁有 多個 IP 地址 的 主機名, 它的 每個地址 都會 被查驗.
- ether dst ehost
- 如果 報文的 以太目的地址 是 ehost, 則 邏輯 為 真. Ehost 既可以是 名字 (/etc/ethers 裏有), 也可以是 數字 (有關 數字格式 另見 ethers(3N) ).
- ether src ehost
- 如果 報文的 以太源地址 是 ehost, 則 邏輯 為 真.
- ether host ehost
- 如果 報文的 以太源地址 或 以太目的地址 是 ehost, 則 邏輯 為 真.
- gateway host
- 如果 報文 把 host
當做 網關, 則 邏輯 為
真. 也就是說, 報文的
以太源或目的地址 是
host, 但是 IP 的 源目地址
都不是 host. host 必須
是個 主機名, 而且
必須 存在 /etc/hosts 和 /etc/ethers
中.
(一個等價的表達式是
ether host ehost and not host host
對於 host / ehost, 它既可以是 名字, 也可以是 數字.)
- dst net net
- 如果 報文的 IP 目的地址 屬於 網路號 net, 則 邏輯 為 真. net 既可以 是 名字 (存在 /etc/networks 中), 也可以是 網路號. (詳見 networks(4)).
- src net net
- 如果 報文的 IP 源地址 屬於 網路號 net, 則 邏輯 為 真.
- net net
- 如果 報文的 IP 源地址 或 目的地址 屬於 網路號 net, 則 邏輯 為 真.
- net net mask mask
- 如果 IP 地址 匹配 指定 網路掩碼(netmask) 的 net, 則 邏輯 為 真. 本原語 可以用 src 或 dst 修飾.
- net net/len
- 如果 IP 地址 匹配 指定 網路掩碼 的 net, 則 邏輯 為 真, 掩碼 的 有效位寬 為 len. 本原語 可以用 src 或 dst 修飾.
- dst port port
- 如果 報文 是 ip/tcp 或 ip/udp, 並且 目的端口 是 port, 則 邏輯 為 真. port 是一個 數字, 也可以是 /etc/services 中 說明過的 名字 (參看 tcp(4P) 和 udp(4P)). 如果 使用 名字, 則 檢查 端口號 和 協議. 如果 使用 數字, 或者 有二義的名字, 則 只檢查 端口號 (例如, dst port 513 將顯示 tcp/login 的數據 和 udp/who 的數據, 而 port domain 將顯示 tcp/domain 和 udp/domain 的數據).
- src port port
- 如果 報文 的 源端口號 是 port, 則 邏輯 為 真.
- port port
- 如果 報文 的
源端口 或 目的端口
是 port, 則 邏輯 為 真.
上述的 任意一個
端口表達式 都可以 用
關鍵字 tcp 或 udp 做
前綴, 就像:
tcp src port port
它 只匹配 源端口 是 port 的 TCP 報文.
- less length
- 如果 報文 的 長度
小於等於 length, 則 邏輯
為 真. 它等同於:
len <= length.
- greater length
- 如果 報文 的 長度
大於等於 length, 則 邏輯
為 真. 它等同於:
len >= length.
- ip proto protocol
- 如果 報文 是 IP 數據報(參見 ip(4P)), 其 內容 的 協議類型 是 protocol, 則 邏輯 為 真. Protocol 可以是 數字, 也可以是 下列 名稱 中的 一個: icmp, igrp, udp, nd, 或 tcp. 注意 這些 標識符 tcp, udp, 和 icmp 也是 關鍵字, 所以 必須 用 反斜槓(\) 轉義, 在 C-shell 中 應該是 \\ .
- ether broadcast
- 如果 報文 是 以太廣播報文, 則 邏輯 為 真. 關鍵字 ether 是 可選的.
- ip broadcast
- 如果 報文 是 IP廣播報文, 則 邏輯 為 真. Tcpdump 檢查 全0 和 全1 廣播約定, 並且 檢查 本地 的 子網掩碼.
- ether multicast
- 如果 報文 是 以太多目傳送報文(multicast), 則 邏輯 為 真. 關鍵字 ether 是 可選的. 這實際上 是 ` ether[0] & 1 != 0' 的簡寫.
- ip multicast
- 如果 報文 是 IP多目傳送報文, 則 邏輯 為 真.
- ether proto protocol
- 如果 報文協議
屬於 以太類型 的
protocol, 則 邏輯 為 真.
Protocol 可以是 數字,
也可以是 名字, 如 ip,
arp, 或 rarp. 注意 這些
標識符 也是 關鍵字,
所以 必須 用 反斜槓(\)
轉義. [如果是 FDDI (例如, `
fddi protocol arp'), 協議 標識
來自 802.2
邏輯鏈路控制(LLC)報頭,
它 通常 位於 FDDI 報頭 的
頂層. 當 根據
協議標識 過濾 報文
時, Tcpdump 假設 所有的 FDDI
報文 含有 LLC 報頭, 而且
LLC 報頭 用的是 SNAP 格式.]
- decnet src host
- 如果 DECNET 的 源地址 是 host, 則 邏輯 為 真, 該 主機地址 的 形式 可能 是 ``10.123'', 或者是 DECNET 主機名. [只有 配置成 運行 DECNET 的 Ultrix 系統 支持 DECNET 主機名.]
- decnet dst host
- 如果 DECNET 的 目的地址 是 host, 則 邏輯 為 真.
- decnet host host
- 如果 DECNET 的 源地址 或 目的地址 是 host, 則 邏輯 為 真.
- ip, arp, rarp, decnet
- 是:
ether proto p
的 簡寫 形式, 其中 p 為 上述 協議 的 一種.
- lat, moprc, mopdl
- 是:
ether proto p
的 簡寫 形式, 其中 p 為 上述 協議 的 一種. 注意 tcpdump 目前 不知道 如何 分析 這些 協議.
- tcp, udp, icmp
- 是:
ip proto p
的 簡寫 形式, 其中 p 為 上述 協議 的 一種.
- expr relop expr
- 如果 這個 關系式
成立, 則 邏輯 為 真,
其中 relop 是 >, <, >=, <=, =, !=
之一, expr 是
數學表達式, 由
常整數(標準C語法形式),
普通的 二進制運算符
[+, -, *, /, &, |], 一個
長度運算符, 和
指定的
報文數據訪問算符
組成. 要 訪問 報文內
的 數據, 使用 下面的
語法:
proto [ expr : size ]
Proto 是 ether, fddi, ip, arp, rarp, tcp, udp, or icmp 之一, 同時 也指出了 下標 操作 的 協議層. expr 給出 字節單位 的 偏移量, 該 偏移量 相對於 指定的 協議層. Size 是 可選項, 指出 感興趣的 字節數; 它可以 是 1, 2, 4, 預設為 1 字節. 由 關鍵字 len 給出的 長度運算符 指明 報文 的 長度.
- 園括弧 括起來的 原語 和 操作符 (園括弧 在 Shell 中 有專用, 所以必須轉義).
- 取反操作 (`!' or `not').
- 連結操作 (`&&' or `and').
- 或操作 (`||' or `or').
not host vs and ace
作為
not host vs and host ace
的 簡寫形式, 不應該 和
not ( host vs or ace )
混淆. 表達式參數 可以 作為 單個 參數, 也可以 作為 復合參數 傳給 tcpdump, 後者 更方便 一些. 一般說來, 如果 表達式 包含 Shell 元字符(metacharacter), 傳遞 單個 括起來 的 參數 要 容易 一些. 復合參數 在 被解析前 用 空格 聯接 一起.
示例 (EXAMPLES)¶
顯示 所有 進出 sundown 的 報文:tcpdump host sundown
tcpdump host helios and \( hot or ace \)
tcpdump ip host ace and not helios
tcpdump net ucb-ether
tcpdump 'gateway snup and (port ftp or ftp-data)'
tcpdump ip and not net localnet
tcpdump 'tcp[13] & 3 != 0 and not src and dst net localnet'
tcpdump 'gateway snup and ip[2:2] > 576'
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
tcpdump 'icmp[0] != 8 and icmp[0] != 0"
輸出格式 (OUTPUT FORMAT)¶
tcpdump 的 輸出格式 取決於 協議. 下面的 描述 給出 大多數 格式 的 簡要說明 和 範例.O ctcp * A+6 S+49 I+6 3 (6)
arp who-has csam tell rtsg arp reply csam is-at CSAM
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:c4
RTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM
src > dst: flags data-seqno ack window urgent options
rtsg.1023 > csam.login: S 768512:768512(0) win 4096 <mss 1024> csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 <mss 1024> rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.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 urg 1 csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1
actinide.who > broadcast.who: udp 84
src > dst: id op? flags qtype qclass name (len)h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
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)
`*' 表明 設置了 權威回答(authoritative answer). 由於 沒有 回答記錄, 這裏就 不顯示 type, class 和 data. 其他 標誌 字符 可以 顯示為 `-' ( 沒有設置遞歸有效(RA)) 和 `|' (設置 消息截短(TC)). 如果 `問題' 部分 沒有 有效的 內容, 就 顯示 `[ nq]'. 注意 名字服務的 詢問和回答 一般說來 比較大, 68 字節的 snaplen 可能 無法 捕捉到 足夠的 報文內容. 如果 你 的確 在 研究 名字服務 的 情況, 可以 使用 -s 選項 增大 捕捉緩沖區. ` -s 128' 應該 效果 不錯了.
src.xid > dst.nfs: len op args src.nfs > dst.xid: reply stat len op resultssushi.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.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
number name 1.254 ether 16.1 icsd-net 1.254.110 ace
net.host.port 144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 jssmag.149.235 > icsd-net.2
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
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:4 (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 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002
(frag id:size@offset+) (frag id:size@offset)
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
hh:mm:ss.frac
另見 (SEE ALSO)¶
traffic(1C), nit(4P), bpf(4), pcap(3)作者 (AUTHORS)¶
Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. 當前 版本 可以 從 匿名ftp 獲得:BUGS¶
請把 臭蟲 報告 傳往 tcpdump@ee.lbl.gov. NIT 不允許 監視 你自己的 傳出數據, BPF 可以. 我們 建議 你 使用 後者. 應該 試著 重組 IP 分片, 至少可以 為 更高層的 協議 計算出 正確的 長度. 名字服務逆向詢問 轉儲的 不正確: 列印出 (空的)問題部分, 而實際上 詢問 放在了 回答部分. 有人 認為 這種 逆向詢問 本身就是 bug, 應該 修改 產生問題 的 程式, 而非 tcpdump. 蘋果 Ethertalk DDP 的 報文 應該 像 KIP DDP 的 報文 一樣 容易 轉儲, 事實 卻 不是 這樣. 即使 我們 有意 作點什麼 來 促銷 Ethertalk (我們沒有), LBL 也不允許 Ethertalk 出現在 它的 任何網路上, 所以 我們 沒辦法 測試 這些代碼. 如果 報文的 路徑上 出現 夏時制時間 變化, 可能 導致 時戳 混亂. (這個時間變化將忽略) 操作 FDDI 報頭的 過濾器表達式 假設 所有的 FDDI 報文 被封裝在 以太報文 中. 這對 IP, ARP 和 DECNET Phase IV 無疑是 正確的, 但對 某些 協議 如 ISO CLNS 不正確. 因此, 過濾器 有可能會 糊裏糊塗的 的 接收 一些 並不真正 匹配 過濾器表達式 的 報文.[中文版維護人]¶
徐明 <xuming@users.sourceforge.net>[中文版最新更新]¶
2003/05/13《中國Linux論壇man手冊頁翻譯計劃》¶
http://cmpp.linuxforum.net30 June 1997 |