如何借助Sniffer來診斷Linux網絡故障?
夫運維者、善假于物也、形如 Sniffer(嗅探器)。Sniffer 在網絡安全領域是一把雙刃劍、或被黑客作為網絡攻擊工具、或協助運維診斷網絡故障,本文以 Linux 平臺下三個常用的網絡嗅探器 Tcpdump、Ethereal 和 EtherApe 為例,介紹如何借助 Sniffer 來診斷網絡故障,從而保障網絡高效安全地運行,但由于 Sniffer 實在太強大、本文也只是入門性的做些介紹、有興趣的朋友可進一步學習。
● Tcpdump是一個命令行方式的網絡流量監測工具。它誕生的時間較早,是許多圖形化嗅探器的雛形
● Ethereal是一個圖形化的網絡流量監測工具,比命令行方式的Tcpdump友好很多,可以實時地觀看捕獲過程
● EtherApe也是一個圖形化的網絡流量監測工具、與Ethereal不同,EtherApe可以通過對主機間的連接進行檢測
㈠ Tcpdump
在網絡性能急劇下降的時候,可以通過 Tcpdump 來分析原因,找出造成網絡阻塞的根源,Tcpdump 能截獲網卡上收到的數據包,并能夠協助網絡管理員對其中的內容進行相應的分析。
對于運維人員、了解如何使用 Tcpdump 來捕獲感興趣的數據包是一項必須掌握的基本功。
⑴ Tcpdump 安裝
GNU/Linux 發行版缺省都會安裝、如果沒有可到:http://www.tcpdump.org 下載。
⑵ Tcpdump 命令行選項
Tcpdump是一個命令行方式的網絡嗅探器、如果不進行過濾,過多數量的包會使運維人員很難理清頭緒。
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 : 將截獲的數據包直接解釋為指定類型的報文
⑶ 例子
① 從指定的網絡接口截獲5個 ARP 數據包,并且不將網絡地址轉換成主機名
[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:為截獲數據包的時間
728425 :為毫秒數
arp:表明該數據包時 ARP 請求
who-has 192.168.1.1 tell 192.168.1.110:表示 110 請求 1 的 MAC 地址
② 截獲主機“9.185.10.57”所有收到和發出的數據包
tcpdump host 9.185.10.57
③ 截獲在主機“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\)
④ 截獲主機“9.185.10.57”和除主機“9.186.10.58”外所有其它主機之間通信的IP數據包
tcpdump ip host 9.185.10.57 and ! 9.185.10.58
⑤ 截獲主機“9.185.10.57”接收或發出的FTP(端口號為21)數據包
tcpdump tcp port 21 host 9.185.10.57
⑥ 如果懷疑系統正受到(DoS)攻擊,可通過截獲發往本機的所有ICMP包,確定目前是否有大量的ping流向服務器
tcpdump icmp -n -i eth0
㈡ Ethereal
⑴ 下載并安裝
***請確認 libpcap 包已經安裝****
# 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
⑵ 簡單的捕獲過程
大概可分 2 步:
Ⅰ 點擊 "filter":可直接在預置的條件里選擇、也可自己新建、比如:
Filter name:Rocky
Filter string: host 124.127.185.106
Ⅱ 點擊 "capture "、在 "capture filter"選項框里面填上過濾條件
㈢ EtherApe
⑴ 安裝
# gunzip etherape-0.9.11.tar.gz # tar vxf etherape-0.9.11.tar # cd etherape-0.9.11 # ./configure # make # make install
⑵ 簡單的捕獲過程
大致如下:
Ⅰ 單擊“Pref.”按鈕,打開“Preferences”,在“Capture”屬性頁中“Capture filter”
Ⅱ 如果對IP數據包感興趣,這時可以將EtherApe切換到IP模式。單擊“Capture”菜單,選擇“Mode”菜單項