如果原始伺服器訪問目標伺服器時出現異常,您可以抓包擷取最原始的互動資料,然後反饋至阿里雲進行排查分析。本文介紹了常用的抓包工具,並簡要說明了抓包步驟。
說明:建議您首先參閱文檔 能 ping 通但連接埠不通時連接埠可用性探測說明 排查問題,並參閱 丟包或不通時鏈路測試說明 進行分析。
常用抓包工具介紹
下面分別介紹 Linux 和 Windows 環境下常用的抓包工具:
Linux 環境下的抓包工具
Linux 環境下,通常使用 tcpdump 進行抓包和分析。它是幾乎所有 Linux 發行版本預裝的資料包抓取和分析工具。有關 tcpdump 工具的擷取和安裝方法,請參閱 tcpdump 官方文檔。
tcpdump 用法樣本
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ --number ] [ -Q in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]
常見參數說明(區分大小寫)
- -s 用於設定資料包抓取長度。如果 -s 為 0,則表示自動選擇合適的長度來抓取資料包。
- -w 用於將抓包結果匯出到檔案,而不是在控制台進行分析和列印輸出。
- -i 用於指定需要監聽的介面(網卡)。
- -vvv 用於輸出詳細的互動資料。
- expression 是一個Regex,用於過濾報文。主要包含如下幾類:
- 指定類型的關鍵字:包括 host(主機)、net(網路)和 port(連接埠)。
- 指定傳輸方向的關鍵字:包括 src(源)、dst(目標)、dst or src(源或目標)和 dst and src(源和目標)。
- 指定協議的關鍵字:包括 icmp、ip、arp、rarp、tcp、udp 等協議類型。
更多參數說明及用法,請參閱 tcpdump 的 Manpage。
常見用法和樣本輸出
-
抓取指定網卡指定連接埠的互動資料。
-
操作指令:
tcpdump -s 0 -i eth0 port 22
-
樣本輸出:
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.16.2.226.ssh > 42.120.74.107.43414: Flags [P.], seq 442372:442536, ack 53, win 141, length 164
20:24:59.415002 IP 172.16.2.226.ssh > 42.120.74.107.43414: Flags [P.], seq 442536:442700, ack 53, win 141, length 164
20:24:59.415052 IP 172.16.2.226.ssh > 42.120.74.107.43414: Flags [P.], seq 442700:442864, ack 53, win 141, length 164
20:24:59.415103 IP 172.16.2.226.ssh > 42.120.74.107.43414: Flags [P.], seq 442864:443028, ack 53, win 141, length 164</code></pre>
-
-
抓取指定網卡發送給指定 IP 上指定連接埠的互動資料,並在控制台輸出詳細互動資訊。
-
操作指令:
tcpdump -s 0 -i eth1 -vvv port 22</code></pre>
-
樣本輸出:
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
20:24:20.991006 IP (tos 0x10, ttl 64, id 22747, offset 0, flags [DF], proto TCP (6), length 316)
172.16.2.226.ssh > 42.120.74.107.43414: Flags [P.], cksum 0x2504 (incorrect -> 0x270d), seq 133624:133900, ack 1, win 141, length 276
20:24:20.991033 IP (tos 0x0, ttl 53, id 2348, offset 0, flags [DF], proto TCP (6), length 92)
42.120.74.107.43414 > 172.16.2.226.ssh: Flags [P.], cksum 0x4759 (correct), seq 1:53, ack 129036, win 15472, length 52
20:24:20.991130 IP (tos 0x10, ttl 64, id 22748, offset 0, flags [DF], proto TCP (6), length 540)
172.16.2.226.ssh > 42.120.74.107.43414: Flags [P.], cksum 0x25e4 (incorrect -> 0x5e78), seq 133900:134400, ack 53, win 141, length 500
20:24:20.991162 IP (tos 0x0, ttl 53, id 2349, offset 0, flags [DF], proto TCP (6), length 40)
42.120.74.107.43414 > 172.16.2.226.ssh: Flags [.], cksum 0xf39e (correct), seq 53, ack 129812, win 15278, length 0
-
-
抓取發送至指定 IP 的 ping 互動資料,並在控制台輸出詳細互動資料。
-
操作指令:
tcpdump -s 0 -i eth1 -vvv dst 223.5.5.5 and icmp
-
樣本輸出:
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
20:26:00.368958 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
172.16.2.226 > public1.alidns.com: ICMP echo request, id 55097, seq 341, length 64
20:26:01.369996 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
172.16.2.226 > public1.alidns.com: ICMP echo request, id 55097, seq 342, length 64
20:26:02.371058 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
172.16.2.226 > public1.alidns.com: ICMP echo request, id 55097, seq 343, length 64
20:26:03.372181 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
172.16.2.226 > public1.alidns.com: ICMP echo request, id 55097, seq 344, length 64
-
-
抓取系統內所有介面資料並儲存到指定檔案。
-
操作指令:
tcpdump -i any -s 0 -w test.cap</code></pre>
-
樣本輸出:
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
-
Windows 環境下的抓包工具
Windows 環境下,通常使用免費的開源工具 Wireshark 進行抓包和分析。它是 Windows 環境下最流行的資料包抓取和分析工具,請訪問 Wireshark 官方網站 擷取並安裝 Wireshark 工具。
Wireshark 抓包步驟
-
安裝並開啟 Wireshark。
-
選擇 捕獲 > 選項。
-
在 WireShark 捕獲介面 介面中,根據介面名稱或對應的 IP 位址選擇需要進行抓包的網卡,然後單擊 開始。
-
抓取足量資料包後,選擇 捕獲 > 停止。
-
選擇 檔案 > 儲存,將抓包結果儲存到指定檔案。
有關 Wireshark 工具的使用和資料分析方法,請參閱 Wireshark 官方文檔。
抓包並提交工單流程
出現異常時,您可以抓取資料包並發送給阿里雲售後支援人員。抓包時,請確保從原始伺服器和目標伺服器同時並行作業,以便售後支援人員進行對比分析。操作步驟如下:
-
明確原始伺服器和目標伺服器個通過哪個網卡進行資料互動。
-
如果原始伺服器通過 NAT 共用方式訪問公網,則訪問 http://ip.taobao.com 等網站,擷取本網對應的公網 IP。
-
利用前文所述工具,從原始伺服器對目標伺服器地址的目標連接埠進行抓包,或者進行完整抓包,然後儲存抓包資料。
-
利用前文所述工具,從目標伺服器對原始伺服器地址進行抓包,或者進行完整抓包,然後儲存抓包資料。
-
建立工單並附上抓包資料檔案,提交工單後,阿里雲售後支援人員會排查問題並通過工單向您反饋結果。
說明:如果抓包資料大小超出工單系統附件大小限制(當前為 2M),您可以 打包壓縮 抓包資料檔案,再上傳到第三方網盤並擷取外鏈分享地址。如果您購買了阿里雲Object Storage Service 服務,也可以通過 OSS 管理主控台 上傳檔案 並 擷取訪問地址。然後,通過工單反饋上述抓包資料檔案的擷取地址。