在 Fuchsia 上擷取封包

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

fx sniff 是開發主機指令,該指令會:

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

tcpdump 是支援豐富擷取篩選器的封包擷取器。fx sniff 內部使用 Fuchsia 開發人員工作流程所需的預先定義擷取篩選器,來叫用 tcpdump。針對 fx 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 殼層/殼層
目標 netsvc 附加器 fe80::xxxx:xxff:fexx:xxxx%XX fx 裝置尋找工具清單 --netboot
主機連結本機新增工具 fe80::xxxx:xxxx:xxxx:xxxx%XX fx device-finder 清單 --ipv4=false --local
目標網路堆疊 Addr fe80::xxxx:xxxx:xxxx:xxxx%XX fx get-device-addr
zxdb 通訊埠 2345 devshell/contrib/debug
- 通訊埠 65026
- 通訊埠 65268
- 1900

疑難排解

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

A tcpdump 套件尚未備妥。請務必將 tcpdump 組合在映像檔中。請參閱準備圖片