tcpdump中src host ip用于精准捕获指定源ip发出的数据包,区别于host的双向匹配;常用组合包括and udp port、tcp[tcpflags] & tcp-syn等条件,配合-i any、-n、-w等选项提升实用性与准确性。

直接用 src host 加 IP 地址就能按源 IP 过滤,这是 tcpdump 最基础也最可靠的写法。
基本语法和常用形式
tcpdump 的过滤表达式中,src host 明确限定“源主机”,后面紧跟目标 IP 地址:
- 抓取所有从 192.168.1.50 发出的包:
sudo tcpdump -i eth0 src host 192.168.1.50 - 只看该源 IP 发往特定端口(如 53)的 UDP 流量:
sudo tcpdump -i eth0 src host 192.168.1.50 and udp port 53 - 排除本机回环地址干扰,加
-n避免 DNS 解析:sudo tcpdump -i any -n src host 10.20.30.40
注意接口和权限问题
源 IP 包不一定出现在你默认假设的网卡上。比如容器、桥接或策略路由场景下,流量可能走 docker0、br0 或 any:
- 不确定走哪个接口时,优先试
-i any(需 root):sudo tcpdump -i any -c 20 src host 172.18.0.12 - 确认活跃接口可用:
ip -br a | grep UP - 如果没抓到,检查是否被防火墙(如 nftables/iptables)提前丢弃,或该 IP 是否根本没发包
配合其他条件精准定位
单靠源 IP 可能太宽泛,常需叠加协议、端口或方向进一步缩小范围:
- 只抓 TCP 连接建立阶段(SYN 包):
sudo tcpdump -i eth0 'src host 192.168.5.100 and tcp[tcpflags] & tcp-syn != 0' - 过滤出该源 IP 所有非 SSH(22 端口)的外发流量:
sudo tcpdump -i eth0 'src host 192.168.1.100 and not port 22' - 保存为 pcap 文件供后续分析:
sudo tcpdump -i eth0 -w src-192.168.1.100.pcap src host 192.168.1.100
别混淆 src host 和 host
host 192.168.1.100 是双向匹配(进出都算),而 src host 192.168.1.100 只抓它发出的包。若想同时看它收发的全部交互,用后者 + dst host 组合:
- 完整会话(推荐用于调试):
sudo tcpdump -i eth0 'src host 192.168.1.100 or dst host 192.168.1.100' - 但要注意:这等价于
host 192.168.1.100,只是写法更显式











