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