Linux tcpdump命令的用法詳細(xì)解析
英文原意是dump traffic on a network ,即截獲網(wǎng)絡(luò)上的數(shù)據(jù)報(bào),可以根據(jù)指定的網(wǎng)絡(luò)接口來(lái)截獲不同的數(shù)據(jù)報(bào)。它會(huì)輸出在某個(gè)網(wǎng)絡(luò)接口上符合匹配表達(dá)式的報(bào)內(nèi)容的描述。當(dāng)tcpdump完成抓包后,會(huì)打印出類似下面的內(nèi)容:
9 packets captured
56 packets received by filter
17 packets dropped by kernel
當(dāng)然,在讀取網(wǎng)絡(luò)上的數(shù)據(jù)包時(shí),得需要特權(quán),比如linux上的超級(jí)用戶
tcpdump用法
tcpdump -A 用ascii打印出每個(gè)包信息,這個(gè)對(duì)于截獲網(wǎng)頁(yè)很方便
tcpdump -D 打印出當(dāng)前系統(tǒng)的可用的網(wǎng)絡(luò)接口??梢杂?i選項(xiàng)來(lái)指定特定的接口
tcpdump -F 使用文件作為輸入的過濾表達(dá)式
tcpdump -i 在指定的接口上進(jìn)行監(jiān)聽。如果未指定,tcpdump會(huì)從interface list 中尋找最低數(shù)字作為監(jiān)聽的接口
tcpdump -l 使標(biāo)準(zhǔn)輸出成為緩沖區(qū),如果你想在截獲數(shù)據(jù)包的同時(shí)也查看數(shù)據(jù),則可以使用下面命令
tcpdump -l > dat & tail -f dat
tcpdump -S 打印出TCP絕對(duì)的序列號(hào)
tcpdump -w 將截獲的數(shù)據(jù)包寫到一個(gè)文件中
如果沒有表達(dá)式,則網(wǎng)絡(luò)上所有的包都會(huì)被截獲
例子TCP Packets
下面就是TCP 報(bào)文的格式
src > dst : flags data-segno ack window urgent options(MSS, 時(shí)間戳,窗口規(guī)模選項(xiàng))
1. 要截獲特定標(biāo)志位的TCP 包:在TCP header中,有8位是控制位
CWR | ECE | URG | ACK | PSH | RST | SYN | FIN
有TCP 頭的結(jié)構(gòu)中
0 15 31
-------------------------------------------------------------------------
| source port | destination port |
-------------------------------------------------------------------------
| sequence number |
-------------------------------------------------------------------------
| acknowledgment number |
--------------------------------------------------------------------------
| HL | rsvd |C|E|U|A|P|R|S|F| window size |
--------------------------------------------------------------------------
| TCP checksum | urgent pointer |
--------------------------------------------------------------------------
8為控制位是TCP頭中的第13個(gè) 8-bits組
| |
|------------------------|
|C|E|U|A|P|R|S|F|
|------------------------|
|7 5 3 0|
當(dāng)SYN位為1時(shí)
則該8-bits組的二進(jìn)制表示為:00000010 -> 2
所以只截獲TCP中標(biāo)志位為SYN=1的表達(dá)式為
tcpdump -i 2 tcp[13]==2
tcp[13]==2 就是讓TCP數(shù)據(jù)報(bào)中的第13個(gè)8bits組的值為2
| |
|------------------------|
|C|E|U|A|P|R|S|F|
|------------------------|
|7 5 3 0|
此時(shí)該8bits組的二進(jìn)制表示為 00010010 ->18
此時(shí)應(yīng)該不是 tcp[13] == 18,這樣只能截獲ACK-SYN報(bào)文,而不能再截獲SYN報(bào)文啦,這時(shí)我們應(yīng)該要維持SYN所在位的值,可以用上邏輯與運(yùn)算,即如下
‘tcp[13] & 2 == 2' ,就可以啦
注意:下面截圖的TCP報(bào)文的第二條的標(biāo)志位 [S.]
UDP 報(bào)文的格式為
actibude.who > broadcast.who : udp 84
who 為端口號(hào),artinide,broadcast都是主機(jī)的網(wǎng)絡(luò)地址, 84為UDP數(shù)據(jù)報(bào)的大小
UDP name Server Requests
請(qǐng)求報(bào)文的格式為
src > dst : id op? flags qtype qclass name(len)
h2opolo.1538 > helios.domain : 3+ A? ucbvax.berkeley.edu (37)
主機(jī)hopolo詢問主機(jī)helios上的domain服務(wù)的地址記錄(qtype=A),該機(jī)路與ucbvax.berkeley,edu相關(guān)聯(lián)
查詢id為3,‘+'表明 recursion-desired flag 被設(shè)置,query的長(zhǎng)度為37字節(jié),沒有包括UDP與IP的頭長(zhǎng)度
UDP Name Server Responsessrc > 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)
該報(bào)文是helios響應(yīng)來(lái)自h2opolo的query id 為3,且?guī)в?個(gè)answer record,3 個(gè)name server records 和 7 個(gè)additional records
第一個(gè) answer record 是type A ,它數(shù)據(jù)的大小為273字節(jié),包括UDP和IP報(bào)文頭
- linux系統(tǒng)下使用tcpdump進(jìn)行抓包方法
- Linux中的tcpdump命令示例詳解
- 在 Linux 命令行中使用 tcpdump 抓包的一些功能
- 在Linux中使用tcpdump命令捕獲與分析數(shù)據(jù)包詳解
- Linux基礎(chǔ)學(xué)習(xí)之利用tcpdump抓包實(shí)例代碼
- Linux中tcpdump命令實(shí)例詳解
- Linux下使用tcpdump抓包的實(shí)現(xiàn)方法
- linux使用tcpdump命令監(jiān)視指定網(wǎng)絡(luò)數(shù)據(jù)包的方法
- Linux tcpdump操作命令詳解
- Linux下tcpdump命令解析及使用詳解
相關(guān)文章
教你十種提高Linux系統(tǒng)安全性的招數(shù)
教你十種提高Linux系統(tǒng)安全性的招數(shù)...2006-10-10Red Hat Linux中自動(dòng)運(yùn)行程序
Red Hat Linux中自動(dòng)運(yùn)行程序...2006-10-10利用shell編程實(shí)現(xiàn)DOS風(fēng)格的Linux命令行
利用shell編程實(shí)現(xiàn)DOS風(fēng)格的Linux命令行...2006-10-10