封包擷取是網路開發、偵錯及測試的基本工具。
fx sniff
是具有以下特性的開發主機指令:
- 在 Fuchsia 目標裝置上執行封包擷取。
- 在 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
) 無法運作時,如果您可以存取序列控制台,就必須直接在目標上執行 tcpdump
。tcpdump
提供的功能組合比 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
包含在圖片中。請參閱「準備圖片」一節。