如何借助Sniffer來(lái)診斷Linux網(wǎng)絡(luò)故障?
夫運(yùn)維者、善假于物也、形如 Sniffer(嗅探器)。Sniffer 在網(wǎng)絡(luò)安全領(lǐng)域是一把雙刃劍、或被黑客作為網(wǎng)絡(luò)攻擊工具、或協(xié)助運(yùn)維診斷網(wǎng)絡(luò)故障,本文以 Linux 平臺(tái)下三個(gè)常用的網(wǎng)絡(luò)嗅探器 Tcpdump、Ethereal 和 EtherApe 為例,介紹如何借助 Sniffer 來(lái)診斷網(wǎng)絡(luò)故障,從而保障網(wǎng)絡(luò)高效安全地運(yùn)行,但由于 Sniffer 實(shí)在太強(qiáng)大、本文也只是入門性的做些介紹、有興趣的朋友可進(jìn)一步學(xué)習(xí)。
● Tcpdump是一個(gè)命令行方式的網(wǎng)絡(luò)流量監(jiān)測(cè)工具。它誕生的時(shí)間較早,是許多圖形化嗅探器的雛形
● Ethereal是一個(gè)圖形化的網(wǎng)絡(luò)流量監(jiān)測(cè)工具,比命令行方式的Tcpdump友好很多,可以實(shí)時(shí)地觀看捕獲過(guò)程
● EtherApe也是一個(gè)圖形化的網(wǎng)絡(luò)流量監(jiān)測(cè)工具、與Ethereal不同,EtherApe可以通過(guò)對(duì)主機(jī)間的連接進(jìn)行檢測(cè)
?、?Tcpdump
在網(wǎng)絡(luò)性能急劇下降的時(shí)候,可以通過(guò) Tcpdump 來(lái)分析原因,找出造成網(wǎng)絡(luò)阻塞的根源,Tcpdump 能截獲網(wǎng)卡上收到的數(shù)據(jù)包,并能夠協(xié)助網(wǎng)絡(luò)管理員對(duì)其中的內(nèi)容進(jìn)行相應(yīng)的分析。
對(duì)于運(yùn)維人員、了解如何使用 Tcpdump 來(lái)捕獲感興趣的數(shù)據(jù)包是一項(xiàng)必須掌握的基本功。
?、?Tcpdump 安裝
GNU/Linux 發(fā)行版缺省都會(huì)安裝、如果沒(méi)有可到:http://www.tcpdump.org 下載。
⑵ Tcpdump 命令行選項(xiàng)
Tcpdump是一個(gè)命令行方式的網(wǎng)絡(luò)嗅探器、如果不進(jìn)行過(guò)濾,過(guò)多數(shù)量的包會(huì)使運(yùn)維人員很難理清頭緒。
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 : 輸出較詳細(xì)的信息,例如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ù)包直接寫(xiě)入指定的文件中,不對(duì)其進(jìn)行分析和輸出
-T : 將截獲的數(shù)據(jù)包直接解釋為指定類型的報(bào)文
?、?例子
?、?從指定的網(wǎng)絡(luò)接口截獲5個(gè) ARP 數(shù)據(jù)包,并且不將網(wǎng)絡(luò)地址轉(zhuǎn)換成主機(jī)名
[plain] view plaincopy [root@Rocky ~]# tcpdump arp -i eth0 -c 5 -n tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 10:59:46.728425 arp who-has 192.168.1.1 tell 192.168.1.110 11:00:17.315719 arp who-has 192.168.1.1 tell 192.168.1.111 11:00:17.317911 arp who-has 192.168.1.1 tell 192.168.1.111 11:00:17.418271 arp who-has 192.168.1.1 tell 192.168.1.111 11:00:17.418980 arp who-has 192.168.1.1 tell 192.168.1.111 5 packets captured 5 packets received by filter 0 packets dropped by kernel
10:59:46:為截獲數(shù)據(jù)包的時(shí)間
728425 :為毫秒數(shù)
arp:表明該數(shù)據(jù)包時(shí) ARP 請(qǐng)求
who-has 192.168.1.1 tell 192.168.1.110:表示 110 請(qǐng)求 1 的 MAC 地址
?、?截獲主機(jī)“9.185.10.57”所有收到和發(fā)出的數(shù)據(jù)包
tcpdump host 9.185.10.57
?、?截獲在主機(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\)
④ 截獲主機(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
?、?截獲主機(jī)“9.185.10.57”接收或發(fā)出的FTP(端口號(hào)為21)數(shù)據(jù)包
tcpdump tcp port 21 host 9.185.10.57
⑥ 如果懷疑系統(tǒng)正受到(DoS)攻擊,可通過(guò)截獲發(fā)往本機(jī)的所有ICMP包,確定目前是否有大量的ping流向服務(wù)器
tcpdump icmp -n -i eth0
?、?Ethereal
⑴ 下載并安裝
***請(qǐng)確認(rèn) libpcap 包已經(jīng)安裝****
# cp ethereal-0.9.9.tar.bz2 /usr/local/src/ # cd /usr/local/src/ # bzip2 -d ethereal-0.9.9.tar.bz2 # tar xvf ethereal-0.9.9.tar # cd ethereal-0.9.9 # ./configure # make # make install
⑵ 簡(jiǎn)單的捕獲過(guò)程
大概可分 2 步:
?、?點(diǎn)擊 "filter":可直接在預(yù)置的條件里選擇、也可自己新建、比如:
Filter name:Rocky
Filter string: host 124.127.185.106
?、?點(diǎn)擊 "capture "、在 "capture filter"選項(xiàng)框里面填上過(guò)濾條件
?、?EtherApe
?、?安裝
# gunzip etherape-0.9.11.tar.gz # tar vxf etherape-0.9.11.tar # cd etherape-0.9.11 # ./configure # make # make install
⑵ 簡(jiǎn)單的捕獲過(guò)程
大致如下:
Ⅰ 單擊“Pref.”按鈕,打開(kāi)“Preferences”,在“Capture”屬性頁(yè)中“Capture filter”
?、?如果對(duì)IP數(shù)據(jù)包感興趣,這時(shí)可以將EtherApe切換到IP模式。單擊“Capture”菜單,選擇“Mode”菜單項(xiàng)