阿里雲團隊努力不懈,力求將最新的技術內容更快地以您最熟悉的語言呈現。本文由簡體中文內容自動轉碼而成,過程無人工干預。阿里雲不保證此自動轉碼的準確性、完整性及時效性。因轉碼造成的任何內容錯誤及因此可能帶來的損失,阿里雲概不負責,敬請見諒。本文内容請以簡體中文版本為準。
全部產品
Search
文件中心

網路異常時抓包操作說明

更新時間: Jan 09, 2020

如果原始伺服器訪問目標伺服器時出現異常,您可以抓包擷取最原始的互動資料,然後反饋至阿里雲進行排查分析。本文介紹了常用的抓包工具,並簡要說明了抓包步驟。

說明:建議您首先參閱文檔 能 ping 通但連接埠不通時連接埠可用性探測說明 排查問題,並參閱 丟包或不通時鏈路測試說明 進行分析。

常用抓包工具介紹

下面分別介紹 Linux 和 Windows 環境下常用的抓包工具:

Linux 環境下的抓包工具

Linux 環境下,通常使用 tcpdump 進行抓包和分析。它是幾乎所有 Linux 發行版本預裝的資料包抓取和分析工具。有關 tcpdump 工具的擷取和安裝方法,請參閱 tcpdump 官方文檔

tcpdump 用法樣本

  1. tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
  2. [ -c count ]
  3. [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
  4. [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
  5. [ --number ] [ -Q in|out|inout ]
  6. [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
  7. [ -W filecount ]
  8. [ -E spi@ipaddr algo:secret,... ]
  9. [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
  10. [ --time-stamp-precision=tstamp_precision ]
  11. [ --immediate-mode ] [ --version ]
  12. [ 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

常見用法和樣本輸出

  • 抓取指定網卡指定連接埠的互動資料。

    • 操作指令:

      1. tcpdump -s 0 -i eth0 port 22
    • 樣本輸出:

      1. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      2. listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
      3. 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
      4. 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
      5. 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
      6. 20:24:59.415103 IP 172.16.2.226.ssh &gt; 42.120.74.107.43414: Flags [P.], seq 442864:443028, ack 53, win 141, length 164</code></pre>
  • 抓取指定網卡發送給指定 IP 上指定連接埠的互動資料,並在控制台輸出詳細互動資訊。

    • 操作指令:

      1. tcpdump -s 0 -i eth1 -vvv port 22</code></pre>
    • 樣本輸出:

      1. tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
      2. 20:24:20.991006 IP (tos 0x10, ttl 64, id 22747, offset 0, flags [DF], proto TCP (6), length 316)
      3. 172.16.2.226.ssh &gt; 42.120.74.107.43414: Flags [P.], cksum 0x2504 (incorrect -&gt; 0x270d), seq 133624:133900, ack 1, win 141, length 276
      4. 20:24:20.991033 IP (tos 0x0, ttl 53, id 2348, offset 0, flags [DF], proto TCP (6), length 92)
      5. 42.120.74.107.43414 &gt; 172.16.2.226.ssh: Flags [P.], cksum 0x4759 (correct), seq 1:53, ack 129036, win 15472, length 52
      6. 20:24:20.991130 IP (tos 0x10, ttl 64, id 22748, offset 0, flags [DF], proto TCP (6), length 540)
      7. 172.16.2.226.ssh &gt; 42.120.74.107.43414: Flags [P.], cksum 0x25e4 (incorrect -&gt; 0x5e78), seq 133900:134400, ack 53, win 141, length 500
      8. 20:24:20.991162 IP (tos 0x0, ttl 53, id 2349, offset 0, flags [DF], proto TCP (6), length 40)
      9. 42.120.74.107.43414 &gt; 172.16.2.226.ssh: Flags [.], cksum 0xf39e (correct), seq 53, ack 129812, win 15278, length 0
  • 抓取發送至指定 IP 的 ping 互動資料,並在控制台輸出詳細互動資料。

    • 操作指令:

      1. tcpdump -s 0 -i eth1 -vvv dst 223.5.5.5 and icmp
    • 樣本輸出:

      1. tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
      2. 20:26:00.368958 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
      3. 172.16.2.226 &gt; public1.alidns.com: ICMP echo request, id 55097, seq 341, length 64
      4. 20:26:01.369996 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
      5. 172.16.2.226 &gt; public1.alidns.com: ICMP echo request, id 55097, seq 342, length 64
      6. 20:26:02.371058 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
      7. 172.16.2.226 &gt; public1.alidns.com: ICMP echo request, id 55097, seq 343, length 64
      8. 20:26:03.372181 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
      9. 172.16.2.226 &gt; public1.alidns.com: ICMP echo request, id 55097, seq 344, length 64
  • 抓取系統內所有介面資料並儲存到指定檔案。

    • 操作指令:

      1. tcpdump -i any -s 0 -w test.cap</code></pre>
    • 樣本輸出:

      1. tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

Windows 環境下的抓包工具

Windows 環境下,通常使用免費的開源工具 Wireshark 進行抓包和分析。它是 Windows 環境下最流行的資料包抓取和分析工具,請訪問 Wireshark 官方網站 擷取並安裝 Wireshark 工具。

Wireshark 抓包步驟

  1. 安裝並開啟 Wireshark。

  2. 選擇 捕獲 > 選項

  3. WireShark 捕獲介面 介面中,根據介面名稱或對應的 IP 位址選擇需要進行抓包的網卡,然後單擊 開始

    wireshark-capture

  4. 抓取足量資料包後,選擇 捕獲 > 停止

  5. 選擇 檔案 > 儲存,將抓包結果儲存到指定檔案。

有關 Wireshark 工具的使用和資料分析方法,請參閱 Wireshark 官方文檔

抓包並提交工單流程

出現異常時,您可以抓取資料包並發送給阿里雲售後支援人員。抓包時,請確保從原始伺服器和目標伺服器同時並行作業,以便售後支援人員進行對比分析。操作步驟如下:

  1. 明確原始伺服器和目標伺服器個通過哪個網卡進行資料互動。

  2. 如果原始伺服器通過 NAT 共用方式訪問公網,則訪問 http://ip.taobao.com 等網站,擷取本網對應的公網 IP。

  3. 利用前文所述工具,從原始伺服器對目標伺服器地址的目標連接埠進行抓包,或者進行完整抓包,然後儲存抓包資料。

  4. 利用前文所述工具,從目標伺服器對原始伺服器地址進行抓包,或者進行完整抓包,然後儲存抓包資料。

  5. 建立工單並附上抓包資料檔案,提交工單後,阿里雲售後支援人員會排查問題並通過工單向您反饋結果。

    說明:如果抓包資料大小超出工單系統附件大小限制(當前為 2M),您可以 打包壓縮 抓包資料檔案,再上傳到第三方網盤並擷取外鏈分享地址。如果您購買了阿里雲Object Storage Service 服務,也可以通過 OSS 管理主控台 上傳檔案 並 擷取訪問地址。然後,通過工單反饋上述抓包資料檔案的擷取地址。