封包擷取是用於開發、偵錯及測試網路的基本工具。
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
) 無法運作時可以存取序列控制台,就必須直接在目標上執行 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 | 殼層/殼層 |
目標 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
組合在映像檔中。請參閱準備圖片。