- 論壇徽章:
- 0
|
網(wǎng)絡(luò)數(shù)據(jù)采集分析工具TcpDump的簡介
顧名思義,TcpDump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來提供分析。它支持針對網(wǎng)絡(luò)層、協(xié)議、主機(jī)、網(wǎng)絡(luò)或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。
tcpdump
就是一種免費(fèi)的網(wǎng)絡(luò)分析工具,尤其其提供了源代碼,公開了接口,因此具備很強(qiáng)的可擴(kuò)展性,對于網(wǎng)絡(luò)維護(hù)和入侵者都是非常有用的工具。
tcpdump
存在于基本的FreeBSD系統(tǒng)中,由于它需要將網(wǎng)絡(luò)界面設(shè)置為混雜模式,普通用戶不能正常執(zhí)行,但具備root權(quán)限的用戶可以直接執(zhí)行它來獲取網(wǎng)絡(luò)上的信息。因此系統(tǒng)中存在網(wǎng)絡(luò)分析工具主要不是對本機(jī)安全的威脅,而是對網(wǎng)絡(luò)上的其他計(jì)算機(jī)的安全存在威脅。
我們用盡量簡單的話來定義
tcpdump
,就是:dump the traffice on a network.,根據(jù)使用者的定義對網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行截獲的包分析工具。作為互聯(lián)網(wǎng)上經(jīng)典的的系統(tǒng)管理員必備工具,
tcpdump
以其強(qiáng)大的功能,靈活的截取策略,成為每個(gè)高級的系統(tǒng)管理員分析網(wǎng)絡(luò),排查問題等所必備的東西之一。
tcpdump
提供了源代碼,公開了接口,因此具備很強(qiáng)的可擴(kuò)展性,對于網(wǎng)絡(luò)維護(hù)和入侵者都是非常有用的工具。
tcpdump
存在于基本的FreeBSD系統(tǒng)中,由于它需要將網(wǎng)絡(luò)界面設(shè)置為混雜模式,普通用戶不能正常執(zhí)行,但具備root權(quán)限的用戶可以直接執(zhí)行它來獲取網(wǎng)絡(luò)上的信息。因此系統(tǒng)中存在網(wǎng)絡(luò)分析工具主要不是對本機(jī)安全的威脅,而是對網(wǎng)絡(luò)上的其他計(jì)算機(jī)的安全存在威脅。
網(wǎng)絡(luò)數(shù)據(jù)采集分析工具TcpDump的安裝
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
在
linux
下
tcpdump
的安裝十分簡單,一般由兩種安裝方式。一種是以rpm包的形式來進(jìn)行安裝。另外一種是以源程序的形式安裝。
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
rpm包的形式安裝:這種形式的安裝是最簡單的安裝方法,rpm包是將軟件編譯后打包成二進(jìn)制的格式,通過rpm命令可以直接安裝,不需要修改任何東西。以超級用戶登錄,使用命令如下:
#rpm -ivh
tcpdump
-3_4a5.rpm
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
這樣
tcpdump
就順利地安裝到你的
linux
系統(tǒng)中。怎么樣,很簡單吧。
源程序的安裝:既然rpm包的安裝很簡單,為什么還要采用比較復(fù)雜的源程序安裝呢?其實(shí),
linux
一個(gè)最大的誘人之處就是在她上面有很多軟件是提供源程序的,人們可以修改源程序來滿足自己的特殊的需要。所以我特別建議朋友們都采取這種源程序的安裝方法。
- 第一步 取得源程序 在源程序的安裝方式中,我們首先要取得
tcpdump
的源程序分發(fā)包,這種分發(fā)包有兩種形式,一種是tar壓縮包(
tcpdump
-3_4a5.tar.Z),另一種是rpm的分發(fā)包(
tcpdump
-3_4a5.src.rpm)。這兩種形式的內(nèi)容都是一樣的,不同的僅僅是壓縮的方式.tar的壓縮包可以使用如下命令解開:
#tar xvfz
tcpdump
-3_4a5.tar.Z
rpm的包可以使用如下命令安裝:
#rpm -ivh
tcpdump
-3_4a5.src.rpm
這樣就把
tcpdump
的源代碼解壓到/usr/src/redhat/SOURCES目錄下.
- 第二步 做好編譯源程序前的準(zhǔn)備活動(dòng)
在編譯源程序之前,最好已經(jīng)確定庫文件libpcap已經(jīng)安裝完畢,這個(gè)庫文件是
tcpdump
軟件所需的庫文件。同樣,你同時(shí)還要有一個(gè)標(biāo)準(zhǔn)的c語言編譯器。在
linux
下標(biāo)準(zhǔn)的c 語言編譯器一般是gcc。 在
tcpdump
的源程序目錄中。有一個(gè)文件是Makefile.in,configure命令就是從Makefile.in文件中自動(dòng)產(chǎn)生Makefile文件。在Makefile.in文件中,可以根據(jù)系統(tǒng)的配置來修改BINDEST 和 MANDEST 這兩個(gè)宏定義,缺省值是
BINDEST = @sbindir@
MANDEST = @mandir@
第一個(gè)宏值表明安裝
tcpdump
的二進(jìn)制文件的路徑名,第二個(gè)表明
tcpdump
的man 幫助頁的路徑名,你可以修改它們來滿足系統(tǒng)的需求。
- 第三步 編譯源程序
使用源程序目錄中的configure腳本,它從系統(tǒng)中讀出各種所需的屬性。并且根據(jù)Makefile.in文件自動(dòng)生成Makefile文件,以便編譯使用.make 命令則根據(jù)Makefile文件中的規(guī)則編譯
tcpdump
的源程序。使用make install命令安裝編譯好的
tcpdump
的二進(jìn)制文件。
總結(jié)一下就是:
# tar xvfz
tcpdump
-3_4a5.tar.Z
# vi Makefile.in
# . /configure
# make
# make install
3 網(wǎng)絡(luò)數(shù)據(jù)采集分析工具TcpDump的使用
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
普通情況下,直接啟動(dòng)
tcpdump
將監(jiān)視第一個(gè)網(wǎng)絡(luò)界面上所有流過的數(shù)據(jù)包。
#
tcpdump
tcpdump
: listening on fxp0
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
支持相當(dāng)多的不同參數(shù),如使用-i參數(shù)指定
tcpdump
監(jiān)聽的網(wǎng)絡(luò)界面,這在計(jì)算機(jī)具有多個(gè)網(wǎng)絡(luò)界面時(shí)非常有用,使用-c參數(shù)指定要監(jiān)聽的數(shù)據(jù)包數(shù)量,使用-w參數(shù)指定將監(jiān)聽到的數(shù)據(jù)包寫入文件中保存,等等。
然而更復(fù)雜的
tcpdump
參數(shù)是用于過濾目的,這是因?yàn)榫W(wǎng)絡(luò)中流量很大,如果不加分辨將所有的數(shù)據(jù)包都截留下來,數(shù)據(jù)量太大,反而不容易發(fā)現(xiàn)需要的數(shù)據(jù)包。使用這些參數(shù)定義的過濾規(guī)則可以截留特定的數(shù)據(jù)包,以縮小目標(biāo),才能更好的分析網(wǎng)絡(luò)中存在的問題。
tcpdump
使用參數(shù)指定要監(jiān)視數(shù)據(jù)包的類型、地址、端口等,根據(jù)具體的網(wǎng)絡(luò)問題,充分利用這些過濾規(guī)則就能達(dá)到迅速定位故障的目的。請使用man
tcpdump
查看這些過濾規(guī)則的具體用法。
顯然為了安全起見,不用作網(wǎng)絡(luò)管理用途的計(jì)算機(jī)上不應(yīng)該運(yùn)行這一類的網(wǎng)絡(luò)分析軟件,為了屏蔽它們,可以屏蔽內(nèi)核中的bpfilter偽設(shè)備。一般情況下網(wǎng)
絡(luò)硬件和TCP/IP堆棧不支持接收或發(fā)送與本計(jì)算機(jī)無關(guān)的數(shù)據(jù)包,為了接收這些數(shù)據(jù)包,就必須使用網(wǎng)卡的混雜模式,并繞過標(biāo)準(zhǔn)的TCP/IP堆棧才行。
在FreeBSD下,這就需要內(nèi)核支持偽設(shè)備bpfilter。因此,在內(nèi)核中取消bpfilter支持,就能屏蔽
tcpdump
之類的網(wǎng)絡(luò)分析工具。
并且當(dāng)網(wǎng)卡被設(shè)置為混雜模式時(shí),系統(tǒng)會在控制臺和日志文件中留下記錄,提醒管理員留意這臺系統(tǒng)是否被用作攻擊同網(wǎng)絡(luò)的其他計(jì)算機(jī)的跳板。
May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled
雖然網(wǎng)絡(luò)分析工具能將網(wǎng)絡(luò)中傳送的數(shù)據(jù)記錄下來,但是網(wǎng)絡(luò)中的數(shù)據(jù)流量相當(dāng)大,如何對這些數(shù)據(jù)進(jìn)行分析、分類統(tǒng)計(jì)、發(fā)現(xiàn)并報(bào)告錯(cuò)誤卻是更關(guān)鍵的問題。網(wǎng)絡(luò)
中的數(shù)據(jù)包屬于不同的協(xié)議,而不同協(xié)議數(shù)據(jù)包的格式也不同。因此對捕獲的數(shù)據(jù)進(jìn)行解碼,將包中的信息盡可能的展示出來,對于協(xié)議分析工具來講更為重要。昂
貴的商業(yè)分析工具的優(yōu)勢就在于它們能支持很多種類的應(yīng)用層協(xié)議,而不僅僅只支持tcp、udp等低層協(xié)議。
從上面
tcpdump
的輸出可以看出,
tcpdump
對截獲的數(shù)據(jù)并沒有進(jìn)行徹底解碼,數(shù)據(jù)包內(nèi)的大部分內(nèi)容是使用十六進(jìn)制的形式直接打印輸出的。顯然這不利于分析網(wǎng)絡(luò)故障,通常的解決辦法是先使用帶-w參數(shù)的
tcpdump
截獲數(shù)據(jù)并保存到文件中,然后再使用其他程序進(jìn)行解碼分析。當(dāng)然也應(yīng)該定義過濾規(guī)則,以避免捕獲的數(shù)據(jù)包填滿整個(gè)硬盤。FreeBSD提供的一個(gè)有效的解碼程序?yàn)閠cpshow,它可以通過Packages Collection來安裝。
# pkg_add /cdrom/packages/security/tcpshow*
#
tcpdump
-c 3 -w
tcpdump
.out
tcpdump
: listening on fxp0
# tcpshow 01:80:C2:00:00:00 type=0026
---------------------------------------------------------------------------
Packet 2
TIME:12:01:01.074513 (1.089684)
LINK:00:A0:C9:AB:3C:DF -> FF:FF:FF:FF:FF:FF type=ARP
ARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=request
sender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3
target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3
---------------------------------------------------------------------------
Packet 3
TIME:12:01:01.985023 (0.910510)
LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026
tcpshow能以不同方式對數(shù)據(jù)包進(jìn)行解碼,并以不同的方式顯示解碼數(shù)據(jù),使用者可以根據(jù)其手冊來選擇最合適的參數(shù)對截獲的數(shù)據(jù)包進(jìn)行分析。從上面的例子中可以看出,tcpshow支持的協(xié)議也并不豐富,對于它不支持的協(xié)議就無法進(jìn)行解碼。
除了
tcpdump
之
外,F(xiàn)reeBSD的Packages
Collecion中還提供了Ethereal和Sniffit兩個(gè)網(wǎng)絡(luò)分析工具,以及其他一些基于網(wǎng)絡(luò)分析方式的安全工具。其中Ethereal運(yùn)行在
X Window 下,具有不錯(cuò)的圖形界面,Sniffit使用字符窗口形式,同樣也易于操作。然而由于
tcpdump
對
過濾規(guī)則的支持能力更強(qiáng)大,因此系統(tǒng)管理員仍然更喜歡使用它。對于有經(jīng)驗(yàn)的網(wǎng)絡(luò)管理員,使用這些網(wǎng)絡(luò)分析工具不但能用來了解網(wǎng)絡(luò)到底是如何運(yùn)行的,故障出
現(xiàn)在何處,還能進(jìn)行有效的統(tǒng)計(jì)工作,如那種協(xié)議產(chǎn)生的通信量占主要地位,那個(gè)主機(jī)最繁忙,網(wǎng)絡(luò)瓶頸位于何處等等問題。因此網(wǎng)絡(luò)分析工具是用于網(wǎng)絡(luò)管理的寶
貴系統(tǒng)工具。為了防止數(shù)據(jù)被濫用的網(wǎng)絡(luò)分析工具截獲,關(guān)鍵還是要在網(wǎng)絡(luò)的物理結(jié)構(gòu)上解決。常用的方法是使用交換機(jī)或網(wǎng)橋?qū)⑿湃尉W(wǎng)絡(luò)和不信任網(wǎng)絡(luò)分隔開,可
以防止外部網(wǎng)段竊聽內(nèi)部數(shù)據(jù)傳輸,但仍然不能解決內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)相互通信時(shí)的數(shù)據(jù)安全問題。如果沒有足夠的經(jīng)費(fèi)將網(wǎng)絡(luò)上的共享集線器升級為以太網(wǎng)交換
機(jī),可以使用FreeBSD系統(tǒng)執(zhí)行網(wǎng)橋任務(wù)。這需要使用option BRIDGE編譯選項(xiàng)重新定制內(nèi)核,此后使用bridge命令啟動(dòng)網(wǎng)橋功能。
tcpdump
采用命令行方式,它的命令格式為:
tcpdump
[ -adeflnNOpqStvx ] [ -c 數(shù)量 ] [ -F 文件名 ]
[ -i 網(wǎng)絡(luò)接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 類型 ] [ -w 文件名 ] [表達(dá)式 ]
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
(1).
tcpdump
的選項(xiàng)介紹
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
-a 將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字;
-d 將匹配信息包的代碼以人們能夠理解的匯編格式給出;
-dd 將匹配信息包的代碼以c語言程序段的格式給出;
-ddd 將匹配信息包的代碼以十進(jìn)制的形式給出;
-e 在輸出行打印出數(shù)據(jù)鏈路層的頭部信息;
-f 將外部的Internet地址以數(shù)字的形式打印出來;
-l 使標(biāo)準(zhǔn)輸出變?yōu)榫彌_行形式;
-n 不把網(wǎng)絡(luò)地址轉(zhuǎn)換成名字;
-t 在輸出的每一行不打印時(shí)間戳;
-v 輸出一個(gè)稍微詳細(xì)的信息,例如在ip包中可以包括ttl和服務(wù)類型的信息;
-vv 輸出詳細(xì)的報(bào)文信息;
-c 在收到指定的包的數(shù)目后,
tcpdump
就會停止;
-F 從指定的文件中讀取表達(dá)式,忽略其它的表達(dá)式;
-i 指定監(jiān)聽的網(wǎng)絡(luò)接口;
-r 從指定的文件中讀取包(這些包一般通過-w選項(xiàng)產(chǎn)生);
-w 直接將包寫入文件中,并不分析和打印出來;
-T 將監(jiān)聽到的包直接解釋為指定的類型的報(bào)文,常見的類型有rpc (遠(yuǎn)程過程調(diào)用)和snmp(簡單網(wǎng)絡(luò)管理協(xié)議;)
(2).
tcpdump
的表達(dá)式介紹
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
表達(dá)式是一個(gè)正則表達(dá)式,
tcpdump
利用它作為過濾報(bào)文的條件,如果一個(gè)報(bào)文滿足表達(dá)式的條件,則這個(gè)報(bào)文將會被捕獲。如果沒有給出任何條件,則網(wǎng)絡(luò)上所有的信息包將會被截獲。在表達(dá)式中一般如下幾種類型的關(guān)鍵字。
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
第一種是關(guān)于類型的關(guān)鍵字,主要包括host,net,port, 例如 host 210.27.48.2,指明
210.27.48.2是一臺主機(jī),net 202.0.0.0 指明 202.0.0.0是一個(gè)網(wǎng)絡(luò)地址,port 23
指明端口號是23。如果沒有指定類型,缺省的類型是host.
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
第二種是確定傳輸方向的關(guān)鍵字,主要包括src , dst ,dst or src, dst and src
,這些關(guān)鍵字指明了傳輸?shù)姆较颉Ee例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net
202.0.0.0 指明目的網(wǎng)絡(luò)地址是202.0.0.0 。如果沒有指明方向關(guān)鍵字,則缺省是src or dst關(guān)鍵字。
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
第三種是協(xié)議的關(guān)鍵字,主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分布式光纖數(shù)據(jù)接口網(wǎng)絡(luò))上的特定
的網(wǎng)絡(luò)協(xié)議,實(shí)際上它是"ether"的別名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協(xié)議包當(dāng)作ether的包進(jìn)行處理和
分析。其他的幾個(gè)關(guān)鍵字就是指明了監(jiān)聽的包的協(xié)議內(nèi)容。如果沒有指定任何協(xié)議,則
tcpdump
將會監(jiān)聽所有協(xié)議的信息包。
除了這三種類型的關(guān)鍵字之外,其他重要的關(guān)鍵字如下:gateway,
broadcast,less,greater,還有三種邏輯運(yùn)算,取非運(yùn)算是 'not ' '! ',
與運(yùn)算是'and','&&';或運(yùn)算 是'or'
,'││';這些關(guān)鍵字可以組合起來構(gòu)成強(qiáng)大的組合條件來滿足人們的需要,下面舉幾個(gè)例子來說明。
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
A想要截獲所有210.27.48.1 的主機(jī)收到的和發(fā)出的所有的數(shù)據(jù)包:
#
tcpdump
host 210.27.48.1
B想要截獲主機(jī)210.27.48.1 和主機(jī)210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中適用 括號時(shí),一定要
#
tcpdump
host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
C如果想要獲取主機(jī)210.27.48.1除了和主機(jī)210.27.48.2之外所有主機(jī)通信的ip包,使用命令:
#
tcpdump
ip host 210.27.48.1 and ! 210.27.48.2
D如果想要獲取主機(jī)210.27.48.1接收或發(fā)出的telnet包,使用如下命令:
#
tcpdump
tcp port 23 host 210.27.48.1
(3).
tcpdump
的輸出結(jié)果介紹
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
下面我們介紹幾種典型的
tcpdump
命令的輸出信息
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
A,數(shù)據(jù)鏈路層頭信息
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
使用命令
#
tcpdump
--e host ice
ice 是一臺裝有
linux
的主機(jī),她的MAC地址是0:90:27:58:AF:1A
H219是一臺裝有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一條命令的輸出結(jié)果如下所示:
21:50:12.847509 eth0 ice.telne
t 0:0(0) ack 22535 win 8760 (DF)
分析:21:50:12是顯示的時(shí)間, 847509是ID號,eth0 表示從網(wǎng)絡(luò)接口設(shè)備發(fā)送數(shù)據(jù)包, 8:0:20:79:5b:46是主機(jī)H219的MAC地址,它表明是從源地址H219發(fā)來的數(shù)據(jù)包.
0:90:27:58:af:1a是主機(jī)ICE的MAC地址,表示該數(shù)據(jù)包的目的地址是ICE . ip 是表明該數(shù)據(jù)包是IP數(shù)據(jù)包,60
是數(shù)據(jù)包的長度, h219.33357 > ice.telnet
表明該數(shù)據(jù)包是從主機(jī)H219的33357端口發(fā)往主機(jī)ICE的TELNET(23)端口. ack 22535
表明對序列號是222535的包進(jìn)行響應(yīng). win 8760表明發(fā)送窗口的大小是8760.
B,ARP包的TCPDUMP輸出信息
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
使用命令
#
tcpdump
arp
得到的輸出結(jié)果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 表明從主機(jī)發(fā)出該數(shù)據(jù)包, arp表明是ARP請求包,
who-has route tell ice表明是主機(jī)ICE請求主機(jī)ROUTE的MAC地址。
0:90:27:58:af:1a是主機(jī)ICE的MAC地址。
C,TCP包的輸出信息
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
用TCPDUMP捕獲的TCP包的一般輸出信息是:
src > dst: flags data-seqno ack window urgent options
src
> dst:表明從源地址到目的地址, flags是TCP包中的標(biāo)志信息,S 是SYN標(biāo)志, F (FIN), P (PUSH) , R
(RST) "." (沒有標(biāo)記); data-seqno是數(shù)據(jù)包中的數(shù)據(jù)的順序號, ack是下次期望的順序號,
window是接收緩存的窗口大小, urgent表明數(shù)據(jù)包中是否有緊急指針. Options是選項(xiàng).
D,UDP包的輸出信息
[color="#eeeeee"]http://anheng.com.cn/news/24/586.html
用TCPDUMP捕獲的UDP包的一般輸出信息是:
route.port1 > ice.port2: udp lenth
UDP十分簡單,上面的輸出行表明從主機(jī)ROUTE的port1端口發(fā)出的一個(gè)UDP數(shù)據(jù)包到主機(jī)ICE的port2端口,類型是UDP, 包的長度是lenth
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u1/41263/showart_448037.html |
|