tcpdump 是 Linux 下的抓包工具,,使用參數(shù)比較多,,輸出條目比較細(xì)。
tcpdump的命令行格式
|
tcpdump [ -adeflnNOpqStvx ] [ -c 數(shù)量 ] [ -F 文件名 ] [ -i 網(wǎng)絡(luò)接口 ] [ -r 文件名] [ -s snaplen ] [ -T 類型 ] [ -w 文件名 ] [表達(dá)式 ] |
tcpdump的參數(shù)選項(xiàng)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
-A:以ASCII編碼打印每個(gè)報(bào)文(不包括鏈路層的頭),,這對(duì)分析網(wǎng)頁(yè)來(lái)說(shuō)很方便,; -a:將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字; -c<數(shù)據(jù)包數(shù)目>:在收到指定的包的數(shù)目后,,tcpdump就會(huì)停止,; -C:用于判斷用 -w 選項(xiàng)將報(bào)文寫入的文件的大小是否超過(guò)這個(gè)值,如果超過(guò)了就新建文件(文件名后綴是1,、2,、3依次增加); -d:將匹配信息包的代碼以人們能夠理解的匯編格式給出,; -dd:將匹配信息包的代碼以c語(yǔ)言程序段的格式給出,; -ddd:將匹配信息包的代碼以十進(jìn)制的形式給出; -D:列出當(dāng)前主機(jī)的所有網(wǎng)卡編號(hào)和名稱,,可以用于選項(xiàng) -i,; -e:在輸出行打印出數(shù)據(jù)鏈路層的頭部信息; -f:將外部的Internet地址以數(shù)字的形式打印出來(lái),; -F<表達(dá)文件>:從指定的文件中讀取表達(dá)式,忽略其它的表達(dá)式,; -i<網(wǎng)絡(luò)界面>:監(jiān)聽(tīng)主機(jī)的該網(wǎng)卡上的數(shù)據(jù)流,如果沒(méi)有指定,,就會(huì)使用最小網(wǎng)卡編號(hào)的網(wǎng)卡(在選項(xiàng)-D可知道,,但是不包括環(huán)路接口),linux 2.2 內(nèi)核及之后的版本支持 any 網(wǎng)卡,,用于指代任意網(wǎng)卡,; -l:如果沒(méi)有使用 -w 選項(xiàng),就可以將報(bào)文打印到 標(biāo)準(zhǔn)輸出終端(此時(shí)這是默認(rèn)),; -n:顯示ip,,而不是主機(jī)名; -N:不列出域名,; -O:不將數(shù)據(jù)包編碼最佳化,; -p:不讓網(wǎng)絡(luò)界面進(jìn)入混雜模式; -q:快速輸出,,僅列出少數(shù)的傳輸協(xié)議信息,; -r<數(shù)據(jù)包文件>:從指定的文件中讀取包(這些包一般通過(guò)-w選項(xiàng)產(chǎn)生); -s<數(shù)據(jù)包大小>:指定抓包顯示一行的寬度,-s0表示可按包長(zhǎng)顯示完整的包,,經(jīng)常和-A一起用,,默認(rèn)截取長(zhǎng)度為60個(gè)字節(jié),但一般ethernet MTU都是1500字節(jié),。所以,,要抓取大于60字節(jié)的包時(shí),使用默認(rèn)參數(shù)就會(huì)導(dǎo)致包數(shù)據(jù)丟失,; -S:用絕對(duì)而非相對(duì)數(shù)值列出TCP關(guān)聯(lián)數(shù),; -t:在輸出的每一行不打印時(shí)間戳; -tt:在輸出的每一行顯示未經(jīng)格式化的時(shí)間戳記,; -T<數(shù)據(jù)包類型>:將監(jiān)聽(tīng)到的包直接解釋為指定的類型的報(bào)文,,常見(jiàn)的類型有rpc (遠(yuǎn)程過(guò)程調(diào)用)和snmp(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議); -v:輸出一個(gè)稍微詳細(xì)的信息,,例如在ip包中可以包括ttl和服務(wù)類型的信息,; -vv:輸出詳細(xì)的報(bào)文信息; -x/-xx/-X/-XX:以十六進(jìn)制顯示包內(nèi)容,,幾個(gè)選項(xiàng)只有細(xì)微的差別,,詳見(jiàn)man手冊(cè); -w<數(shù)據(jù)包文件>:直接將包寫入文件中,,并不分析和打印出來(lái),; expression:用于篩選的邏輯表達(dá)式; |
tcpdump的表達(dá)式
表達(dá)式是一個(gè)邏輯表達(dá)式,,tcpdump利用它作為過(guò)濾報(bào)文的條件,,如果一個(gè)報(bào)文滿足表達(dá)式的條件,則這個(gè)報(bào)文將會(huì)被捕獲,。如果沒(méi)有給出任何條件,,則網(wǎng)絡(luò)上所有的信息包將會(huì)被截獲。
在表達(dá)式中一般如下幾種類型的關(guān)鍵字:
關(guān)于類型的關(guān)鍵字,,主要包括host,,net,,port
例如,,
host 210.27.48.2,指明 210.27.48.2是一臺(tái)主機(jī),,net 202.0.0.0 指明202.0.0.0是一個(gè)網(wǎng)絡(luò)地址,,port 23 指明端口號(hào)是23。
如果沒(méi)有指定類型,,缺省的類型是host.
關(guān)于傳輸方向的關(guān)鍵字:src,dst,dst or src,dst and src
例如,,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網(wǎng)絡(luò)地址是202.0.0.0 。如果沒(méi)有指明方向關(guān)鍵字,,則缺省是src or dst關(guān)鍵字,。
關(guān)于協(xié)議的關(guān)鍵字:fddi,ip,arp,rarp,tcp,udp
Fddi指明是在FDDI(分布式光纖數(shù)據(jù)接口網(wǎng)絡(luò))上的特定的網(wǎng)絡(luò)協(xié)議,,實(shí)際上它是"ether"的別名,fddi和e ther具有類似的源地址和目的地址,,所以可以將fddi協(xié)議包當(dāng)作ether的包進(jìn)行處理和分析,。
其他的幾個(gè)關(guān)鍵字就是指明了監(jiān)聽(tīng)的包的協(xié)議內(nèi)容。如果沒(méi)有指定任何協(xié)議,,則tcpdump將會(huì)監(jiān)聽(tīng)所有協(xié)議的信息包,。
邏輯運(yùn)算符關(guān)鍵字
非運(yùn)算 'not ' '! '
與運(yùn)算 'and','&&'
或運(yùn)算 'or' ,'||'
這些關(guān)鍵字可以組合起來(lái)構(gòu)成強(qiáng)大的組合條件來(lái)滿足人們的需要,下面舉幾個(gè)例子來(lái)說(shuō)明,。
其他重要關(guān)鍵字
除了這三種類型的關(guān)鍵字之外,,其他重要的關(guān)鍵字如下:gateway, broadcast,less,greater。
案例
想要截獲所有210.27.48.1 的主機(jī)收到的和發(fā)出的所有的數(shù)據(jù)包:
tcpdump host 210.27.48.1
想要截獲主機(jī)210.27.48.1 和主機(jī)210.27.48.2 或210.27.48.3的通信,,使用命令
tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3\)
如果想要獲取主機(jī)210.27.48.1除了和主機(jī)210.27.48.2之外所有主機(jī)通信的ip包,,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
如果想要獲取主機(jī)210.27.48.1接收或發(fā)出的telnet包,使用如下命令:
tcpdump tcp port 23 host 210.27.48.1
輸出結(jié)果介紹
下面我們介紹幾種典型的tcpdump命令的輸出信息
數(shù)據(jù)鏈路層頭信息
使用命令tcpdump --e host ice
ice 是一臺(tái)裝有l(wèi)inux的主機(jī),,她的MAC地址是0:90:27:58:af:1a
H219是一臺(tái)裝有SOLARIC的SUN工作站,,它的MAC地址是8:0:20:79:5b:46
命令的輸出結(jié)果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0: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ò)接口eth0 接受該數(shù)據(jù)包
eth0 > 表示從網(wǎng)絡(luò)接口設(shè)備發(fā)送數(shù)據(jù)包
8:0:20:79:5b:46 是主機(jī)H219的MAC地址,它表明是從源地址H219發(fā)來(lái)的數(shù)據(jù)包
0: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
ARP包的TCPDUMP輸出信息
使用命令#tcpdump arp
得到的輸出結(jié)果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route 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 route tell ice 表明是主機(jī)ICE請(qǐng)求主機(jī)ROUTE的MAC地址
0:90:27:58:af:1a 是主機(jī)ICE的MAC地址。
TCP包的輸出信息
用TCPDUMP捕獲的TCP包的一般輸出信息是:
|
src > dst: flags data-seqno ack window urgent options |
src > dst 表明從源地址到目的地址
flags 是TCP包中的標(biāo)志信息,S 是SYN標(biāo)志, F(FIN), 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)
用TCPDUMP捕獲的UDP包的一般輸出信息是:
|
route.port1 > ice.port2: udp lenth |
UDP十分簡(jiǎn)單,,上面的輸出行表明從主機(jī)ROUTE的port1端口發(fā)出的一個(gè)UDP數(shù)據(jù)包到主機(jī)ICE的port2端口,,類型是UDP, 包的長(zhǎng)度是lenth
wireshark查看
要讓wireshark能分析tcpdump的包,,關(guān)鍵的地方是 -s 參數(shù),, 還有要保存為-w文件,例如下面的例子:
|
./tcpdump -i eth0 -s 0 -w SuccessC2Server.pcap host 192.168.1.20 # 抓該主機(jī)的所有包,在wireshark中過(guò)濾 ./tcpdump -i eth0 'dst host 239.33.24.212' -w raw.pcap # 抓包的時(shí)候就進(jìn)行過(guò)濾 |
wireshark的過(guò)濾,,很簡(jiǎn)單的,,比如:
tcp.port eq 5541
ip.addr eq 192.168.2.1
過(guò)濾出來(lái)后, 用fllow tcp 查看包的內(nèi)容,。
其他
device eth0/eth1 entered promiscuous mode
message日志中提示:
kernel: device eth0 entered promiscuous mode
kernel: device eth0 left promiscuous mode
網(wǎng)卡進(jìn)入了混雜模式,。一般對(duì)通信進(jìn)行抓包分析時(shí)進(jìn)入混雜模式(tcpdump)。(默認(rèn)網(wǎng)卡啟用了混雜模式的)
關(guān)閉混雜模式:ifconfig eth0 -promisc
啟用混雜模式:ifconfig eth0 promisc
TCP協(xié)議的KeepAlive機(jī)制與HeartBeat心跳包:http://www./academy/detail/23350382
TCP Keepalive HOWTO:http://www./HOWTO/html_single/TCP-Keepalive-HOWTO/
參考
http://xstarcd./wiki/shell/tcpdump.html
https://my.oschina.net/xianggao/blog/678644
|