RHEL6基礎三十八之數據包分析工具tcpdump

tcpdump---dump the traffic on a network

說明:tcpdump根據使用者的定義對網絡上的數據包進行截獲的包分析工具。

         tcpdump可以將網絡中傳送的數據包的“頭”完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句。普通用戶不能正常執行,需具備root權限的用戶纔可以直接執行它。

格式:tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ] [ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ] [ -T 類型 ] [ -w 文件名 ] [表達式 ]

表達式說明:表達式是一個正則表達式,tcpdump利用它作爲過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網絡上所有的信息包將會被截獲。表達式中常見的關鍵字有以下幾種:

類型關鍵字主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一臺主機,net 202.0.0.0 指明 202.0.0.0是一個網絡地址,port 23指明端口號是23。如果沒有指定類型,缺省的類型是host

傳輸方向關鍵字主要包括src , dst ,dst or src, dst and src,這些關鍵字指明瞭傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net202.0.0.0 指明目的網絡地址是202.0.0.0 。如果沒有指明方向關鍵字,則缺省是src or dst關鍵字

協議關鍵字:主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分佈式光纖數據接口網絡)上的特定的網絡協議,實際上它是"ether"的別名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。其他的幾個關鍵字就是指明瞭監聽的包的協議內容。如果沒有指定任何協議,則tcpdump將會監聽所有協議的信息包。tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型

其他關鍵字:gateway, broadcast,less, greater

       邏輯運算符:非運算    'not '    '! '    ;與運算    'and'    '&&'    ;或運算    'or'    '││'    

options:

-i    指定監聽的網絡接口;如果不指定網卡,默認tcpdump只會監視第一個網絡接口,一般是eth0

-c    在收到指定數目的包後,tcpdump就會停止;-c 100 : 只抓取100個數據包

-w    直接將包寫入文件中,並不分析和打印出來;-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析,wireshark的使用參考Wireshark抓包工具基礎教程

-r    從指定的文件中讀取包(這些包一般通過-w選項產生);
-F    從指定的文件中讀取表達式,忽略其它的表達式;

-t    在輸出的每一行不打印時間戳;

-n    不把網絡地址轉換成名字;

-nn      直接以 IP 及 Port Number 顯示,而非主機名與服務名稱;

-v    輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;

-vv    輸出詳細的報文信息;

-T    將監聽到的包直接解釋爲指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議;)

-a    將網絡地址和廣播地址轉變成名字;
-d    將匹配信息包的代碼以人們能夠理解的彙編格式給出;
-dd    將匹配信息包的代碼以c語言程序段的格式給出;
-ddd    將匹配信息包的代碼以十進制的形式給出;
-e    在輸出行打印出數據鏈路層的頭部信息;
-f    將外部的Internet地址以數字的形式打印出來;
-l    使標準輸出變爲緩衝行形式;

-s         抓取數據包時默認抓取長度爲68字節。加上-S 0 後可以抓到完整的數據包

輸出結果介紹:

1) 數據鏈路層頭信息

ICE主機的MAC地址是0:90:27:58:AF:1A ,H219主機的MAC地址是8:0:20:79:5B:46。

[root@justin ~]# tcpdump -e host ICE
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:21:55.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ICE.  telne t 0:0(0) ack 22535 win 8760 (DF)
......
2 packets captured
1984 packets received by filter
1933 packets dropped by kernel
[root@justin ~]#

13:21:55是顯示的時間, 847509是ID號,eth0 <表示從網絡接口eth0接收該分組, eth0 >表示從網絡接口設備發送分組, 8:0:20:79:5b:46是主機H219的MAC地址, 它表明是從源地址H219發來的分組. 0:90:27:58:af:1a是主機ICE的MAC地址, 表示該分組的目的地址是ICE。 ip 是表明該分組是IP分組,60 是分組的長度, h219.33357 > ICE. telnet 表明該分組是從主機H219的33357端口發往主機ICE的 TELNET(23)端口。 ack 22535 表明對序列號是222535的包進行響應。 win 8760表明發送窗口的大小是8760。

2) ARP包的tcpdump輸出信息

[root@justin ~]# tcpdump arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:18:21.802509 eth0 > arp who-has route tell ICE (0:90:27:58:af:1a)
14:18:21.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
......
7 packets captured
35 packets received by filter
0 packets dropped by kernel
[root@justin ~]#

14:18:21是時間戳, 802509是ID號, eth0 >表明從主機發出該分組,arp表明是ARP請求包, who-has route tell ICE表明是主機ICE請求主機route的MAC地址。 0:90:27:58:af:1a是主機 ICE的MAC地址。

實例:

1)截獲主機10.15.72.73 和主機10.15.72.74或10.15.72.75的通信(在命令行中使用括號時,一定要添加'\')

[root@justin ~]# tcpdump host 10.15.72.73 and \(10.15.72.74 or 10.15.72.75 \)

2)獲取主機210.15.72.73除了和主機10.15.72.74之外所有主機通信的ip包

[root@justin ~]# tcpdump host 10.15.72.73 and not 10.15.72.74
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:01:17.895735 IP 10.15.72.73.58375 > 210.51.22.240.viziblebrowser: Flags [P.], seq 246661844:246662084, ack 3304727012, win 16425, length 240
....
4 packets captured
2275 packets received by filter
2240 packets dropped by kernel
[root@justin ~]# tcpdump host 10.15.72.73 and ! 10.15.72.74

3)對本機的udp 123 端口進行監視 123 爲ntp的服務端口

[root@justin ~]# tcpdump udp port 123

4)對名爲10.15.72.74的主機的通信數據包進行監視

[root@justin ~]# tcpdump -i eth0 src host 10.15.72.74
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:22:40.359246 IP 10.15.72.74.15718 > 255.255.255.255.vce: UDP, length 83
......
4 packets captured
6 packets received by filter
0 packets dropped by kernel
[root@justin ~]#

5)監視所有送到主機10.15.72.74的數據包

[root@justin ~]# tcpdump -i eth0 dst host 10.15.72.74

6)過濾源主機10.15.72.74和目的端口不是telnet的報頭,並導入到/home/tcpdump文件中:

[root@justin ~]# touch /home/ tcpdump
[root@justin ~]# tcpdump src host 10.15.72.74 and dst port ! telnet  -l > /home/tcpdump

7)監聽來自eth0適配卡且通信協議爲port 22,目標來源爲10.15.72.74的數據包資料

[root@justin ~]# tcpdump -i eth0 -nn port 22 and src host 10.15.72.74

8)抓取訪問eth0適配卡且訪問端口爲tcp 9080

[root@justin ~]# tcpdump -i eth0 dst 10.15.72.74 and tcp port 9080

9)抓取所有經過 eth1,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 數據

[root@justin ~]# tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host192.168.1.200)))'

10)抓取所有經過 eth1,目標 MAC 地址是 00:01:02:03:04:05 的 ICMP 數據

[root@justin ~]# tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

11)抓取所有經過 eth1,目的網絡是 192.168,但目的主機不是 192.168.1.200 的 TCP 數據

[root@justin ~]# tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

12)抓 SYN 包

[root@justin ~]# tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'


13)用tcpdump嗅探80端口的訪問看看誰最高

[root@justin ~]# tcpdump -tnn dst port 80 -c 10 | grep -i "^ip"|awk '{print $2}'|cut -d '.' -f 1-4|sort|uniq -c|tail -10



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章