用host过滤最简单,因它默认匹配双向流量且无需预判方向,等价于“src host x or dst host x”,适合排查通信连通性问题;若需单向则显式指定src或dst。

直接抓特定IP的包,用 host 过滤最简单,但要注意它默认匹配双向流量(src 和 dst),且不区分协议。
为什么用 host 而不是 src/dst?
多数排查场景只关心“跟某台机器有没有通信”,不需要预先判断方向。比如查服务连不上 10.0.1.23,你并不知道是本机发请求失败,还是对方回包丢了——host 10.0.1.23 一次性捕获所有交互更高效。
-
host等价于src host X or dst host X,自动覆盖进出双向 - 若只想看本机发给它的包,改用
src host 10.0.1.23 - 若只想看它发给本机的包,改用
dst host 10.0.1.23 - 避免写成
ip host 10.0.1.23——ip是协议关键字,不是必需前缀,加了反而可能被 shell 解析出错
tcpdump -i any host 抓不到包?检查这三件事
常见现象:命令执行后没输出,或只有零星无关包。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 确认目标 IP 确实经过该接口:运行
ip route get 10.0.1.23看走哪个网卡(比如dev eth0),然后把-i any换成-i eth0 - 确认没被防火墙丢弃:Linux 的
iptables/nftables可能在 PREROUTING/INPUT 链 drop 掉包,导致tcpdump根本捕不到;可临时iptables -L -n -v查计数 - 确认没用
-n但输错 IP:如果用了-n却输入域名(如host api.example.com),tcpdump会静默失败——必须输数字 IP
抓 IPv6 地址要加 ip6 限定吗?
不用。只要地址格式是 IPv6(含冒号,如 2001:db8::1),tcpdump 自动识别并匹配 IPv6 流量。但注意:
- IPv6 包默认不带端口信息(ICMPv6 无端口),所以
host 2001:db8::1 port 80会报语法错误 - 想同时抓 IPv4 和 IPv6 的同一主机,保持
host写法即可,无需额外修饰 - 如果系统禁用了 IPv6,
host对 IPv6 地址无效,先检查sysctl net.ipv6.conf.all.disable_ipv6是否为 0
保存抓包结果时,-w 文件里真包含那个 IP 的所有包吗?
是,但仅限于捕获时满足过滤条件的包。关键点:
-
-w保存的是原始帧,不是过滤后的文本——即使你加了host 10.0.1.23,文件里也只存匹配的包,不会混入其他流量 - 用
tcpdump -r file.pcap host 10.0.1.23回放时,会再次过滤,但通常没必要——文件本身已纯净 - 别用
-s 0以外的截断长度(如-s 64)抓 IP 包:IP 头部可能被截断,导致host过滤失效(因为源/目的地址不在前 64 字节)
真正容易被忽略的是:当目标 IP 是本机自身(如 host 127.0.0.1 或本机外网 IP),部分流量可能走 loopback 接口,而 -i any 能捕到,但 -i eth0 就漏掉了——得单独加 -i lo 或明确指定接口列表。










