眾所周知,在Windows下開發運行環境下,在調試網路環境時,可以可以很方便的藉助wireshark等軟體進行抓包分析;並且在linux或者Ubuntu等桌面版里也可以進行安裝抓包工具進行抓包分析,但總有一些情況,無法直接運用工具(比如一些沒有界面的linux環境系統中),則此時我們就需要使用到最簡單的tcpmp命令進行網路抓包。
一般的,linux下抓包時,抓取特定的網路數據包到當前文件夾下的文件中,再把文件拷貝出來利用Windows下的wireshark軟體進行分析。
tcpmp命令詳解:(簡單舉例)
1、抓取到的文件為filename.cap,然後將此文件拷貝到Windows下,使用wireshar打開後,即可對此文件進行分析。
2、eth0 是主機的網路適配器名稱,具體的參數值可以在linux命令行窗口中通過 ifconfig 指令查詢。
『貳』 wireshark抓包命令總結
參考的循環抓包命令,其中的過濾條件需要根據實際情況修改(該命令最多佔用4G的存儲空間,且會在後台持續運行):sudo nohup tcpmp -i [network_interface] port 80 -s 80 -C 80 -W 100 -w /tmp/waf.pcap &
-W filecount . -C file_size . -s 80 snaplen 截取特定的長度
常用排錯過濾條件:
對於排查網路延時/應用問題有一些過濾條件是非常有用的:
tcp.analysis.lost_segment:表明已經在抓包中看到不連續的序列號。報文丟失會造成重復的ACK,這會導致重傳。
tcp.analysis.plicate_ack:顯示被確認過不止一次的報文。大涼的重復ACK是TCP端點之間高延時的跡象。
tcp.analysis.retransmission:顯示抓包中的所有重傳。如果重傳次數不多的話還是正常的,過多重傳可能有問題。這通常意味著應用性能緩慢和/或用戶報文丟失。
tcp.analysis.window_update:將傳輸過程中的TCP window大小圖形化。如果看到窗口大小下降為零,這意味著發送方已經退出了,並等待接收方確認所有已傳送數據。這可能表明接收端已經不堪重負了。
tcp.analysis.bytes_in_flight:某一時間點網路上未確認位元組數。未確認位元組數不能超過你的TCP窗口大小(定義於最初3此TCP握手),為了最大化吞吐量你想要獲得盡可能接近TCP窗口大小。如果看到連續低於TCP窗口大小,可能意味著報文丟失或路徑上其他影響吞吐量的問題。
tcp.analysis.ack_rtt:衡量抓取的TCP報文與相應的ACK。如果這一時間間隔比較長那可能表示某種類型的網路延時(報文丟失,擁塞,等等)。
『叄』 linux怎麼抓包,怎麼查看分析
linux上面有命令界面的tcpmp,wireshark,圖形界面的wireshark都可以抓包。想要了解更多關於Linux的資訊和文章請關注《linux就該這么學》。
『肆』 如何通過wireshark進行抓包的分析
啟動wireshark後,選擇工具欄中的快捷鍵(紅色標記的按鈕)即可Start a new live capture。
主界面上也有一個interface list(如下圖紅色標記1),列出了系統中安裝的網卡,選擇其中一個可以接收數據的的網卡也可以開始抓包。
在啟動時候也許會遇到這樣的問題:彈出一個對話框說 NPF driver 沒有啟動,無法抓包。在win7或Vista下找到C: \system\system32下的cmd.exe 以管理員身份運行,然後輸入 net start npf,啟動NPf服務。
重新啟動wireshark就可以抓包了。
抓包之前也可以做一些設置,如上紅色圖標記2,點擊後進入設置對話框,具體設置如下:
Interface:指定在哪個介面(網卡)上抓包(系統會自動選擇一塊網卡)。
Limit each packet:限制每個包的大小,預設情況不限制。
Capture packets in promiscuous mode:是否打開混雜模式。如果打開,抓 取所有的數據包。一般情況下只需要監聽本機收到或者發出的包,因此應該關閉這個選項。
Filter:過濾器。只抓取滿足過濾規則的包。
File:可輸入文件名稱將抓到的包寫到指定的文件中。
Use ring buffer: 是否使用循環緩沖。預設情況下不使用,即一直抓包。循環緩沖只有在寫文件的時候才有效。如果使用了循環緩沖,還需要設置文件的數目,文件多大時回卷。
Update list of packets in real time:如果復選框被選中,可以使每個數據包在被截獲時就實時顯示出來,而不是在嗅探過程結束之後才顯示所有截獲的數據包。
單擊「OK」按鈕開始抓包,系統顯示出接收的不同數據包的統計信息,單擊「Stop」按鈕停止抓包後,所抓包的分析結果顯示在面板中,如下圖所示:
為了使抓取的包更有針對性,在抓包之前,開啟了QQ的視頻聊天,因為QQ視頻所使用的是UDP協議,所以抓取的包大部分是採用UDP協議的包。
3、對抓包結果的說明
wireshark的抓包結果整個窗口被分成三部分:最上面為數據包列表,用來顯示截獲的每個數據包的總結性信息;中間為協議樹,用來顯示選定的數據包所屬的協議信息;最下邊是以十六進制形式表示的數據包內容,用來顯示數據包在物理層上傳輸時的最終形式。
使用wireshark可以很方便地對截獲的數據包進行分析,包括該數據包的源地址、目的地址、所屬協議等。
上圖的數據包列表中,第一列是編號(如第1個包),第二列是截取時間(0.000000),第三列source是源地址(115.155.39.93),第四列destination是目的地址(115.155.39.112),第五列protocol是這個包使用的協議(這里是UDP協議),第六列info是一些其它的信息,包括源埠號和目的埠號(源埠:58459,目的埠:54062)。
中間的是協議樹,如下圖:
通過此協議樹可以得到被截獲數據包的更多信息,如主機的MAC地址(Ethernet II)、IP地址(Internet protocol)、UDP埠號(user datagram protocol)以及UDP協議的具體內容(data)。
最下面是以十六進制顯示的數據包的具體內容,如圖:
這是被截獲的數據包在物理媒體上傳輸時的最終形式,當在協議樹中選中某行時,與其對應的十六進制代碼同樣會被選中,這樣就可以很方便的對各種協議的數據包進行分析。
4、驗證網路位元組序
網路上的數據流是位元組流,對於一個多位元組數值(比如十進制1014 = 0x03 f6),在進行網路傳輸的時候,先傳遞哪個位元組,即先傳遞高位「03」還是先傳遞低位「f6」。 也就是說,當接收端收到第一個位元組的時候,它是將這個位元組作為高位還是低位來處理。
下面通過截圖具體說明:
最下面是物理媒體上傳輸的位元組流的最終形式,都是16進製表示,發送時按順序先發送00 23 54 c3 …00 03 f6 …接收時也按此順序接收位元組。
選中total length:1014, 它的十六進製表示是0x03f6, 從下面的藍色選中區域可以看到,03在前面,f6在後面,即高位元組數據在低地址,低位元組數據在高地址(圖中地址從上到下從左到右依次遞增),所以可知,網路位元組序採用的是大端模式。