Linux作為網(wǎng)絡(luò)服務器,特別是作為路由器和網(wǎng)關(guān)時,數(shù)據(jù)的采集和分析是必不可少的。所以,今天我們就來看看Linux中強大的網(wǎng)絡(luò)數(shù)據(jù)采集分析工具——TcpDump。
顧名思義,TcpDump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來提供分析。它支持針對網(wǎng)絡(luò)層、協(xié)議、主機、網(wǎng)絡(luò)或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。
和Linux終端狀態(tài)下的其他軟件一樣,TcpDump也是依靠參數(shù)來工作,本文將結(jié)合實例來說明。
數(shù)據(jù)過濾
不帶任何參數(shù)的TcpDump將搜索系統(tǒng)中所有的網(wǎng)絡(luò)接口,并顯示它截獲的所有數(shù)據(jù),這些數(shù)據(jù)對我們不一定全都需要,而且數(shù)據(jù)太多不利于分析。所以,我們應當先想好需要哪些數(shù)據(jù),TcpDump提供以下參數(shù)供我們選擇數(shù)據(jù):
-b在數(shù)據(jù)-鏈路層上選擇協(xié)議,包括ip、arp、rarp、ipx都是這一層的。
例如:tcpdump -b arp將只顯示網(wǎng)絡(luò)中的arp即地址轉(zhuǎn)換協(xié)議信息。
-i選擇過濾的網(wǎng)絡(luò)接口,如果是作為路由器至少有兩個網(wǎng)絡(luò)接口,通過這個選項,就可以只過濾指定的接口上通過的數(shù)據(jù)。例如:
tcpdump -i eth0只顯示通過eth0接口上的所有報頭。
src、dst、port、host、net、ether、gateway這幾個選項又分別包含src、dst、port、host、net、 ehost等附加選項。他們用來分辨數(shù)據(jù)包的來源和去向,src host 192.168.0.1指定源主機IP地址是192.168.0.1,dst net 192.168.0.0/24指定目標是網(wǎng)絡(luò)192.168.0.0。以此類推,host是與其指定主機相關(guān)無論它是源還是目的,net是與其指定網(wǎng)絡(luò)相關(guān)的,ether后面跟的不是IP地址而是物理地址,而gateway則用于網(wǎng)關(guān)主機。可能有點復雜,看下面例子就知道了:
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24
過濾的是源主機為192.168.0.1與目的網(wǎng)絡(luò)為192.168.0.0的報頭。
tcpdump ether src 00:50:04:BA:9B and dst……
過濾源主機物理地址為XXX的報頭(為什么ether src后面沒有host或者net?物理地址當然不可能有網(wǎng)絡(luò)嘍)。
Tcpdump src host 192.168.0.1 and dst port not telnet
過濾源主機192.168.0.1和目的端口不是telnet的報頭。
ip icmp arp rarp和tcp、udp、icmp這些選項等都要放到第一個參數(shù)的位置,用來過濾數(shù)據(jù)報的類型。例如:
tcpdump ip src……
只過濾數(shù)據(jù)-鏈路層上的IP報頭。
tcpdump udp and src host 192.168.0.1
只過濾源主機192.168.0.1的所有udp報頭。
數(shù)據(jù)顯示/輸入輸出
TcpDump提供了足夠的參數(shù)來讓我們選擇如何處理得到的數(shù)據(jù),如下所示:
-l可以將數(shù)據(jù)重定向。
如tcpdump -l>tcpcap.txt將得到的數(shù)據(jù)存入tcpcap.txt文件中。
-n不進行IP地址到主機名的轉(zhuǎn)換。
如果不使用這一項,當系統(tǒng)中存在某一主機的主機名時,TcpDump會把IP地址轉(zhuǎn)換為主機名顯示,就像這樣:eth0<ntc9.1165> router.domain.net.telnet,使用-n后變成了:eth0<192.168.0.9.1165> 192.168.0.1.telnet。
-nn不進行端口名稱的轉(zhuǎn)換。
上面這條信息使用-nn后就變成了:eth0<ntc9.1165>router.domain.net.23。
-N不打印出默認的域名。
還是這條信息-N后就是:eth0<ntc9.1165>router.telnet。
-O不進行匹配代碼的優(yōu)化。
-t不打印UNIX時間戳,也就是不顯示時間。
-tt打印原始的、未格式化過的時間。
-v詳細的輸出,也就比普通的多了個TTL和服務類型。
好了,說了這么多,是不是覺得TcpDump這個工具很好?它還有好多功能限于篇幅不能一一介紹,多讀一讀“幫助”都會有很大的收獲,這也算是進入Linux世界的一條捷徑吧。