在 Fuchsia 上擷取封包

封包擷取是網路開發、偵錯及測試的基本工具。

fx sniff 是具有以下特性的開發主機指令:

  • 在 Fuchsia 目標裝置上執行封包擷取。
  • 在 Fuchsia 開發主機上,以 PCAPNG 格式儲存封包。
  • 串流至圖形使用者介面,例如 Wireshark

tcpdump 是支援豐富擷取篩選器的封包擷取器。fx sniff 內部會使用預先定義的擷取篩選器,以 Fuchsia 開發人員工作流程所需的預先定義擷取篩選器叫用 tcpdumpfx sniff 無法使用的情況 (例如您有序列主控台存取權,但沒有與開發人員主機連線時),請直接使用 tcpdump

準備圖片

請務必將 tcpdump 組合成基本套件組合。

$ fx set core.x64 --with-base //third_party/tcpdump
$ fx build

操作說明 (在主機上)

透過 WLAN 介面擷取封包

[host] $ fx sniff wlan

根據預設,這個指令會擷取封包 30 秒。如要設定時間長度,請新增 --time {sec}-t {sec} 選項。

如果您不知道網路介面名稱,請在沒有選項的情況下執行 fx sniff。錯誤訊息會顯示可用的介面。您也可以執行:

[host] $ fx shell net if list

在乙太網路介面上顯示封包的十六進位轉儲

[host] $ fx sniff --view hex eth

擷取 WLAN 封包並儲存至檔案中

[host] $ fx sniff --file my_packets wlan

擷取的封包會先儲存在目標的 /tmp/ 目錄中。拍攝完成後,檔案會自動移至 //out/my_packets.pcapng

即時向 Wireshark 進行直播

注意:僅限 Linux。

[host] $ fx sniff --view wireshark wlan

強制停止

封包擷取會在指定的時間長度內 (--time-t 選項) 執行。如果使用者想要提早停止,請按下下列其中一個按鍵:

c, q, C, Q

這麼做會同時停止目標端程序和主機端程序。

步驟 (在目標裝置上)

使用 tcpdump 進行偵錯

fx sniff」需要從主機到目標的 ssh 連線能力,也就是說,網路必須能正常運作。在某些情況下,網路可能完全無法使用。網路 (包括 ssh) 無法運作時,如果您可以存取序列控制台,就必須直接在目標上執行 tcpdumptcpdump 提供的功能組合比 fx sniff 更多。

透過 WLAN 介面擷取封包

[target] $ tcpdump -i wlan --no-promiscuous-mode

串流以 PCAPNG 格式匯出二進位傾印

[target] $ tcpdump -i wlan --no-promiscuous-mode -w -

擷取封包並儲存至檔案中

[target] $ tcpdump -i wlan --no-promiscuous-mode -w /tmp/my_packets.pcapng

將轉儲檔案複製到主機

[host] $ cd ${FUCHSIA_OUT_DIR} && fx scp "[$(fx get-device-addr)]:/tmp/my_packets.pcapng"

tcpdump 說明

[target] $ tcpdump --help

只能觀看 ARP、DHCP 和 DNS 封包

[target] $ tcpdump -i  wlan --no-promiscuous-mode "arp or port dns,dhcp" "$iface_filepath"

篩選器語法

tcpdump 實際上會使用 libpcap。請參閱 pcap-filter

參考資料:fx 工作流程封包簽章

Fuchsia 開發主機與目標之間會執行許多不同類型的服務。這類功能通常是透過 fx 指令叫用。在大多數情況下,您對 fx 工作流程產生的封包不感興趣。下表列出值得注意的簽名。

使用 簽章 參考資料
記錄程式 通訊埠 33337 NETBOOT_DEBUGLOG_PORT_SERVER
記錄程式 通訊埠 33338 NETBOOT_DEBUGLOG_PORT_ACK
開機伺服器 通訊埠 33330 NETBOOT_PORT_SERVER
開機伺服器 通訊埠 33331 NETBOOT_PORT_ADVERT
開機伺服器 通訊埠 33332 NETBOOT_PORT_CMD_START
開機伺服器 通訊埠 33339 NETBOOT_PORT_CMD_END
開機伺服器 通訊埠 33340 NETBOOT_PORT_TFTP_OUTGOING
開機伺服器 通訊埠 33341 NETBOOT_PORT_TFTP_INCOMING
套件伺服器 通訊埠 8083 docs/packages.md
Fx 殼層 通訊埠 22 devshell/shell
目標 netsvc 新增工具 fe80::xxxx:xxff:fexx:xxxx%XX fx 裝置搜尋器清單 --netboot
主機連結本機新增器 fe80::xxxx:xxxx:xxxx:xxxx%XX fx device-finder 清單 --ipv4=false --local
目標 Netstack 新增工具 fe80::xxxx:xxxx:xxxx:xxxx%XX fx get-device-addr
Zxdb 通訊埠 2345 devshell/contrib/debug
- 通訊埠 65026
- 通訊埠 65268
- 1900

疑難排解

Q 收到 /boot/bin/sh: tcpdump not found 錯誤

A 尚未準備 tcpdump 套件。請務必將 tcpdump 包含在圖片中。請參閱「準備圖片」一節。