tcpdump 使用手冊

[前語]最近要用到數據包分析軟件(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..([email protected].......+.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個 報文 後 退出.

[應用] 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

[摘取]

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 除外). 選中的時候會中斷連接.

[應用] 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)

[應用]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
行緩衝標準輸出. 可用於捕捉數據的同時查看數據. 例如,

[應用] 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
不把地址轉換成名字 (如主機地址, 端口號等)

[應用] 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
快速輸出. 顯示較少的協議信息, 輸出行將短一點點.

[應用] 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)

-r
file中讀入數據報 (文件是用 -w 選項創建的). 如果 file “-'', 就讀標準輸入. (如:tcpdump -e src host 192.168.x.y -r /tmp/tcpdump.log)

[分析]以上-w,-r,的作用是相反的,一個是將抓取的包寫入到指定文件,一個是根據上次寫入的文件來讀取分析。沒有上次的-w操作,-r是無法使用的,除非用”-”,不過如果你用more,cat是無法讀通這個文件的,不像用”|”,藉助tee 可以爲以後方便
-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
顯示未格式化的時戳標誌.

[應用] 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,-vv,-x通過上面的敘述,我想大家試一下,一定就會很明白了,至與那個選項更適合大家,那就是看應用了,我想這些選項也夠大家用了吧!~反正夠我用了,呵呵!~


expression (
表達式)
表達式是一個正則表達式,tcpdump利用它作爲過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網絡上所有的信息包將會被截獲。

圖: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 之類的 點到點 協議), inboundoutbound修飾字指定所需的傳輸方向.
(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. 本原語可以用srcdst修飾.
dst port port
如果報文是ip/tcpip/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, 則邏輯爲真. 上述的任意一個端口表達式都可以用關鍵字tcpudp做前綴,就象:
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命令的輸出信息

(1) 數據鏈路層頭信息

使用命令#tcpdump -e host ice

ice 是一臺裝有linux的主機她的MAC地址是00902758AF1A

H219是一臺裝有SOLARICSUN工作站它的MAC地址是080020795B46上一條

命令的輸出結果如下所示:

 

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)

分析215012是顯示的時間 847509ID 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:表明從源地址到目的地址, flagsTCP包中的標誌信息,如: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

顯示helioshot|ace之間的報文傳送:
tcpdump host helios and \( hot or ace \)

顯示ace和除了helios 以外的所有主機的IP報文:
tcpdump ip host ace and not helios 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章