常見網路抓包工具和抓包分析
1、概述
在處理IP網路的故障時,經常使用乙太網抓包工具來查看和抓取IP網路上某些埠或某些網段的數據包,並對這些數據包進行分析,定位問題。
在 IMON項目里,使用抓包工具抓包進行分析的場景在EPG採集、引流模塊和軟終端監看模塊,一般情況下EPG 採集和引流模塊比較穩定,軟終端監看還涉及SS5代理,這部分出問題的幾率比較大,這是就有可能要現場維護人員抓包進行分析、排查、定位問題,確定是網路問題還是軟體問題,如果是軟體問題則要將抓回的包發給研發解決。
EPG 抓包可分為對鑒權過程、採集過程抓包驗證,主要是通過通過抓包分析與IPTV 鑒 權伺服器之間的TCP交互。
流媒體交互抓包可分為對組播、點播進行抓包,一般交互的協議分為IGMP、RTSP、RTMP等,組播一般是基於UDP的IGMP流,點播是基於RTP的RTSP流或基於TCP的RTMP流。
軟終端抓包主要是抓取軟終端與IPTV伺服器交互、SS5與IPTV伺服器交互的數據包,一般跟流媒體交互的報文協議差不多,也是分為組播IGMP 、點播 RTSP等協議,不過經過測試發現江蘇的部分組播(可能是用戶不同所致)發送的是RTSP的包。
2、常用抓包工具
2.1、WireShark
Wireshark是一個非常好用的抓包工具,當我們遇到一些和網路相關的問題時,可以通過這個工具進行分析,不過要說明的是,這只是一個工具,用法是非常靈活的。
過濾器的區別
捕捉過濾器(CaptureFilters ):用於決定將什麼樣的信息記錄在捕捉結果中。需要在開始捕捉前設置。
顯示過濾器(DisplayFilters ): 在捕捉結果中進行詳細查找。他們可以在得到捕捉結果後隨 意修改。
捕捉過濾器
Protocol(協議) :
可能的值 : ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果沒有特別指明是什麼協議,則默認使用所有支持的協議。
Direction(方向):
可能的值 : src, dst, src and dst, src or dst
如果沒有特別指明來源或目的地,則默認使用「 src or dst」作為關鍵字。
例如,」 host 10.2.2.2″與」 src or dst host 10.2.2.2″是一樣的。
Host(s):
可能的值:net, port, host, portrange.
如果沒有指定此值,則默認使用」host」關鍵字。 例如,」 src 10.1.1.1″與」 src host 10.1.1.1″相同。
Logical Operations(邏輯運算):
可能的值: not, and, or.
否( 「not」 )具有最高的優先順序。或(「 or」 )和與 (「 and」) 具有相同的優先順序,運算時從左至 右進行。
例如,
「not tcp port 3128 and tcp port 23 ″與」 (not tcp port 3128) and tcp port 23 ″相同。 「not tcp port 3128 and tcp port 23 ″與」 not (tcp port 3128 and tcp port 23) 」不同。
例子:
tcp dst port 3128//捕捉目的TCP埠為3128的封包。
ip src host 10.1.1.1 // 捕捉來源IP 地址為 10.1.1.1 的封包。
host 10.1.2.3 // 捕捉目的或來源IP 地址為10.1.2.3 的封包。
ether host e0-05-c5-44-b1-3c // 捕捉目的或來源MAC 地址為e0-05-c5-44-b1-3c 的封包。如果 你想抓本機與所有外網通訊的數據包時,可以將這裡的mac 地址換成路由的mac 地址即可。
src portrange 2000-2500// 捕捉來源為UDP 或 TCP ,並且埠號在2000 至 2500 範圍內的封包。
not imcp //顯示除了icmp 以外的所有封包。 ( icmp 通常被 ping 工具使用)
src host 10.7.2.12 and not dst net 10.200.0.0/16 //顯示來源IP 地址為10.7.2.12,但目的地不是10.200.0.0/16的封包。
(src host 10.4.1.12 orsrc net 10.6.0.0/16)and tcp dst portrange200-10000and dst net
10.0.0.0/8 // 捕捉來源IP 為 10.4.1.12 或者來源網路為10.6.0.0/16 ,目的地TCP埠號在200至10000之間,並且目的位於網路10.0.0.0/8內的所有封包。
src net 192.168.0.0/24
src net 192.168.0.0 mask 255.255.255.0//捕捉源地址為192.168.0.0 網路內的所有封包。 顯示過濾器
例子:
snmp || dns || icmp // 顯示 SNMP 或 DNS 或 ICMP 封包。
ip.addr == 10.1.1.1//顯示來源或目的IP 地址為10.1.1.1 的封包。
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6 //顯示來源不為10.1.2.3 或者目的不為10.4.5.6 的封包。 換句話說,顯示的封包將會為:
來源 IP:除了10.1.2.3 以外任意;
目的IP:任意
來源 IP:任意;
目的IP:除了10.4.5.6 以外任意
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6//顯示來源不為10.1.2.3 並且目的IP 不為 10.4.5.6 的 封包。
換句話說,顯示的封包將會為:
來源 IP:除了10.1.2.3 以外任意;同時須滿足,目的IP:除了10.4.5.6 以外任意
tcp.port == 25// 顯示來源或目的TCP 埠號為25 的封包。 tcp.dstport == 25// 顯示目的TCP 埠號為25 的封包。 tcp.flags // 顯示包含TCP 標誌的封包。
tcp.flags.syn == 0× 02 // 顯示包含TCP SYN 標誌的封包。 如果過濾器的語法是正確的,表達式的背景呈綠色。如果呈紅色,說明表達式有誤。
2.2 、TCPDUMP
tcpdump是一個運行在命令行下的嗅探工具。它允許用戶攔截和顯示發送或收到過網路連接到該計算機的TCP/IP和其他數據包。
tcpdump採用命令行方式,它的命令格式為:
tcpdump [ -adeflnNOpqStvx ] [ -c數量] [ -F文件名]
[ -i網路介面] [ -r文件名 ] [ -s snaplen ] [ -T 類型] [ -w文件名] [ 表達式]
1、tcpdump 的選項介紹
-a將網路地址和廣播地址轉變成名字;
-d將匹配信息包的代碼以人們能夠理解的彙編格式給出;
-dd將匹配信息包的代碼以c 語言程序段的格式給出;
-ddd將匹配信息包的代碼以十進位的形式給出;
-e在輸出行列印出數據鏈路層的頭部信息;
-f將外部的Internet 地址以數字的形式列印出來;
-l使標準輸出變為緩衝行形式;
-n不把網路地址轉換成名字;
-t在輸出的每一行不列印時間戳;
-v輸出一個稍微詳細的信息,例如在ip 包中可以包括ttl 和服務類型的信息;
-vv輸出詳細的報文信息;
-c在收到指定的包的數目後,tcpdump 就會停止;
-F從指定的文件中讀取表達式,忽略其它的表達式;
-i指定監聽的網路介面;
-r從指定的文件中讀取包(這些包一般通過-w 選項產生 );
-w直接將包寫入文件中,並不分析和列印出來;
-T將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網路管理協議; )
2、tcpdump 的表達式介紹
表達式是一個正則表達式,tcpdump 利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網路上所有的信息包將會被截獲。
在表達式中一般如下幾種類型的關鍵字,一種是關於類型的關鍵字,主要包括host,net, port, 例如host 210.27.48.2 ,指明210.27.48.2 是一台主機,net 202.0.0.0 指明202.0.0.0 是一個網路地址,port 23指明埠號是23。如果沒有指定類型,預設的類型是host。
第二種是確定傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src ,這些關鍵字指明了傳輸的方向。舉例說明,src 210.27.48.2 , 指明 ip 包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網路地址是202.0.0.0 。如果沒有指明方向關鍵字,則預設是src or dst 關鍵字。
第三種是協議的關鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等類型。 Fddi指明是在FDDI( 分散式光纖數據介面網路)上的特定的網路協議,實際上它是"ether" 的別名, fddi 和 ether具有類似的源地址和目的地址,所以可以將fddi協議包當作ether 的包進行處理和分析。 其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpdump 將會監聽所有協議的信息包。
除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less, greater,還有三種邏輯運算,取非運算是"not " "! ",與運算是 "and","&&"; 或運算是"or" ,"||";
說明。
這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來
(1)想要截獲所有210.27.48.1 的主機收到的和發出的所有的數據包:
#tcpdump host 210.27.48.1
(2) 想要截獲主機210.27.48.1 和主機210.27.48.2 或 210.27.48.3 的通信,使用命令:(在命令行中適用括弧時,一定要#tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )
(3) 如果想要獲取主機210.27.48.1 除了和主機210.27.48.2 之外所有主機通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4)如果想要獲取主機210.27.48.1 接收或發出的telnet 包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
3、tcpdump 的輸出結果介紹
下面我們介紹幾種典型的tcpdump命令的輸出信息
(1) 數據鏈路層頭信息
使用命令 #tcpdump --e host ice
ice 是一台裝有linux 的主機,她的MAC 地址是0:90: 27:58 : AF : 1AH219 是一台裝有SOLARIC的 SUN 工作站,它的MAC 地址是8: 0: 20:79: 5B:46;
上一條命令的輸出結果如下所示:
21:50:12.847509 eth0 ice. telnet 0:0(0) ack 22535 win 8760 (DF)
分析: 21:50:12是顯示的時間,847509 是 ID 號,eth0 表示從網路介面設備發送數據包, 8:0:20:79:5b:46 是主機H219 的 MAC地址它表明是從源地址H219 發來的數據包. 0:90:27:58:af:1a 是主機ICE 的 MAC 地址 ,表示該數據包的目的地址是ICE . ip是表明該數據包是IP 數據包 ,60 是數據包的長度, h219.33357 > ice. telnet 表明該數據包是從主機H219 的 33357 埠發往主機ICE 的 TELNET(23) 埠 . ack22535
表明對序列號是222535 的包進行響應. win 8760 表明發送窗口的大小是8760.:1a)
(2) ARP 包的 TCPDUMP 輸出信息
使用命令 #tcpdump arp
得到的輸出結果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0
分析 : 22:32:42 是時間戳 , 802509 是 ID 號 , eth0 >表明從主機發出該數據包, arp 表明是ARP 請求包 , who-has route tell ice 表明是主機ICE 請求主機ROUTE的MAC地址。 0:90:27:5
8:af:1a 是主機ICE的MAC地址。
(3) TCP 包的輸出信息
用 TCPDUMP捕獲的TCP 包的一般輸出信息是:
src > dst: flags data-seqno ack window urgent options
src > dst:表明從源地址到目的地址, flags 是 TCP 包中的標誌信息,S 是 SYN 標誌 , F (F IN), P (PUSH) , R (RST) "." (沒有標記 ); data-seqno 是數據包中的數據的順序號, ack 是 下次期望的順序號, window 是接收緩存的窗口大小, urgent 表明數據包中是否有緊急指針.
Options 是選項 .
(4) UDP 包的輸出信息
用 TCPDUMP捕獲的UDP 包的一般輸出信息是:
route.port1 > ice.port2: udp lenth
UDP 十分簡單,上面的輸出行表明從主機ROUTE 的 port1 埠發出的一個UDP 數據 包到主機ICE 的 port2 埠,類型是UDP ,包的長度是lenth
3、抓包場景及步驟
3.1 機頂盒抓包
如果有需要抓機頂盒交互的報文,則可以通過HUB 和機頂盒連接進行抓包,可以通過windows的 wireshark 進行抓包,可以把所有交互的包抓下來,然後進行過濾分析,也可以通過過濾規則抓下來已經過濾後的包。
3.2 Linux下抓包
軟終端在通過SS5代理伺服器進行接入IPTV 環境時,可能需要到 SS5所在的代理伺服器上去抓包,抓包方式就是通過TCPDUMP命令來抓取,一般我們把與IPTV網口相關的所有包都抓下來存為PCAP文件進行分析。
抓包命令為tcpdump -i eth1 -wxx.pcap,這樣可以把抓過來的包保存到linux 伺服器的用戶登錄當前文件夾下,然後通過SSH 傳到本地進行分析,當然了也可以通過過濾規則抓包,詳見TCPDUMP的常用命令。
報班考證請掃我
TAG:SPOTO思博網路 |