Tcpdump 使用手冊
Tcpdump
SYNOPSIS( 概要)
tcpdump [ -ADeflnNqtvx ] [ -c count ]
? ?? ?? ?[ -i interface ] [ -r file ] [ -s snaplen ]
? ?? ?? ?[ -T type ] [ -w file ] [ expression ]
選項 (OPTIONS)
-A
Print each packet (minus its link level header) in ASCII.? Handy for capturing web pages
[ 應用] 在網關服務器中輸入:tcpdump –A src host 192.168.x.y
[
摘取
]17:10:56.934040 IP 192.168.x.y.icp > by2msg1231711.mixer.edge.messenger.live.com.msnp: . ack 4165501895 win 64719
E..(..@...qF.......+.X.G...v.H..P....]........
[
分析
]
以ASCII格式打印除鏈路層的頭部信息的包,這個選項更有益與web頁面的抓取.上面是我對源192.168.x.y包的抓取,一看就知道,它現在連接到MSN。
-e
每行都顯示鏈路層報頭.
每行都顯示鏈路層報頭.
[
應用
] tcpdump -e src host 192.168.x.y
[
摘取
]17:19:57.718466 00:14:22:d2:9e:d0 (oui Unknown) > 00:c0:9f:40:29:6a (oui Unknown), ethertype IPv4 (0x0800), length 60: 192.168.x.y.acp-conduit > 65.54.167.59.http: R 2561727994:2561727994(0) ack 425901151 win 0
[
分析
]
這是針對鏈路層包分析,看看是不是你想要的呢?
-c
當收到count個 報文 后 退出.
當收到count個 報文 后 退出.
[
應用
] tcpdump -e -c 2 src host 192.168.x.y
[
摘取
]
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:54:15.963937 IP 192.168.x.y.ridgeway2 > 218.93.16.107.http: F 1728282061:1728282061(0) ack 2139349129 win 65004
13:54:15.965416 IP 192.168.x.y.gwen-sonya > 218.93.16.107.http: S 3089588305:3089588305(0) win 65535 <mss 1460,nop,nop,sackOK>
2 packets captured
7 packets received by filter
0 packets dropped by kernel
[
分析
]
看到沒有,我只要抓取兩個匹配包,就OK了。?????
-D?? Print? the? list? of? the network interfaces available on the system and on which tcpdump can
???? capture packets.? For each network interface, a number and an interface name,? possibly? followed? by? a text description of the interface, is printed.? The interface name or the number
can be supplied to the -i flag to specify an interface on which to capture
[ 應用 ] tcpdump -D
[ 應用 ] tcpdump -D
[
摘取
]
1.eth0
2.eth1
3.eth2
4.any (Pseudo-device that captures on all interfaces)
5.lo
[
分析
]
打印可以被tcpdump抓取的接口名稱。可以提供給-i參數,EX:tcpdump –I eth1
-i
監聽interface接口. 如果不指定接口, tcpdump在系統的接口清單中, 尋找號碼最小, 已經配置好的接口(loopback 除外). 選中的時候會中斷連接.
監聽interface接口. 如果不指定接口, tcpdump在系統的接口清單中, 尋找號碼最小, 已經配置好的接口(loopback 除外). 選中的時候會中斷連接.
[
應用
] tcpdump –i eth0 ip src 192.168.x.y
[
摘取
]
14:01:15.700262 IP 218.83.12.11.32785 > ns-pd.online.sh.cn.domain:? 29083+ PTR? 20.152.83.218.in-addr.arpa. (44)
[
分析
]
抓取eth0接口的數據包
-f
用數字形式顯示 '外部的' 互聯網地址, 而不是字符形式 (如:tcpdump -f -i eth0 -c 4 src host 192.168.x.y)
-f
用數字形式顯示 '外部的' 互聯網地址, 而不是字符形式 (如:tcpdump -f -i eth0 -c 4 src host 192.168.x.y)
[
應用
]tcpdump -i eth1 –f
[
摘取
]
14:03:25.655826 IP 207.46.124.244.msnp > 218.83.12.11.kpop: P 259:847(588) ack 1 win 64158
[
分析
]
與前一個應用對比,你能發現在摘取中的互聯網地址都會以IP顯示,而不在有域名啦。。。
-l
行緩沖標準輸出. 可用于捕捉數據的同時查看數據. 例如,
-l
行緩沖標準輸出. 可用于捕捉數據的同時查看數據. 例如,
[
應用
]
tcpdump -i eth1 -f -l|tee tcpdump.log
[
摘取
]
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
14:11:57.582718
14:11:58.058394 802.1d config 81b6.00:1e:14:9f:f7:00.801a root 8000.00:04:80:78:c0:dd pathcost 19 age 1 max 20 hello 2 fdelay 15
[
分析
]
結合系統命令,使抓取分析數據更加靈活與強大,我愛這個功能…
-n
不把地址轉換成名字 (如主機地址, 端口號等)
-n
不把地址轉換成名字 (如主機地址, 端口號等)
[
應用
]
tcpdump -i eth0 src host 192.168.x.y -n
[
摘取
]14:17:30.686094 IP 192.168.x.y.10778 > 121.62.99.137.14808: UDP, length 1050
[ 分析 ] 抓取的數據包不會將數字地址轉換成名字
[ 分析 ] 抓取的數據包不會將數字地址轉換成名字
-N
不顯示主機名字中的域名部分
[
應用
]
tcpdump -i eth0 src host 192.168.x.y -n
[
摘取
]14:16:45.824513 IP 192.168.x.y.alias > by1msg3145607.msnp: . ack 1894015094 win 64827
[
分析
]
抓取的數據包中不會將域名的部分顯示,看by1msg3145607.msnp,典型是省略了很長一段的域名部分(msn的)
-q
快速輸出. 顯示較少的協議信息, 輸出行將短一點點.
-q
快速輸出. 顯示較少的協議信息, 輸出行將短一點點.
[
應用
]
tcpdump -i eth0 src host 192.168.x.y -q
[
摘取
]14:21:48.669851 IP 192.168.x.y.tgp > by1msg4082316.phx.gbl.msnp: tcp 0
[ 分析 ] 打印較短的協議,用與快速分析。
[ 分析 ] 打印較短的協議,用與快速分析。
-w
把原始報文存進file, 不分析也不顯示. 它們可以以后用 -r 選項顯示. 如果 file 是 “-'', 就寫到標準輸出.(如:tcpdump -e src host 192.168.x.y -w /tmp/tcpdump.log)
把原始報文存進file, 不分析也不顯示. 它們可以以后用 -r 選項顯示. 如果 file 是 “-'', 就寫到標準輸出.(如:tcpdump -e src host 192.168.x.y -w /tmp/tcpdump.log)
-r
從file中讀入數據報 (文件是用 -w 選項創建的). 如果 file 是 “-'', 就讀標準輸入. (如:tcpdump -e src host 192.168.x.y -r /tmp/tcpdump.log)
從file中讀入數據報 (文件是用 -w 選項創建的). 如果 file 是 “-'', 就讀標準輸入. (如:tcpdump -e src host 192.168.x.y -r /tmp/tcpdump.log)
[
分析
]
以上-w,-r,的作用是相反的,一個是將抓取的包寫入到指定文件,一個是根據上次寫入的文件來讀取分析。沒有上次的-w操作,-r是無法使用的,除非用”-”,不過如果你用more,cat是無法讀通這個文件的,不像用”|”,借助tee 可以為以后方便
-t
禁止顯示時戳標志.
-t
禁止顯示時戳標志.
[
應用
]
tcpdump -i eth0 src host 192.168.x.y -t
[
摘要
]
IP 192.168.x.y.sonardata > 218.93.16.107.http: . ack 1225435221 win 65535
IP 192.168.x.y.sonardata > 218.93.16.107.http: P 0:907(907) ack 1 win 65535
IP 192.168.x.y.sonardata > 218.93.16.107.http: . ack 208 win 65328
[
分析
]
看下面
-tt
顯示未格式化的時戳標志.
-tt
顯示未格式化的時戳標志.
[
應用
]
tcpdump -i eth0 src host 192.168.x.y -tt
[
摘要
]
1247207645.823506 IP 192.168.x.y.isis > 61.172.205.8.msnp: . ack 53 win 64309
1247207645.840496 IP 192.168.x.y.isis > 61.172.205.8.msnp: P 70:74(4) ack 123 win 64239
1247207645.881594 IP 192.168.x.y.isis > 61.172.205.8.msnp: P 74:122(48) ack 123 win 64239
[
分析
]-t
與-tt對比,一看就很清楚了,是時間顯示控制和時間格式控制
-v
(稍微多一點) 繁瑣的輸出. 例如, 顯示IP數據報中的生存周期和服務類型.
-vv
更繁瑣的輸出. 例如, 顯示NFS應答報文的附加域.
-x
以十六進制數形式顯示每一個報文 (去掉鏈路層報頭后) . 可以顯示較小的完整報文
-v
(稍微多一點) 繁瑣的輸出. 例如, 顯示IP數據報中的生存周期和服務類型.
-vv
更繁瑣的輸出. 例如, 顯示NFS應答報文的附加域.
-x
以十六進制數形式顯示每一個報文 (去掉鏈路層報頭后) . 可以顯示較小的完整報文
[
分析
]-v,-vv,-x
通過上面的敘述,我想大家試一下,一定就會很明白了,至與那個選項更適合大家,那就是看應用了,我想這些選項也夠大家用了吧!~反正夠我用了,呵呵!~
expression ( 表達式)
表達式是一個正則表達式,tcpdump利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網絡上所有的信息包將會被截獲。
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}

圖:Expression的構造
expression
由一個或多個原語 (primitive) 組成. 原語通常由一個標識(id,名稱或數字)和 標識 前面的一個或多個修飾字(qualifier) 組成. 修飾字有三種不同的類型:
(1)type
類型修飾字指出標識名稱或標識數字代表什么類型的東西. 可以使用的類型有host, net 和 port. 例如, `host foo', `net 128.3', `port 20'. 如果不指定類型修飾字, 就使用缺省的 host
(2)Direction
方向修飾字指出相對于標識的傳輸方向 (數據是傳入還是傳出標識). 可以使用的方向有 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修飾字指定所需的傳輸方向.
(3)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 or arp or rarp) src foo', `net bar' 指 `(ip or arp or rarp) net bar', `port 53' 指 `(tcp or udp) port 53'.
[`fddi' 實際上 是 `ether' 的 別名; 分析器把它們視為 ``用在指定網絡接口上的數據鏈路層.'' FDDI 報頭包含類似于以太協議的源目地址, 而且通常包含 類似于以太協議的報文類型, 因此你可以分析 FDDI 域, 就象分析以太協議一樣. FDDI報頭也包含其他域, 但是你不能在過濾器表達式里顯式描述.]
(1)type
類型修飾字指出標識名稱或標識數字代表什么類型的東西. 可以使用的類型有host, net 和 port. 例如, `host foo', `net 128.3', `port 20'. 如果不指定類型修飾字, 就使用缺省的 host
(2)Direction
方向修飾字指出相對于標識的傳輸方向 (數據是傳入還是傳出標識). 可以使用的方向有 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修飾字指定所需的傳輸方向.
(3)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 or arp or rarp) src foo', `net bar' 指 `(ip or arp or rarp) net bar', `port 53' 指 `(tcp or udp) port 53'.
[`fddi' 實際上 是 `ether' 的 別名; 分析器把它們視為 ``用在指定網絡接口上的數據鏈路層.'' FDDI 報頭包含類似于以太協議的源目地址, 而且通常包含 類似于以太協議的報文類型, 因此你可以分析 FDDI 域, 就象分析以太協議一樣. FDDI報頭也包含其他域, 但是你不能在過濾器表達式里顯式描述.]
作為上述的補充, 有一些特殊的 `原語' 關鍵字, 它們不同于上面的模式: 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'.
允許的 原語 有:
dst host host
如果報文中IP的目的地址域是 host, 則邏輯為真. host既可以是地址, 也可以是主機名.
src host host
如果報文中IP的源地址域 是 host, 則 邏輯為 真.
host host
如果報文中 IP 的 源地址域或者目的地址域是host, 則邏輯為真. 上面所有的 host 表達式 都可以加上 ip, arp, 或 rarp 關鍵字做前綴, 就象:
ip host host
如果host是擁有多個IP地址的主機名, 它的每個地址都會被查驗.
dst net net
如果報文的IP目的地址屬于網絡號net, 則邏輯為真.
src net net
如果 報文的 IP 源地址 屬于 網絡號 net, 則邏輯為真.
net net
如果報文的IP源地址或目的地址屬于網絡號 net, 則邏輯為真.
net net mask netmask (如net 192.168.1.0 mask 255.255.255.128)
如果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 報文.
更復雜的過濾器表達式 可以通過 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'.
允許的 原語 有:
dst host host
如果報文中IP的目的地址域是 host, 則邏輯為真. host既可以是地址, 也可以是主機名.
src host host
如果報文中IP的源地址域 是 host, 則 邏輯為 真.
host host
如果報文中 IP 的 源地址域或者目的地址域是host, 則邏輯為真. 上面所有的 host 表達式 都可以加上 ip, arp, 或 rarp 關鍵字做前綴, 就象:
ip host host
如果host是擁有多個IP地址的主機名, 它的每個地址都會被查驗.
dst net net
如果報文的IP目的地址屬于網絡號net, 則邏輯為真.
src net net
如果 報文的 IP 源地址 屬于 網絡號 net, 則邏輯為真.
net net
如果報文的IP源地址或目的地址屬于網絡號 net, 則邏輯為真.
net net mask netmask (如net 192.168.1.0 mask 255.255.255.128)
如果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.
原語可以用下述方法結合使用:
圓括弧括起來的原語和操作符(園括弧在Shell中有特定含義, 所以必須轉義).
取反操作 (`!' or `not').
連結操作 (`&&' or `and').
或操作 (`||' or `or').
取反操作有最高優先級. 或操作和連結操作有相同的優先級, 運算時從左到右結合. 注意連結操作需要顯式的and算符, 而不是并列放置.
如果給出標識符, 但沒給修飾符, 那么暗指最近使用的修飾符. 例如,
not host vs and ace作為 not host vs and host ace的簡寫形式, 不應該和 not ( host vs or ace )混淆.
?
tcpdump 的輸出結果介紹 (OUTPUT FORMAT)
下面我們介紹幾種典型的 tcpdump 命令的輸出信息
如果 報文 的 長度 小于等于 length, 則 邏輯 為 真. 它等同于:
len <= length.
greater length
如果報文的長度大于等于 length, 則邏輯為真. 它等同于:
len >= length.
原語可以用下述方法結合使用:
圓括弧括起來的原語和操作符(園括弧在Shell中有特定含義, 所以必須轉義).
取反操作 (`!' or `not').
連結操作 (`&&' or `and').
或操作 (`||' or `or').
取反操作有最高優先級. 或操作和連結操作有相同的優先級, 運算時從左到右結合. 注意連結操作需要顯式的and算符, 而不是并列放置.
如果給出標識符, 但沒給修飾符, 那么暗指最近使用的修飾符. 例如,
not host vs and ace作為 not host vs and host ace的簡寫形式, 不應該和 not ( host vs or ace )混淆.
?
tcpdump 的輸出結果介紹 (OUTPUT FORMAT)
下面我們介紹幾種典型的 tcpdump 命令的輸出信息
(1)
數據鏈路層頭信息
使用命令
#tcpdump -e host ice
ice
是一臺裝有
linux
的主機
,
她的
MAC
地址是
00
:90:27:58:AF:1A
H219
是一臺裝有
SOLARIC
的
SUN
工作站
,
它的
MAC
地址是
08
:00:20:79:5B:46;
上一條
命令的輸出結果如下所示:
21:50:12.847509 eth0 > 08:00:20:79:5b:46 00:90:27:58:af:1a ip 60: h219.33357 > ice.
telnet 0:0(0) ack 22535 win 8760 (DF)
分析
:21:50:12
是顯示的時間
, 847509
是
ID
號
,
eth0 >表示從網絡接口設備發送數據包(
eth0 <
表示從網絡接口
eth0
接受該數據包
), 08:00:20:79:5b:46是主機H219的MAC地址,
它表明是從源地址H219發來的數據包. 00:90:27:58:af:1a是主機ICE的MAC地址,表示該數據包的目的地址是ICE . ip 是表明該數據包是IP數據包,60 是數據包的長度, h219.33357 > ice.
telnet 表明該數據包是從主機H219的33357端口發往主機ICE的TELNET(23)端口. ack 22535表明對序列號是222535的包進行響應. win 8760表明發送窗口的大小是8760.
(2) ARP包的TCPDUMP輸出信息
使用命令#tcpdump arp
得到的輸出結果是:
22:32:42.802509 eth0 > arp who-has h10 tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply h10 is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是時間戳, 802509是ID號, eth0 >表明從主機發出該數據包, arp表明是
ARP請求包, who-has h10 tell ice表明是主機ICE請求主機h10的MAC地址。 0:90:27:5
8:af:1a是主機ICE的MAC地址。
(3) TCP包的輸出信息
用TCPDUMP捕獲的TCP包的一般輸出信息是:
src > dst: flags data-seqno ack window urgent options
分析:
src > dst:
表明從源地址到目的地址
, flags
是
TCP
包中的標志信息
,
如:S
是
SYN
標志
, F (F
IN), P (PUSH) , R (RST) "."
(沒有標記); data-seqno是數據包中的數據的順序號, ack是
下次期望的順序號, window是接收緩存的窗口大小, urgent表明數據包中是否有緊急指針.
Options是選項.
(4) UDP包的輸出信息
用TCPDUMP捕獲的UDP包的一般輸出信息是:
H10.port1 > ice.port2: udp lenth
UDP十分簡單,上面的輸出行表明從主機h10的port1端口發出的一個UDP數據包到主機
ICE的port2端口,類型是UDP, 包的長度是lenth
example:
如果想要獲取主機61.151.247.124接收或發出的telnet包,使用如下命令
tcpdump tcp port 23 and host 61.151.247.124
tcpdump -n tcp port 23 and src host 218.83.152.2
tcpdump -n -w /etc/tcpdump.log tcp port 23 and src host 218.83.152.2
tcpdump -r /etc/tcpdump.log
tcpdump -i eth0 -w tcpdump.log
tcpdump -r
tcpdump.log
顯示 所有 進出 sundown 的 報文:
tcpdump host sundown
顯示helios和hot|ace之間的報文傳送:
tcpdump host helios and \( hot or ace \)
顯示ace和除了helios 以外的所有主機的IP報文:
tcpdump ip host ace and not helios?
tcpdump host helios and \( hot or ace \)
顯示ace和除了helios 以外的所有主機的IP報文:
tcpdump ip host ace and not helios?
本文出自 “壞男孩” 博客,請務必保留此出處http://5ydycm.blog.51cto.com/115934/176151
posted on 2011-03-02 10:09 tobyxiong 閱讀(933) 評論(0) 編輯 收藏 所屬分類: linix