Fuchsia 上的数据包捕获

数据包捕获是用于开发、调试和测试网络的基本工具。

fx sniff 是一个开发主机命令,用于:

  • 在 Fuchsia 目标设备上运行数据包捕获。
  • 以 PCAPNG 格式将数据包存储在 Fuchsia 开发主机上。
  • 流式传输到图形界面,例如 Wireshark

tcpdump 是支持丰富的捕获过滤器的数据包捕获器。fx sniff 使用预定义的捕获过滤器在内部调用 tcpdump,这些过滤器是 Fuchsia 开发者工作流所必需的。对于 fx sniff 不可行的用例(例如,您可以通过串行控制台访问但未连接开发主机),请直接使用 tcpdump

准备映像

请务必将 tcpdump 捆绑到一组基础软件包中。

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

方法指南(主机上)

通过 Wi-Fi 接口捕获数据包

[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

这将停止目标端进程和主机端进程。

HowTo(在目标设备上)

使用 tcpdump 进行调试

fx sniff 需要有效的从主机到目标的 ssh 连接,这意味着网络必须在一定程度上正常运行。在某些情况下,网络可能完全无法使用。如果您在网络(包括 ssh)无法正常运行时可以访问串行控制台,则必须直接在目标上运行 tcpdumptcpdump 提供了一组比 fx sniff 更丰富的功能。

通过 Wi-Fi 接口捕获数据包

[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 shell 端口 22 devshell/shell
目标 netsvc addr fe80::xxxx:xxff:fexx:xxxx%XX fx device-finder 列表 --netboot
主机链路本地地址 fe80::xxxx:xxxx:xxxx:xxxx%XX fx device-finder 列表 --ipv4=false --local
目标 netstack addr fe80::xxxx:xxxx:xxxx:xxxx%XX Fx get-device-addr
zxdb 端口 2345 devshell/contrib/调试
- 端口 65026
- 端口 65268
- 1900

问题排查

我收到错误 /boot/bin/sh: tcpdump not found

tcpdump 软件包尚未准备就绪。请务必在图片中捆绑 tcpdump。请参阅准备映像