英文原意是dump traffic on a network ,即截獲網路上的資料報,可以根據指定的網路介面來截獲不同的資料報。它會輸出在某個網路介面上符合匹配運算式的報內容的描述。當tcpdump完成抓包後,會列印出類似下面的內容:
9 packets captured
56 packets received by filter
17 packets dropped by kernel
當然,在讀取網路上的資料包時,得需要特權,比如linux上的超級使用者
tcpdump用法
tcpdump -A 用ascii列印出每個包資訊,這個對於截獲網頁很方便
tcpdump -D 列印出當前系統的可用的網路介面。可以用-i選項來指定特定的介面
![]()
tcpdump -F 使用檔案作為輸入的過濾運算式
tcpdump -i 在指定的介面上進行監聽。如果未指定,tcpdump會從interface list 中尋找最低數字作為監聽的介面
tcpdump -l 使標準輸出成為緩衝區,如果你想在截獲資料包的同時也查看資料,則可以使用下面命令
tcpdump -l > dat & tail -f dat
tcpdump -S 列印出TCP絕對的序號
tcpdump -w 將截獲的資料包寫到一個檔案中
如果沒有運算式,則網路上所有的包都會被截獲
例子TCP Packets
下面就是TCP 報文的格式
src > dst : flags data-segno ack window urgent options(MSS, 時間戳記,視窗規模選項)
1. 要截獲特定標誌位的TCP 包:在TCP header中,有8位是控制位
CWR | ECE | URG | ACK | PSH | RST | SYN | FIN
有TCP 頭的結構中
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個 8-bits組
| |
|------------------------|
|C|E|U|A|P|R|S|F|
|------------------------|
|7 5 3 0|
當SYN位為1時
則該8-bits組的二進位表示為:00000010 -> 2
所以只截獲TCP中標誌位為SYN=1的運算式為
tcpdump -i 2 tcp[13]==2
tcp[13]==2 就是讓TCP資料報中的第13個8bits組的值為2
![]()
2. 如果TCP報文中帶有SYN-ACK,我們認為他是帶SYN的報文,那麼該咋截獲呢
| |
|------------------------|
|C|E|U|A|P|R|S|F|
|------------------------|
|7 5 3 0|
此時該8bits組的二進位表示為 00010010 ->18
此時應該不是 tcp[13] == 18,這樣只能截獲ACK-SYN報文,而不能再截獲SYN報文啦,這時我們應該要維持SYN所在位的值,可以用上邏輯與運算,即如下
‘tcp[13] & 2 == 2' ,就可以啦
注意:下面截圖的TCP報文的第二條的標誌位 [S.]
![]()
UDP Packets
UDP 報文的格式為
actibude.who > broadcast.who : udp 84
who 為連接埠號碼,artinide,broadcast都是主機的網路地址, 84為UDP資料報的大小
UDP name Server Requests
請求報文的格式為
src > dst : id op? flags qtype qclass name(len)
h2opolo.1538 > helios.domain : 3+ A? ucbvax.berkeley.edu (37)
主機hopolo詢問主機helios上的domain服務的地址記錄(qtype=A),該機路與ucbvax.berkeley,edu相關聯
查詢id為3,‘+'表明 recursion-desired flag 被設定,query的長度為37位元組,沒有包括UDP與IP的頭長度
UDP Name Server Responses
src > 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)
該報文是helios響應來自h2opolo的query id 為3,且帶有3個answer record,3 個name server records 和 7 個additional records
第一個 answer record 是type A ,它資料的大小為273位元組,包括UDP和IP報文頭