数据包捕获是用于开发、调试和测试网络的基本工具。
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
)无法正常运行时可以访问串行控制台,则必须直接在目标上运行 tcpdump
。tcpdump
提供了一组比 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
。请参阅准备映像。