使用host关键字最简单,可同时匹配源和目的ip;需区分方向时用src host或dst host;组合条件用小写and/or/not连接并加单引号;注意接口名、ip正确性及加-n跳过dns解析。

直接用 host 关键字最简单,它会同时匹配源和目的 IP,适合快速定位某台主机的全部通信。
抓取与指定IP相关的所有流量
这是最常用也最省事的方式。例如抓 192.168.1.100 的所有进出包:
sudo tcpdump -i eth0 host 192.168.1.100
这条命令等价于:src host 192.168.1.100 or dst host 192.168.1.100,不用手动写逻辑运算符。
只抓来自该IP或只发往该IP的流量
当需要区分方向时,用 src 或 dst 明确限定:
- 只抓从 10.0.0.5 发出的包:
sudo tcpdump -i eth0 src host 10.0.0.5 - 只抓发给 172.16.2.20 的包:
sudo tcpdump -i eth0 dst host 172.16.2.20
注意:src 和 dst 后面必须跟 host,不能省略(如 src 192.168.1.1 语法错误)。
组合过滤——加协议、端口等条件
单纯看 IP 往往不够,常需叠加其他维度:
- 抓 192.168.5.100 的 SSH 流量:
sudo tcpdump -i eth0 host 192.168.5.100 and port 22 - 只抓它发出的 HTTP 请求:
sudo tcpdump -i eth0 src host 192.168.5.100 and tcp port 80 - 排除 DNS 查询:
sudo tcpdump -i eth0 host 192.168.1.100 and not port 53
所有条件之间用小写 and、or、not 连接,整个表达式必须用单引号包裹(尤其含空格或特殊字符时)。
几个关键提醒
避免常见低级错误:
- IP 地址写错、接口名不存在(先用
ip a或tcpdump -D确认) - 漏掉单引号,导致 shell 把
and当作命令分隔符 - 大小写敏感:必须用小写
and,不能写成AND或&& - 想跳过 DNS 解析加快速度,加上
-n选项,比如:sudo tcpdump -i eth0 -n host 192.168.1.100











