如果原始伺服器在訪問目標伺服器時出現丟包、延時等異常,您可以通過抓包擷取最原始的網路互動資料,以便進一步排查問題。本文將介紹在Linux和Windows環境下使用抓包工具進行抓包的具體方法。
抓包流程介紹
在網路異常情況下,抓取資料包是定位問題的重要手段之一。抓包操作通常包括以下流程步驟。
上述流程中涉及的關鍵要點說明如下。
序號 | 流程名稱 | 說明 |
1 | 明確問題現象 | 明確問題現象時,可以使用ping,traceroute等工具來初步分析判斷是否存在如下現象。
|
2 | 選擇合適的抓包工具 | 根據您的需求、硬體以及軟體環境,選擇合適的抓包工具。
|
3 | 安裝並配置抓包工具 | 在執行抓包操作之前,建議您結合自己的實際抓包需求,為抓包工具配置過濾條件,以提高抓包效率。 |
4 | 執行抓包操作 | 執行抓包操作前,您需要明確如下資訊。
|
5 | 分析抓包資料 | 對抓包資料進行分析,以下為一些常見的分析方向。
|
6 | 解決問題並驗證 | 在對抓包資料進行分析後,如果無法準確定位問題,您可以結合其他工具或方法以進一步排查。
|
Linux執行個體中使用tcpdump工具
在Linux執行個體中,您可以使用tcpdump工具進行資料包捕獲與分析。大多數Linux發行版已預裝該工具。如果未安裝,您可以通過軟體包管理工具(如apt或yum)安裝該工具。具體操作,請參見使用包管理工具管理軟體。
使用說明
有關tcpdump命令格式說明如下。
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ] [ --count ] [ -C file_size ]
[ -E spi@ipaddr algo:secret,... ]
[ -F file ] [ -G rotate_seconds ] [ -i interface ]
[ --immediate-mode ] [ -j tstamp_type ] [ -m module ]
[ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ --version ]
[ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
[ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --micro ] [ --nano ]
[ expression ]上述命令中,常用的參數用法及說明如下表所示。
參數 | 用法及說明 |
-s | 用於設定資料包抓取長度。如果-s為0,則表示自動選擇合適的長度來抓取資料包。 |
-w | 用於將抓包結果匯出到檔案,而不是在控制台進行分析和列印輸出。 |
-i | 用於指定需要監聽的介面(網卡)。 |
-vvv | 用於輸出詳細的互動資訊。 |
expression | 是一個Regex,用於過濾報文,Regex的使用方式主要包含如下幾種類型:
|
更多關於tcpdump工具的其他參數及使用說明,請參見tcpdump man page。
使用樣本
有關tcpdump命令的常見用法及樣本輸出資訊如下所示。
抓取指定介面及連接埠的資料包。
執行以下命令,抓取eth0網卡與22連接埠的互動資料,並在控制台輸出互動資訊。
tcpdump -s 0 -i eth0 port 22在抓取過程中,將即時顯示互動資料。使用者可通過按下
Ctrl+C鍵停止抓取。停止後,將顯示本次資料抓取的資訊摘要。tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 20:24:59.414951 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442372:442536, ack 53, win 141, length 164 20:24:59.415002 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442536:442700, ack 53, win 141, length 164 20:24:59.415052 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442700:442864, ack 53, win 141, length 164 20:24:59.415103 IP 172.xx.xx.226.ssh > 42.xx.xx.107.43414: Flags [P.], seq 442864:443028, ack 53, win 141, length 164抓取指定介面及連接埠的資料包,並輸出詳細互動資訊。
執行以下命令,抓取eth1網卡與22連接埠的互動資料,並在控制台輸出詳細互動資訊。
tcpdump -s 0 -i eth1 -vvv port 22在抓取過程中,將即時顯示互動資料。使用者可通過按下
Ctrl+C鍵停止抓取。停止後,將顯示本次資料抓取的資訊摘要。tcpdump: listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes 15:45:54.817920 IP (tos 0x10, ttl 64, id 61958, offset 0, flags [DF], proto TCP (6), length 172) iZr1ulp9t4u4a8Z.ssh > 123.xxx.xxx.74.2057: Flags [P.], cksum 0x80cd (incorrect -> 0x2ee9), seq 890113592:890113724, ack 2345612678, win 592, length 132 15:45:54.894215 IP (tos 0x14, ttl 116, id 16850, offset 0, flags [DF], proto TCP (6), length 40) 123.139.88.74.2057 > iZr1ulp9t4u4a8Z.ssh: Flags [.], cksum 0x1e6a (correct), seq 1, ack 132, win 1021, length 0 15:45:54.913403 IP (tos 0x10, ttl 64, id 61959, offset 0, flags [DF], proto TCP (6), length 172) iZr1ulp9t4u4a8Z.ssh > 123.xxx.xxx.74.2057: Flags [P.], cksum 0x80cd (incorrect -> 0x1105), seq 132:264, ack 1, win 592, length 132 15:45:54.988025 IP (tos 0x10, ttl 64, id 61960, offset 0, flags [DF], proto TCP (6), length 236) iZr1ulp9t4u4a8Z.ssh > 123.xxx.xxx.74.2057: Flags [P.], cksum 0x810d (incorrect -> 0x98d1), seq 264:460, ack 1, win 592, length 196抓取指定介面及IP地址的特定協議資料包。
執行以下命令,抓取eth0網卡與指定IP地址的ping互動資料,並在控制台輸出詳細互動資訊。
tcpdump -s 0 -i eth0 -vvv dst 123.xxx.xxx.74 and icmp在抓取過程中,將即時顯示互動資料。使用者可通過按下
Ctrl+C鍵停止抓取。停止後,將顯示本次資料抓取的資訊摘要。tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 15:43:29.116058 IP (tos 0x14, ttl 64, id 26185, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 65, length 40 15:43:30.129600 IP (tos 0x14, ttl 64, id 27043, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 66, length 40 15:43:31.141576 IP (tos 0x14, ttl 64, id 27201, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 67, length 40 15:43:32.153912 IP (tos 0x14, ttl 64, id 27802, offset 0, flags [none], proto ICMP (1), length 60) iZr1ulp9t4u4a8Z > 123.xxx.xxx.74: ICMP echo reply, id 2048, seq 68, length 40抓取資料包並儲存至指定檔案。
運行如下命令,抓取系統內所有介面資料並儲存至指定檔案。
tcpdump -i any -s 0 -w test.cap回顯資訊樣本如下,表明進行中資料包抓取。
tcpdump: data link type LINUX_SLL2 tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes如需停止抓取,請按下
Ctrl+C鍵。停止後,將顯示本次資料抓取的資訊摘要。^C97 packets captured 127 packets received by filter 0 packets dropped by kernel查看產生的抓包資料檔案的內容。
執行以下命令,查看tcpdump產生的抓包資料檔案的內容。
tcpdump -r test.cap說明您也可以選擇使用Wireshark工具查看tcpdump產生的抓包檔案。具體操作,請參見通過Wireshark查看抓包檔案。
Windows執行個體中使用Wireshark工具
本文將以在Windows執行個體中運用Wireshark工具進行資料包捕獲與分析為例,為您介紹如何進行網路資料包抓取。
使用說明
安裝並開啟Wireshark工具。
訪問Wireshark官方網站,擷取安裝包並完成Wireshark工具的安裝。
選擇捕獲 > 選項。
在Wireshark 捕獲選項頁面,根據介面名稱或對應的IP地址選擇需要進行抓包的網卡,然後單擊開始。

抓取足量資料包後,選擇捕獲 > 停止。
選擇檔案 > 儲存,將抓包結果儲存到指定檔案。
(可選)如需通過Wireshark查看抓包檔案,請在Wireshark主介面的功能表列中單擊檔案 > 開啟,並選擇相應的抓包檔案進行查看。
更多有關Wireshark工具的使用和資料分析方法,請參見Wireshark官方網站。
相關文檔
關於能ping通執行個體但是連接埠不通的問題處理方法,請參見能ping通ECS執行個體但連接埠不通的排查方法。
關於使用MTR工具進行網路鏈路分析的相關操作,請參見使用MTR工具進行網路鏈路分析。
關於使用tcpdump或Wireshark進行抓包的常見問題處理,請參見使用tcpdump或Wireshark進行抓包的常見問題與處理方案。