您現在的位置是:首頁 > 單機遊戲首頁單機遊戲

「乾貨」常見網路抓包工具和抓包分析

簡介(3) TCP 包的輸出資訊用 TCPDUMP捕獲的TCP 包的一般輸出資訊是:src > dst: flags data-seqno ack window urgent optionssrc > dst:表明從源地址到目的地址

什麼是抓包

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:任意

目的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 的 封包。

換句話說,顯示的封包將會為:

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 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219。33357 > ice。 telnet 0:0(0) ack 22535 win 8760 (DF)

分析: 21:50:12是顯示的時間,847509 是 ID 號,eth0 <表示從網路介面eth0 接受該資料包, 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 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af

分析 : 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的常用命令。

Top