直接用dst host加目标ip地址即可精准捕获发往该ip的所有入站流量,这是tcpdump最稳定常用写法;它只匹配目的地址为指定ip的数据包,与src host严格对应、不混淆方向。

基础语法与典型命令
目标 IP 过滤的核心是 `dst host`,它只匹配目的地址为指定 IP 的数据包(即本机接收的包):
- 抓取所有发往 192.168.1.50 的流量:
sudo tcpdump -i eth0 dst host 192.168.1.50 - 只看该目标 IP 的 HTTPS 流量(目的端口 443):
sudo tcpdump -i eth0 dst host 192.168.1.50 and dst port 443 - 排除 DNS 解析延迟,加
-n;避免走错网卡,不确定时用-i any:sudo tcpdump -i any -n dst host 10.0.2.15
区分 dst host 和 host 避免误判
host 192.168.1.50 是双向匹配——既抓它发的,也抓发给它的;而 dst host 192.168.1.50 只抓发给它的(入站)。如果你只想确认某台服务器是否正在被攻击或大量请求,dst host 更准确,不会混入它自己外发的响应包。
若需完整会话(比如调试连接建立全过程),可组合使用:dst host 192.168.1.50 or src host 192.168.1.50,效果等同于 host 192.168.1.50,但逻辑更清晰。
配合协议与端口进一步缩小范围
单纯按目标 IP 抓包可能仍太宽泛,尤其在高流量环境中。建议叠加协议或端口条件:
- 只抓发往目标 IP 的 TCP SYN 包(新连接请求):
sudo tcpdump -i eth0 'dst host 172.18.0.100 and tcp[tcpflags] & tcp-syn != 0' - 过滤掉常见管理端口(如 SSH 22、HTTP 80),专注异常流量:
sudo tcpdump -i eth0 'dst host 192.168.5.200 and not port 22 and not port 80' - 保存为 pcap 文件供 Wireshark 深度分析:
sudo tcpdump -i eth0 -w to-192.168.1.100.pcap dst host 192.168.1.100
注意接口选择与干扰排查
目标 IP 流量未必出现在你默认认为的网卡上。例如容器通信可能走 docker0,K8s Pod 流量可能经 cni0 或 veth 对。先运行 ip -br a | grep UP 查活跃接口,再试 -i any(需 root)。如果仍无输出,检查是否被防火墙(iptables/nftables)在 PREROUTING 或 INPUT 链提前丢弃,或该目标 IP 根本未收到任何包(比如路由未通、ARP 未解析)。











