Tcpdump(linux)下载、安装、使用说明
Tcpdump(linux)下載、安裝、使用說(shuō)明
對(duì)于網(wǎng)絡(luò)管理人員來(lái)說(shuō),使用嗅探器能夠隨時(shí)掌控網(wǎng)絡(luò) 的實(shí)際情況,在網(wǎng)絡(luò)性能急劇下降的時(shí)候,能夠通過(guò)嗅探器來(lái)分析原因,找出造成網(wǎng)絡(luò)阻塞的根源。
Tcpdump就是Linux平臺(tái)下一個(gè)以命令行方式運(yùn)行的網(wǎng)絡(luò)流量監(jiān)測(cè)工具。他能截獲網(wǎng)卡上收到的數(shù)據(jù)包,并能夠協(xié)助網(wǎng)絡(luò)管理員對(duì)其中的內(nèi)容進(jìn)行相應(yīng)的分析。?
嗅探器能夠截獲指定接口或任何接口的數(shù)據(jù)包,這取決于如何對(duì)嗅探器進(jìn)行配置。缺省情況下嗅探器一般會(huì)顯示任何從網(wǎng)絡(luò)上截獲的數(shù)據(jù)包,但通常會(huì)因?yàn)閿?shù)據(jù)量過(guò)大而使網(wǎng)絡(luò)管理員理不清頭緒。因此,嗅探器一般都提供有相應(yīng)的機(jī)制來(lái)對(duì)截獲的數(shù)據(jù)包進(jìn)行過(guò)濾,從而只顯示符合特定需要的數(shù)據(jù)包。
Tcpdump提供了一整套完善的規(guī)則來(lái)對(duì)截獲的數(shù)據(jù)包進(jìn) 行過(guò)濾,由于大多數(shù)圖像化的嗅探器都使用類似的過(guò)濾機(jī)制,因此對(duì)Linux網(wǎng)絡(luò)管理員來(lái)說(shuō),了解如何使用Tcpdump來(lái)捕獲感興趣的數(shù)據(jù)包是一項(xiàng)必須掌控的基本功。?
Tcpdump的安裝?
在一些Linux發(fā)行版中,Tcpdump通常作為標(biāo)準(zhǔn)的軟件包被默認(rèn)安裝,執(zhí)行“tcpdump”命令能夠確定是否已安裝了Tcpdump。假如系統(tǒng)中還沒(méi)有安裝Tcpdump
1、下載地址
可到“http://www.tcpdump.org”下載最新的Tcpdump源碼包。
注意:
因tcpdump的運(yùn)行需要pcap的支持,所以最好先行安裝pcap軟件包,另外還要注意軟件的版本問(wèn)題,建議按照網(wǎng)站上匹配的軟件包tcpdump和pcap一同下載。
前期在測(cè)試時(shí)我使用的yum 安裝的pcap包(版本0.9.*),然后在網(wǎng)上下載了tcpdump(版本為4.3.0),在后期編譯安裝tcpdump時(shí)總是出錯(cuò)!!!后來(lái)我yum remove pcap ?后重新使用源碼包安裝,一次成功!
2、下面以tcpdump-4.3.0.tar.gz ???libpcap-1.3.0.tar.gz為例,講述如何安裝Tcpdump
此處使用的操作系統(tǒng)是?CentOS release 5.5 (Final)
在編譯Tcpdump之前,應(yīng)先確定pcap庫(kù)(libpcap)已安裝完畢。這個(gè)庫(kù)是編譯Tcpdump時(shí)所必需的。
安裝過(guò)程非常簡(jiǎn)單如下示:
?tar -zxvf libpcap-1.3.0.tar.gz?
??cd libpcap-1.3.0
?./configure
?make?
?make install
該庫(kù)已安裝完畢,下面執(zhí)行下面的命令來(lái)編譯并安裝Tcpdump:?
tar -zxvf tcpdump-4.3.0.tar.gz?
cd tcpdump-4.3.0
?./configure
?make
make installTcpdump的命令行選項(xiàng)?
Tcpdump是個(gè)命令行方式的網(wǎng)絡(luò)嗅探器。他通過(guò)使用命令選項(xiàng)來(lái)過(guò)濾網(wǎng)卡截獲的數(shù)據(jù)包,假如不進(jìn)行過(guò)濾,過(guò)多數(shù)量的包會(huì)使網(wǎng)絡(luò)管理員很難理清頭緒。Tcpdump的命令格式如下:?
tcpdump [ -adeflnNOpqRStuvxX ] [ -c 數(shù)量 ] [ -C 文檔尺寸 ] [ -F 文檔名 ] [ -i 網(wǎng)絡(luò)接口 ] [ -m 文檔名 ] [ -r 文檔名 ] [ -s 長(zhǎng)度 ] [ -T 類型 ] [ -w 文檔名 ] [ -E algo:secret ] [ 表達(dá)式 ]?
表1 Tcpdump常用命令行選項(xiàng)? -a 將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成容易識(shí)別的名字?
-d 將已截獲的數(shù)據(jù)包的代碼以人容易理解的格式輸出;?
-dd 將已截獲的數(shù)據(jù)包的代碼以C程式的格式輸出;?
-ddd 將已截獲的數(shù)據(jù)包的代碼以十進(jìn)制格式輸出;?
-e 輸出數(shù)據(jù)鏈路層的頭部信息;?
-f 將internet地址以數(shù)字形式輸出;?
-l 將標(biāo)準(zhǔn)輸出變?yōu)樾芯彌_方式;?
-n 不將網(wǎng)絡(luò)地址轉(zhuǎn)換成易識(shí)別的主機(jī)名,只以數(shù)字形式列出主機(jī)地址(如IP地址),這樣能夠避免DNS查詢;?
-t 不輸出時(shí)間戳;?
-v 輸出較周詳?shù)男畔?#xff0c;例如IP包中的TTL和服務(wù)類型信息;?
-vv 輸出詳盡的報(bào)文信息;?
-c 在捕獲指定個(gè)數(shù)的數(shù)據(jù)包后退出;?
-F 從指定的文檔中讀取過(guò)濾規(guī)則,忽略命令行中指定的其他過(guò)濾規(guī)則;?
-i 指定監(jiān)聽(tīng)的網(wǎng)絡(luò)接口;?
-r 從指定的文檔中讀取數(shù)據(jù)包(該文檔一般通過(guò)-w選項(xiàng)產(chǎn)生);?
-w 將截獲的數(shù)據(jù)包直接寫入指定的文檔中,不對(duì)其進(jìn)行分析和輸出;?
-T 將截獲的數(shù)據(jù)包直接解釋為指定類型的報(bào)文,現(xiàn)在支持的類型有cnfp、rpc、rtp、snmp、vat和wb。?
表1給出了一些常用的Tcpdump命令行選項(xiàng),使用這些選項(xiàng)能夠過(guò)濾出真正感興趣的數(shù)據(jù)包。?
使用Tcpdump的命令行選項(xiàng)能夠很方便地過(guò)濾出需要的數(shù)據(jù)包。 例如,要過(guò)濾掉任何除ARP請(qǐng)求和應(yīng)答的通信數(shù)據(jù),能夠輸入“tcpdump arp”命令。該命令只對(duì)ARP的請(qǐng)求和應(yīng)答信息進(jìn)行截獲,在Tcpdump的輸出信息中,請(qǐng)求是“arp who-has”這樣的條目,而應(yīng)答則是“arp reply”這樣的條目,如圖1所示。?
圖1 ARP過(guò)濾?
假如要做更多的處理,比如從指定的網(wǎng)絡(luò)接口截獲5個(gè)ARP數(shù)據(jù)包,并且不將網(wǎng)絡(luò)地址轉(zhuǎn)換成主機(jī)名,則能夠用命令“tcpdump arp -i eth0 -c 5 -n”。?
Tcpdump的過(guò)濾表達(dá)式?
Tcpdump的過(guò)濾表達(dá)式是個(gè)正則表達(dá)式,Tcpdump利用其作為過(guò)濾數(shù)據(jù)包的條件。假如一個(gè)數(shù)據(jù)包滿足表達(dá)式的條件,則這個(gè)數(shù)據(jù)據(jù)包將會(huì)被捕獲;假如不指定表達(dá)式,則在網(wǎng)絡(luò)上任何兩臺(tái)主機(jī)間的任何數(shù)據(jù)包都將被截獲。過(guò)濾表達(dá)式的作用就是使Tcpdump只輸出網(wǎng)絡(luò)管理員所需要的數(shù)據(jù),如一個(gè)指定的網(wǎng)絡(luò)接口和特定主機(jī)間的IP數(shù)據(jù)包。?
Tcpdump的過(guò)濾表達(dá)式中一般有如下幾種類型的關(guān)鍵字:?
◆ 類型關(guān)鍵字?
這類關(guān)鍵字用于指定主機(jī)、網(wǎng)絡(luò)或端口,包括host、net和port三個(gè)關(guān)鍵字 例如,能夠用“host 9.185.10.57”來(lái)標(biāo)明監(jiān)聽(tīng)的主機(jī);用“net 9.185.0.0”來(lái)標(biāo)明監(jiān)聽(tīng)的網(wǎng)絡(luò);用“port 23”來(lái)標(biāo)明監(jiān)聽(tīng)的端口。假如沒(méi)有在表達(dá)式中指明類型,則缺省的類型為host。?
◆ 方向關(guān)鍵字?
這類關(guān)鍵字用于指定截獲的方向,包括dst、src、dst or src、dst and src四個(gè)關(guān)鍵字。 例如,能夠用src 9.185.10.57來(lái)指明截獲的數(shù)據(jù)包中的源主機(jī)地址;用“dst net 9.185.0.0”來(lái)指明截獲的數(shù)據(jù)包中的目標(biāo)網(wǎng)絡(luò)地址。假如沒(méi)有在表達(dá)式中指明方向,則缺省的方向?yàn)椤癲st or src”,即兩個(gè)方向的數(shù)據(jù)包都將被捕獲。對(duì)于數(shù)據(jù)鏈路層協(xié)議(如SLIP和PPP),使用inbound和outbound來(lái)定義方向。?
◆ 協(xié)議關(guān)鍵字?
這類關(guān)鍵字用于指定要截獲的數(shù)據(jù)包所屬的協(xié)議,包括ether、fddi、tr、ip、ip6、arp、rarp、decnet、tcp和udp等關(guān)鍵字。?關(guān)鍵字fddi指明在FDDI(分布式光纖數(shù)據(jù)接口網(wǎng)絡(luò))上的特定網(wǎng)絡(luò)協(xié)議。實(shí)際上他是ether的別名。fddi和ether具備類似的源地址和目標(biāo)地址,所以能夠?qū)ddi協(xié)議包當(dāng)作ether的包進(jìn)行分析和處理。其他幾個(gè)關(guān)鍵字只是指定了所要截獲的協(xié)議數(shù)據(jù)包。假如沒(méi)有在表達(dá)式中指明協(xié)議,則 Tcpdump會(huì)截獲任何協(xié)議的數(shù)據(jù)包。?
除了上述三種類型的關(guān)鍵字外,Tcpdump的過(guò)濾表達(dá)式中還能夠指定的一些重要關(guān)鍵字 包括 gateway、broadcast、multicast、less、greater。這些關(guān)鍵字對(duì)于監(jiān)聽(tīng)網(wǎng)絡(luò)中的廣播和多播很有幫助。關(guān)于這些關(guān)鍵字的更多信息和用法請(qǐng)參考Tcpdump的man手冊(cè)。
在Tcpdump的過(guò)濾表達(dá)式中,各類關(guān)鍵字之間還能夠通過(guò)布爾運(yùn)算符來(lái)構(gòu)成組合表達(dá)式,以滿足實(shí)際運(yùn)用時(shí)的需要。 布爾運(yùn)算符包括取非運(yùn)算符(not 或!)、和運(yùn)算符(and或&&)、或運(yùn)算符(or或||),使用布爾運(yùn)算符能夠?qū)⒈磉_(dá)式組合起來(lái)構(gòu)成強(qiáng)大的組合條件,從而能夠?qū)?Tcpdump的過(guò)濾器做進(jìn)一步細(xì)化。?
下面給出幾個(gè)使用Tcpdump過(guò)濾數(shù)據(jù)包的例子,嗅探器提供的過(guò)濾表達(dá)式對(duì)于管理員監(jiān)測(cè)網(wǎng)絡(luò)運(yùn)行狀況很重要:?
1. 假如想要截獲主機(jī)“9.185.10.57”任何收到和發(fā)出的數(shù)據(jù)包,能夠使用如下命令:?
# tcpdump host 9.185.10.57?
2. 假如想要截獲在主機(jī)“9.185.10.57”和主機(jī)“9.185.10.58”或“9.185.10.59”之間傳遞的數(shù)據(jù)包,能夠使用如下命令:?
# tcpdump host 9.185.10.57 and \(9.185.10.58 or 9.185.10.59\)?
需要注意的是,在使用布爾運(yùn)算符構(gòu)成組合表達(dá)式時(shí),有時(shí)需要使用括號(hào)來(lái)表達(dá)復(fù)雜的邏輯關(guān)系。假如要在命令行中使用括號(hào),一定要用轉(zhuǎn)義字符(“\”)對(duì)括號(hào)進(jìn)行轉(zhuǎn)義,否則命令行解釋器將給出語(yǔ)法錯(cuò)誤的提示。?
3. 假如想要截獲主機(jī)“9.185.10.57”和除主機(jī)“9.186.10.58”外任何其他主機(jī)之間通信的IP數(shù)據(jù)包,能夠使用如下命令:?
# tcpdump ip host 9.185.10.57 and ! 9.185.10.58?
4. 假如想要截獲主機(jī)“9.185.10.57”接收或發(fā)出的FTP(端口號(hào)為21)數(shù)據(jù)包,能夠使用如下命令:?
# tcpdump tcp port 21?and?host 9.185.10.57 ? (注意and的書寫,不加and總是提示語(yǔ)法錯(cuò)誤)
5. 假如懷疑系統(tǒng)正受到拒絕服務(wù)(DoS)攻擊,網(wǎng)絡(luò)管理員能夠通過(guò)截獲發(fā)往本機(jī)的任何ICMP包,來(lái)確定現(xiàn)在是否有大量的ping指令流向服務(wù)器,此時(shí)就能夠使用下面的命令:?
# tcpdump icmp -n -i eth0
Tcpdump的輸出結(jié)果?
在對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)包進(jìn)行過(guò)濾后,Tcpdump的輸出結(jié)果中包含網(wǎng)絡(luò)管理員關(guān)心的網(wǎng)絡(luò)狀態(tài)信息。由于Tcpdump只是個(gè)命令行方式的嗅探器,因而其輸出結(jié)果不是很直觀,下面以幾種典型的輸出信息為例,介紹如何對(duì)Tcpdump的輸出結(jié)果進(jìn)行分析。?
1. 數(shù)據(jù)鏈路層頭信息?
使用“tcpdump -e host tiger”命令截獲主機(jī)“tiger”任何發(fā)出和收到的數(shù)據(jù)包,并在輸出結(jié)果中包含數(shù)據(jù)鏈路層的頭部信息。?
“tiger”是一臺(tái)裝有Linux的主機(jī),其MAC地址是00:D0:59:BF:DA:06;“mag”是一臺(tái)裝有SCO Unix的工作站,其MAC地址是08:90:B0:2F:AF:46,上述命令的輸出結(jié)果如下:?
20:15:20.735429 eth0?
< 08:90:b0:2f:af:46 00:d0:59:bf:da:06 ip 60: mag.36579 >?
tiger.ftp 0:0(0) ack 25565 win 8970 (DF)?
在 輸出的信息中,“20:15:20”為截獲數(shù)據(jù)包的時(shí)間,“735429”是毫秒數(shù),“eth0 <”表示從網(wǎng)絡(luò)接口eth0接收該數(shù)據(jù)包(若為“eth0 >”,則表示從網(wǎng)絡(luò)接口eth0發(fā)送數(shù)據(jù)包)。“08:90:b0:2f:af:46”是主機(jī)mag的MAC地址,指明發(fā)送該數(shù)據(jù)包的源主機(jī)為 “mag”,“00:d0:59:bf:da:06”是主機(jī)tiger的MAC地址,指明該數(shù)據(jù)包發(fā)送的目標(biāo)主機(jī)為“tiger”。“ip”表明該數(shù)據(jù)包 是IP數(shù)據(jù)包,“60”是數(shù)據(jù)包的長(zhǎng)度,“mag.36579 > tiger.ftp”表明該數(shù)據(jù)包是從主機(jī)“mag”的36579端口發(fā)往主機(jī)“tiger”的FTP(21)端口。“ack 25565”表示對(duì)序列號(hào)為25565的包進(jìn)行確認(rèn),“win 8970”則指明發(fā)送窗口的大小為8760。?
2. ARP包的輸出信息?
若使用“tcpdump arp -c 2”命令截獲ARP數(shù)據(jù)包,得到的輸出結(jié)果可能是:?
20:42:22.713502 eth0?
> arp who-has mag tell tiger?
(00:d0:59:bf:da:06)?
20:42:22.713907 eth0?
< arp reply mag is-at 08:90:b0:2f:af:46?
(00:d0:59:bf:da:06)?
在 輸出的信息中,“20:42:22”為截獲數(shù)據(jù)包的時(shí)間;“713502”和“713907”為毫秒數(shù);“eth0 >”表明從主機(jī)發(fā)出該數(shù)據(jù)包;“eth0 <”表明從主機(jī)接收該數(shù)據(jù)包。“arp”表明該數(shù)據(jù)包是ARP請(qǐng)求,“who-has mag tell tiger”表明是主機(jī)“tiger”請(qǐng)求主機(jī)“mag”的MAC地址,“00:d0:59:bf:da:06”是主機(jī)“tiger”的MAC地址。 “reply mag is-at”表明主機(jī)“mag”響應(yīng)“tiger”的ARP請(qǐng)求,“08:90:b0:2f:af:46”是主機(jī)“mag”的MAC地址。?
3. TCP包的輸出信息?
用Tcpdump截獲的TCP包的一般輸出格式如下:?
src > dst: flags data-sequno ack window urgent options?
“src > dst:”標(biāo)明從源地址到目的地址;flags是TCP包中的標(biāo)志信息,包括S(SYN)標(biāo)志、F(FIN)標(biāo)志、P(PUSH)標(biāo)志、R(RST)標(biāo)志 和“.”(沒(méi)有標(biāo)志);data-sequno是數(shù)據(jù)包中的數(shù)據(jù)序列號(hào);ack是下次期望的數(shù)據(jù)序列號(hào);window是接收緩存的窗口大小;urgent 標(biāo)明數(shù)據(jù)包中是否有緊急指針;options是可能的選項(xiàng)值。?
4. UDP包的輸出信息?
用Tcpdump截獲的UDP包的一般輸出格式如下:?
src.port1 > dst.port2: udp lenth?
UDP中包含的信息很簡(jiǎn)單。上面的輸出結(jié)果表明從主機(jī)“src”的“port1”端口發(fā)出的一個(gè)UDP數(shù)據(jù)包被送到主機(jī)“dst”的“port2”端口,數(shù)據(jù)包的類型是UDP,其長(zhǎng)度為“l(fā)enth”。?
通 過(guò)上面的介紹能夠知道,Tcpdump是個(gè)命令行方式的嗅探器。他能夠根據(jù)需要顯示出經(jīng)過(guò)一個(gè)網(wǎng)絡(luò)接口的任何數(shù)據(jù)包,供網(wǎng)絡(luò)管理員對(duì)網(wǎng)絡(luò)進(jìn)行檢測(cè)。但由于 采用的是命令行方式,對(duì)這些數(shù)據(jù)包的分析可能會(huì)比較困難。利用Tcpdump提供的表達(dá)式過(guò)濾一些截獲的數(shù)據(jù)包,能夠從截獲的大量數(shù)據(jù)包中提取出有用的信 息,從而能夠有針對(duì)性地對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)測(cè)。?
由于任何網(wǎng)絡(luò)嗅探器的原理都大體相似,因而Tcpdump的基本知識(shí)能夠應(yīng)用于幾乎任何的嗅 探器。Tcpdump是基于命令行方式的嗅探器,其輸出結(jié)果比較難于分析,因此很多網(wǎng)絡(luò)管理員都使用圖像化的嗅探器來(lái)檢測(cè)網(wǎng)絡(luò)故障,并處理可能存在的安全 問(wèn)題。下次將介紹兩個(gè)圖像化的網(wǎng)絡(luò)嗅探器—Ethereal和EhterApe。同Tcpdump相比,使用這兩個(gè)嗅探器的分析過(guò)程要簡(jiǎn)單許多。
總結(jié)
以上是生活随笔為你收集整理的Tcpdump(linux)下载、安装、使用说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: epoll机制:epoll_create
- 下一篇: Linux下编译带x264的ffmpeg