TCPDUMP簡介
在傳統的網絡分析和測試技術中,嗅探器(sniffer)是最常見,也是最重要的技術之一。sniffer工具首先是為網絡管理者和網絡程式員進行網絡分析而設計的。對于網絡管理人員來說,使用嗅探器可以随時掌握網絡的實際情況,在網絡性能急劇下降的時候,可以通過sniffer工具來分析原因,找出造成網絡阻塞的來源。對于網絡程式員來說,通過sniffer工具來調試程式。
用過windows平台上的sniffer工具(例如,netxray和sniffer pro軟體)的朋友可能都知道,在共享式的區域網路中,采用sniffer工具簡直可以對網絡中的所有流量一覽無餘!Sniffer工具實際上就是一個網絡上的抓包工具,同時還可以對抓到的包進行分析。由于在共享式的網絡中,資訊包是會廣播到網絡中所有主機的網絡接口,隻不過在沒有使用sniffer工具之前,主機的網絡裝置會判斷該資訊包是否應該接收,這樣它就會抛棄不應該接收的資訊包,sniffer工具卻使主機的網絡裝置接收所有到達的資訊包,這樣就達到了網絡監聽的效果。
Linux作為網絡伺服器,特别是作為路由器和網關時,資料的采集和分析是必不可少的。是以,今天我們就來看看Linux中強大的網絡資料采集分析工具——TcpDump。
顧名思義,TcpDump可以将網絡中傳送的資料包的“頭”完全截獲下來提供分析。它支援針對網絡層、協定、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的資訊。
-----------------------
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
0000 0000 0080 0000 1007 cf08 0900 0000
0e80 0000 902b 4695 0980 8701 0014 0002
000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
ffff 0060 0004 ffff ffff ffff ffff ffff
0452 ffff ffff 0000 e85b 6d85 4008 0002
0640 4d41 5354 4552 5f57 4542 0000 0000
0000 00
^C
------------------------
TcpDump的參數化支援
并且當網卡被設定為混雜模式時,系統會在控制台和日志檔案中留下記錄,提醒管理者留意這台系統是否被用作攻擊同網絡的其他計算機的跳闆。
May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled
雖然網絡分析工具能将網絡中傳送的資料記錄下來,但是網絡中的資料流量相當大,如何對這些資料進行分析、分類統計、發現并報告錯誤卻是更關鍵的問題。網絡中的資料包屬于不同的協定,而不同協定資料包的格式也不同。是以對捕獲的資料進行解碼,将包中的資訊盡可能的展示出來,對于協定分析工具來講更為重要。昂貴的商業分析工具的優勢就在于它們能支援很多種類的應用層協定,而不僅僅隻支援tcp、udp等低層協定。
TCP功能
資料過濾
不帶任何參數的TcpDump将搜尋系統中所有的網絡接口,并顯示它截獲的所有資料,這些資料對我們不一定全都需要,而且資料太多不利于分析。是以,我們應當先想好需要哪些資料,TcpDump提供以下參數供我們選擇資料:
-b 在資料-鍊路層上選擇協定,包括ip、arp、rarp、ipx都是這一層的。
-i 選擇過濾的網絡接口,如果是作為路由器至少有兩個網絡接口,通過這個選項,就可以隻過濾指定的接口上通過的資料。例如:
src、dst、port、host、net、ether、gateway這幾個選項又分别包含src、dst 、port、host、net、ehost等附加選項。他們用來分辨資料包的來源和去向,src host 192.168.0.1指定源主機IP位址是192.168.0.1,dst net 192.168.0.0/24指定目标是網絡192.168.0.0。以此類推,host是與其指定主機相關無論它是源還是目的,net是與其指定網絡相關的,ether後面跟的不是IP位址而是實體位址,而gateway則用于網關主機。可能有點複雜,看下面例子就知道了:
過濾的是源主機為192.168.0.1與目的網絡為192.168.0.0的報頭。
過濾源主機實體位址為XXX的報頭(為什麼ether src後面沒有host或者net?實體位址當然不可能有網絡喽)。
Tcpdump src host 192.168.0.1 and dst port not telnet
過濾源主機192.168.0.1和目的端口不是telnet的報頭。
ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾資料報的類型。
例如:
隻過濾資料-鍊路層上的IP報頭。
隻過濾源主機192.168.0.1的所有udp報頭。
資料顯示/輸入輸出
TcpDump提供了足夠的參數來讓我們選擇如何處理得到的資料,如下所示:
-l 可以将資料重定向。
-n 不進行IP位址到主機名的轉換。
如果不使用這一項,當系統中存在某一主機的主機名時,TcpDump會把IP位址轉換為主機名顯示,就像這樣:eth0 < ntc9.1165> router.domain.net.telnet,使用-n後變成了:eth0 < 192.168.0.9.1165 > 192.168.0.1.telnet。
-nn 不進行端口名稱的轉換。
上面這條資訊使用-nn後就變成了:eth0 < ntc9.1165 > router.domain.net.23。
-N 不列印出預設的域名。
還是這條資訊-N 後就是:eth0 < ntc9.1165 > router.telnet。
-O 不進行比對代碼的優化。
-t 不列印UNIX時間戳,也就是不顯示時間。
-tt 列印原始的、未格式化過的時間。
-v 詳細的輸出,也就比普通的多了個TTL和服務類型。
TCPDUMP的安裝
1. rpm包的形式安裝
2. 源程式的安裝
rpm的包可以使用如下指令安裝:
第二步 做好編譯源程式前的準備活動
BINDEST = @sbindir@
MANDEST = @mandir@
第三步 編譯源程式
總結一下就是:
# vi Makefile.in
# . /configure
# make
# make install
本文轉自zcm8483 51CTO部落格,原文連結:http://blog.51cto.com/haolun/993088