網絡監聽分析工具 tcpdump
sniffit
網絡監聽分析的工具有很多種,這裏只簡單介紹兩種比較常用的工具.
1) tcpdump
tcpdump:監聽流經一個本機網絡接口上的數據,功能非常強勁
使用方法:
tcpdump [options] [expression]
options部分命令行選項:
命令
|
說明
|
-c num
|
接受到指定num個符合條件的包就退出
|
-n
|
Ip信息用數字顯示
|
-x
|
以十六進制方式顯示包內容
|
-X
|
同時以十六進制、ascii方式顯示包內容
|
-i dev
|
指定要監聽的網絡接口 (例如 -i eth0)
注意::
在同一臺機器上進行測試時,最好加上參數:
-iany
這樣可以接收任何網卡的信息。
|
-w
|
把監聽的信息寫入文件中
|
-r
|
從用w選項創建的文件中讀取保存的監聽信息
|
-s(數據包大小)
|
設置每個數據包的大小 -s2400
表示每個數據包的大小是2400
|
-d
|
把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標準輸出。 |
-dd
|
把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標準輸出。 |
expression 監聽網絡報的條件表達式,只有符合此條件的數據包纔會顯示
條件表達式有一個或多個條件組成
條件類型
|
常用條件標誌
|
協議條件
|
ip, ip6, arp, rarp, tcp ,udp.
|
源/目的條件
|
src dst
|
具體條件
|
host,net,port
|
其中多個條件可以由關係運算符組合在一起
關係類型
|
關係運算符
|
反
|
! 或 not
|
與
|
&& 或 and
|
或
|
|| 或 or
|
使用實例:
a) 顯示所有主機192.168.1.3發送出和接收的數據包
tcpdump host 192.168.1.3
b) 顯示主機 A 與主機(B 或 C)之間的交互IP數據包
tcpdump ‘ip and host A and (B or C)‘
c) 本機地址192.168.1.3 ,顯示從主機192.168.5.1或網絡192.168.1到本地53端口的udp數據包,但不顯示本機發送到本地53端口的數據包,
同時顯示十六進制和ASCII方式的數據包內容
tcpdump -X 'udp and dst host 192.168.1.3 and dst port 53 and (src host 192.168.5.1 or src net 192.168.1) and src not
localhost'
命令參數說明:
udp數據包 :udp
目的地址192.168.1.3 :dst host 192.168.1.3
目的端口 53 :dst port 53
源主機地址192.168.5.1 :src host 192.168.5.1
源網絡地址192.168.1 :src net 192.168.1
非本機發送的包 : src not localhost
用tcpdump解析tcp連接建立和釋放
下面命令抓包:
#
tcpdump -n -ieth1 'tcp and dst host 172.25.34.88 and port 7012'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
1. 14:44:52.174122
IP 172.25.38.145.49563 > 172.25.34.88.7012: S 1986599379:1986599379(0) win 5840 <mss1460,sackOK,timestamp
3824018401 0,nop,wscale 2>
2. 14:44:52.174249
IP 172.25.34.88.7012 > 172.25.38.145.49563: S 4294961892:4294961892(0) ack 1986599380 win 5792 <mss1460,sackOK,timestamp
1927787323 3824018401,nop,wscale 2>
3. 14:44:52.174228
IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>
4. 14:44:52.174433
IP 172.25.38.145.49563 > 172.25.34.88.7012: P 1:109(108) ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>
5. 14:44:52.174443
IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 109 win 1448 <nop,nop,timestamp 1927787323 3824018401>
6. 14:44:52.186891
IP 172.25.34.88.7012 > 172.25.38.145.49563: P 1:857(856) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>
7. 14:44:52.186914
IP 172.25.34.88.7012 > 172.25.38.145.49563: F 857:857(0) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>
8. 14:44:52.187054
IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 857 win 1888 <nop,nop,timestamp 3824018404 1927787326>
9. 14:44:52.195347
IP 172.25.38.145.49563 > 172.25.34.88.7012: F 109:109(0) ack 858 win 1888 <nop,nop,timestamp 3824018406 1927787326>
10. 14:44:52.195355
IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 110 win 1448 <nop,nop,timestamp 1927787328 3824018406>
每一行中間都有這個包所攜帶的標誌:
S=SYN, 發起連接標誌。
P=PUSH, 傳送數據標誌。
F=FIN, 關閉連接標誌。
ack 表示確認包。
RST=RESET, 異常關閉連接。
. 表示沒有任何標誌。
() 括號中的數字是包的長度,建立連接和關閉連接時,包長都爲0,括號前面的都是序列號。
上面抓包的過程解析:
第1行:14:44:52這個時間,從172.25.38.145(client)的臨時端口49563向172.25.34.88(server)的7012監聽端口發起連接,
client初始包序號爲1986599379,
win 滑動窗口大小爲5840字節(滑動窗口即tcp接收緩衝區的大小,用於tcp擁塞控制),
mss 大小爲1460(即可接收的最大包長度,通常爲MTU減40字節,IP頭和TCP頭各20字節)。
第2行: server響應連接,同時帶上第一個包的ack信息,爲client端的初始包序號加1,即1986599380,
也即server端下次等待接受這個包序號的包,用於tcp字節流的順序控制。
server端的初始包序號爲4294961892,mss也是1460。
第3行:client再次確認,tcp連接三次握手完成。
第4行:client發請求包,包長度108字節。
第5行:server響應ack。
第6行:server回包,包長度856字節。
第7行:client響應ack。(這裏應該是有問題的,但應該是這樣)
第8行:client發起關閉連接請求。
第9行:server響應ack,並且也發送FIN標誌關閉。
第10行:客戶端響應ack,關閉連接的四次握手完成。
軟件已上傳至資料下載區,需要的話,可以下載