tcpdump Windows Version: http://www.winpcap.org/windump/
[前語(yǔ)]最近要用到數(shù)據(jù)包分析軟件(tcpdump),從網(wǎng)上搜索發(fā)現(xiàn)資料重多,但讓我發(fā)現(xiàn)大部分的內(nèi)容都比較亂,讓人不敢往下讀,今天我也將我整理的資料,拿給網(wǎng)上的朋友分享下,可能我整理得也比較亂,或者分析得有誤,請(qǐng)大家指出,謝謝!~ [內(nèi)容] v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} st1/:*{behavior:url(#ieooui) }
Tcpdump
SYNOPSIS( 概要) tcpdump [ -ADeflnNqtvx ] [ -c count ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ expression ] 選項(xiàng) (OPTIONS) -A Print each packet (minus its link level header) in ASCII. Handy for capturing web pages [應(yīng)用] 在網(wǎng)關(guān)服務(wù)器中輸入: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 格式打印除鏈路層的頭部信息的包,這個(gè)選項(xiàng)更有益與web 頁(yè)面的抓取. 上面是我對(duì)源192.168.x.y 包的抓取,一看就知道,它現(xiàn)在連接到MSN 。
-e 每行都顯示鏈路層報(bào)頭.
[ 應(yīng)用 ] 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
[ 分析 ] 這是針對(duì)鏈路層包分析,看看是不是你想要的呢?
-c 當(dāng)收到count 個(gè) 報(bào)文 后 退出.
[ 應(yīng)用 ] 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
[ 分析 ] 看到?jīng)]有,我只要抓取兩個(gè)匹配包,就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 [ 應(yīng)用 ] tcpdump -D
[ 摘取 ]
1.eth0
2.eth1
3.eth2
4.any (Pseudo-device that captures on all interfaces)
5.lo
[ 分析 ] 打印可以被tcpdump 抓取的接口名稱。可以提供給-i 參數(shù),EX:tcpdump –I eth1
-i 監(jiān)聽(tīng)interface 接口. 如果不指定接口, tcpdump 在系統(tǒng)的接口清單中, 尋找號(hào)碼最小, 已經(jīng)配置好的接口(loopback 除外). 選中的時(shí)候會(huì)中斷連接.
[ 應(yīng)用 ] 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 接口的數(shù)據(jù)包 -f 用數(shù)字形式顯示 ' 外部的' 互聯(lián)網(wǎng)地址, 而不是字符形式 ( 如:tcpdump -f -i eth0 -c 4 src host 192.168.x.y)
[ 應(yīng)用 ]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
[ 分析 ] 與前一個(gè)應(yīng)用對(duì)比,你能發(fā)現(xiàn)在摘取中的互聯(lián)網(wǎng)地址都會(huì)以IP 顯示,而不在有域名啦。。。 -l 行緩沖標(biāo)準(zhǔn)輸出. 可用于捕捉數(shù)據(jù)的同時(shí)查看數(shù)據(jù). 例如,
[ 應(yīng)用 ] 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
[ 分析 ] 結(jié)合系統(tǒng)命令,使抓取分析數(shù)據(jù)更加靈活與強(qiáng)大,我愛(ài)這個(gè)功能… -n 不把地址轉(zhuǎn)換成名字 ( 如主機(jī)地址, 端口號(hào)等)
[ 應(yīng)用 ] 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 [ 分析 ] 抓取的數(shù)據(jù)包不會(huì)將數(shù)字地址轉(zhuǎn)換成名字
-N
不顯示主機(jī)名字中的域名部分
[ 應(yīng)用 ] 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
[ 分析 ] 抓取的數(shù)據(jù)包中不會(huì)將域名的部分顯示,看by1msg3145607.msnp, 典型是省略了很長(zhǎng)一段的域名部分(msn 的) -q 快速輸出. 顯示較少的協(xié)議信息, 輸出行將短一點(diǎn)點(diǎn).
[ 應(yīng)用 ] 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 [ 分析 ] 打印較短的協(xié)議,用與快速分析。
-w 把原始報(bào)文存進(jìn)file, 不分析也不顯示. 它們可以以后用 -r 選項(xiàng)顯示. 如果 file 是 “-'', 就寫(xiě)到標(biāo)準(zhǔn)輸出.( 如:tcpdump -e src host 192.168.x.y -w /tmp/tcpdump.log)
-r 從file 中讀入數(shù)據(jù)報(bào) ( 文件是用 -w 選項(xiàng)創(chuàng)建的). 如果 file 是 “-'', 就讀標(biāo)準(zhǔn)輸入. ( 如:tcpdump -e src host 192.168.x.y -r /tmp/tcpdump.log)
[ 分析 ] 以上-w,-r ,的作用是相反的,一個(gè)是將抓取的包寫(xiě)入到指定文件,一個(gè)是根據(jù)上次寫(xiě)入的文件來(lái)讀取分析。沒(méi)有上次的-w 操作,-r 是無(wú)法使用的,除非用”-” ,不過(guò)如果你用more,cat 是無(wú)法讀通這個(gè)文件的,不像用”|” ,借助tee 可以為以后方便 -t 禁止顯示時(shí)戳標(biāo)志.
[ 應(yīng)用 ] 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 顯示未格式化的時(shí)戳標(biāo)志.
[ 應(yīng)用 ] 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 對(duì)比,一看就很清楚了,是時(shí)間顯示控制和時(shí)間格式控制 -v ( 稍微多一點(diǎn)) 繁瑣的輸出. 例如, 顯示IP 數(shù)據(jù)報(bào)中的生存周期和服務(wù)類型. -vv 更繁瑣的輸出. 例如, 顯示NFS 應(yīng)答報(bào)文的附加域. -x 以十六進(jìn)制數(shù)形式顯示每一個(gè)報(bào)文 ( 去掉鏈路層報(bào)頭后) . 可以顯示較小的完整報(bào)文
[ 分析 ]-v,-vv,-x 通過(guò)上面的敘述,我想大家試一下,一定就會(huì)很明白了,至與那個(gè)選項(xiàng)更適合大家,那就是看應(yīng)用了,我想這些選項(xiàng)也夠大家用了吧!~ 反正夠我用了,呵呵!~
expression ( 表達(dá)式) 表達(dá)式是一個(gè)正則表達(dá)式,tcpdump利用它作為過(guò)濾報(bào)文的條件,如果一個(gè)報(bào)文滿足表達(dá)式的條件,則這個(gè)報(bào)文將會(huì)被捕獲。如果沒(méi)有給出任何條件,則網(wǎng)絡(luò)上所有的信息包將會(huì)被截獲。 v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}
<!--[if !vml]--><!--[endif]--> <!--[if !vml]--><!--[endif]--> 圖:Expression 的構(gòu)造
expression 由一個(gè)或多個(gè)原語(yǔ) (primitive) 組成. 原語(yǔ)通常由一個(gè)標(biāo)識(shí)(id, 名稱或數(shù)字) 和 標(biāo)識(shí) 前面的一個(gè)或多個(gè)修飾字(qualifier) 組成. 修飾字有三種不同的類型: (1)type 類型修飾字指出標(biāo)識(shí)名稱或標(biāo)識(shí)數(shù)字代表什么類型的東西. 可以使用的類型有host, net 和 port. 例如, `host foo', `net 128.3', `port 20'. 如果不指定類型修飾字, 就使用缺省的 host (2)Direction 方向修飾字指出相對(duì)于標(biāo)識(shí)的傳輸方向 ( 數(shù)據(jù)是傳入還是傳出標(biāo)識(shí)). 可以使用的方向有 src, dst, src or dst 和 src and dst. 例如, `src foo', `dst net 128.3', `src or dst port ftp-data'. 如果不指定方向修飾字, 就使用缺省的src or dst . 對(duì)于 `null' 鏈路層 ( 就是說(shuō) 象 slip 之類的 點(diǎn)到點(diǎn) 協(xié)議), 用 inbound 和outbound 修飾字指定所需的傳輸方向. (3)proto 協(xié)議修飾字要求匹配指定的協(xié)議. 可以使用的協(xié)議有: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp 和 udp. 例如,ether src foo', `arp net 128.3', `tcp port 21'. 如果不指定協(xié)議修飾字, 就使用所有符合類型的協(xié)議. 例如, `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' 實(shí)際上 是 `ether' 的 別名; 分析器把它們視為 `` 用在指定網(wǎng)絡(luò)接口上的數(shù)據(jù)鏈路層.'' FDDI 報(bào)頭包含類似于以太協(xié)議的源目地址, 而且通常包含 類似于以太協(xié)議的報(bào)文類型, 因此你可以分析 FDDI 域, 就象分析以太協(xié)議一樣. FDDI 報(bào)頭也包含其他域, 但是你不能在過(guò)濾器表達(dá)式里顯式描述.] <!--[if !supportLineBreakNewLine]--> <!--[endif]-->
作為上述的補(bǔ)充, 有一些特殊的 ` 原語(yǔ)' 關(guān)鍵字, 它們不同于上面的模式: gateway, broadcast, less, greater 和數(shù)學(xué)表達(dá)式. 這些在后面有敘述. 更復(fù)雜的過(guò)濾器表達(dá)式 可以通過(guò) and, or 和 not 連接原語(yǔ)來(lái)組建. 例如, `host foo and not port ftp and not port ftp-data'. 為了少敲點(diǎn)鍵, 可以忽略 相同的修飾子. 例如, `tcp dst port ftp or ftp-data or domain' 實(shí)際上 就是 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'. 允許的 原語(yǔ) 有: dst host host 如果報(bào)文中IP 的目的地址域是 host, 則邏輯為真. host 既可以是地址, 也可以是主機(jī)名. src host host 如果報(bào)文中IP 的源地址域 是 host, 則 邏輯為 真. host host 如果報(bào)文中 IP 的 源地址域或者目的地址域是host, 則邏輯為真. 上面所有的 host 表達(dá)式 都可以加上 ip, arp, 或 rarp 關(guān)鍵字做前綴, 就象: ip host host 如果host 是擁有多個(gè)IP 地址的主機(jī)名, 它的每個(gè)地址都會(huì)被查驗(yàn). dst net net 如果報(bào)文的IP 目的地址屬于網(wǎng)絡(luò)號(hào)net, 則邏輯為真. src net net 如果 報(bào)文的 IP 源地址 屬于 網(wǎng)絡(luò)號(hào) net, 則邏輯為真. net net 如果報(bào)文的IP 源地址或目的地址屬于網(wǎng)絡(luò)號(hào) net, 則邏輯為真. net net mask netmask ( 如net 192.168.1.0 mask 255.255.255.128 ) 如果IP 地址匹配指定網(wǎng)絡(luò)掩碼(netmask) 的net, 則 邏輯為真. 本原語(yǔ)可以用src 或 dst 修飾. net net/len 如果IP 地址匹配指定網(wǎng)絡(luò)掩碼的net, 則邏輯為真, 掩碼的有效位寬為len. 本原語(yǔ)可以用src 或dst 修飾. dst port port 如果報(bào)文是ip/tcp 或ip/udp, 并且目的端口是port, 則邏輯為真. port 是一個(gè)數(shù)字, 也可以是 /etc/services 中 說(shuō)明過(guò)的名字( 參看tcp(4P) 和udp(4P)). 如果使用名字, 則檢查端口號(hào)和協(xié)議. 如果使用數(shù)字, 或者有二義的名字, 則只檢查端口號(hào) ( 例如, dst port 513 將顯示 tcp/login 的數(shù)據(jù) 和 udp/who 的數(shù)據(jù), 而 port domain 將顯示 tcp/domain 和 udp/domain 的數(shù)據(jù)). src port port 如果 報(bào)文 的 源端口號(hào) 是 port, 則 邏輯 為 真. port port 如果報(bào)文的源端口或目的端口是port, 則邏輯為真. 上述的任意一個(gè)端口表達(dá)式都可以用關(guān)鍵字tcp 或udp 做前綴, 就象: tcp src port port 它只匹配源端口是port 的 TCP 報(bào)文. <!--[if !supportLineBreakNewLine]--> <!--[endif]-->
less length 如果 報(bào)文 的 長(zhǎng)度 小于等于 length, 則 邏輯 為 真. 它等同于: len <= length. greater length 如果報(bào)文的長(zhǎng)度大于等于 length, 則邏輯為真. 它等同于: len >= length. 原語(yǔ)可以用下述方法結(jié)合使用: 圓括弧括起來(lái)的原語(yǔ)和操作符( 園括弧在Shell 中有特定含義, 所以必須轉(zhuǎn)義). 取反操作 (`!' or `not'). 連結(jié)操作 (`&&' or `and'). 或操作 (`||' or `or'). 取反操作有最高優(yōu)先級(jí). 或操作和連結(jié)操作有相同的優(yōu)先級(jí), 運(yùn)算時(shí)從左到右結(jié)合. 注意連結(jié)操作需要顯式的and 算符, 而不是并列放置. 如果給出標(biāo)識(shí)符, 但沒(méi)給修飾符, 那么暗指最近使用的修飾符. 例如, not host vs and ace 作為 not host vs and host ace 的簡(jiǎn)寫(xiě)形式, 不應(yīng)該和 not ( host vs or ace ) 混淆. tcpdump 的輸出結(jié)果介紹 (OUTPUT FORMAT) 下面我們介紹幾種典型的 tcpdump 命令的輸出信息
(1) 數(shù)據(jù)鏈路層頭信息
使用命令 #tcpdump -e host ice
ice 是一臺(tái)裝有 linux 的主機(jī) , 她的 MAC 地址是 00 :90 :27 :58 :AF :1A
H219 是一臺(tái)裝有 SOLARIC 的 SUN 工作站 , 它的 MAC 地址是 08 :00 :20 :79 :5B :46 ; 上一條
命令的輸出結(jié)果如下所示:
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 是顯示的時(shí)間 , 847509 是 ID 號(hào) , eth0 >表示從網(wǎng)絡(luò)接口設(shè)備發(fā)送數(shù)據(jù)包( eth0 < 表示從網(wǎng)絡(luò)接口 eth0 接受該數(shù)據(jù)包 ), 08:00:20:79:5b:46是主機(jī)H219的MAC地址,
它表明是從源地址H219發(fā)來(lái)的數(shù)據(jù)包. 00:90:27:58:af:1a是主機(jī)ICE的MAC地址,表示該數(shù)據(jù)包的目的地址是ICE . ip 是表明該數(shù)據(jù)包是IP數(shù)據(jù)包,60 是數(shù)據(jù)包的長(zhǎng)度, h219.33357 > ice.
telnet 表明該數(shù)據(jù)包是從主機(jī)H219的33357端口發(fā)往主機(jī)ICE的TELNET(23)端口. ack 22535表明對(duì)序列號(hào)是222535的包進(jìn)行響應(yīng). win 8760表明發(fā)送窗口的大小是8760.
(2) ARP包的TCPDUMP輸出信息
使用命令#tcpdump arp
得到的輸出結(jié)果是:
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是時(shí)間戳, 802509是ID號(hào), eth0 >表明從主機(jī)發(fā)出該數(shù)據(jù)包, arp表明是
ARP請(qǐng)求包, who-has h10 tell ice表明是主機(jī)ICE請(qǐng)求主機(jī)h10的MAC地址。 0:90:27:5
8:af:1a是主機(jī)ICE的MAC地址。
(3) TCP包的輸出信息
用TCPDUMP捕獲的TCP包的一般輸出信息是:
src > dst: flags data-seqno ack window urgent options
分析:
src > dst: 表明從源地址到目的地址 , flags 是 TCP 包中的標(biāo)志信息 , 如:S 是 SYN 標(biāo)志 , F (F
IN), P (PUSH) , R (RST) "." (沒(méi)有標(biāo)記); data-seqno是數(shù)據(jù)包中的數(shù)據(jù)的順序號(hào), ack是
下次期望的順序號(hào), window是接收緩存的窗口大小, urgent表明數(shù)據(jù)包中是否有緊急指針.
Options是選項(xiàng).
(4) UDP包的輸出信息
用TCPDUMP捕獲的UDP包的一般輸出信息是:
H10.port1 > ice.port2: udp lenth
UDP十分簡(jiǎn)單,上面的輸出行表明從主機(jī)h10的port1端口發(fā)出的一個(gè)UDP數(shù)據(jù)包到主機(jī)
ICE的port2端口,類型是UDP, 包的長(zhǎng)度是lenth
example:
如果想要獲取主機(jī)61.151.247.124接收或發(fā)出的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
顯示 所有 進(jìn)出 sundown 的 報(bào)文: tcpdump host sundown <!--[if !supportLineBreakNewLine]--> <!--[endif]-->
顯示helios 和hot|ace 之間的報(bào)文傳送: tcpdump host helios and /( hot or ace /) 顯示ace 和除了helios 以外的所有主機(jī)的IP 報(bào)文: tcpdump ip host ace and not helios