linux中tcpdump按ip过滤需用src host/dst host关键字,缺host报错;单引号防解析错误,-nn跳过dns解析,sudo确保权限。

Linux 中用 tcpdump 按源 IP 或目标 IP 过滤抓包,核心是用 src host 和 dst host 关键字,不能省略 host;方向必须明确,语法写错会导致过滤失效或报错。
只抓来自某个 IP 的流量(源 IP)
用 src host 限定发包方,适合排查某台机器主动发起的连接:
-
sudo tcpdump -i eth0 src host 192.168.1.50—— 抓所有从 192.168.1.50 发出的数据包 - 搭配端口更精准:
sudo tcpdump -i eth0 src host 10.0.2.10 and tcp port 443 - 注意:不能写成
src 192.168.1.50,缺少host会报语法错误
只抓发往某个 IP 的流量(目标 IP)
用 dst host 限定收包方,适用于定位服务被谁访问或攻击来源:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
sudo tcpdump -i ens33 dst host 172.16.5.200—— 只显示目的地址为该 IP 的包 - 可叠加协议:
sudo tcpdump -i any dst host 192.168.10.100 and udp - 若接口名不确定,先运行
ip a或tcpdump -D确认可用接口
同时指定源和目标 IP(点对点通信)
当需要聚焦两台主机之间的双向交互,用 and 连接,整个表达式加单引号防 shell 解析错误:
sudo tcpdump -i eth0 'src host 192.168.2.10 and dst host 192.168.2.20'-
sudo tcpdump -i bond0 -nn 'src host 10.1.1.100 and dst port 3306'—— 加-nn跳过 DNS 和端口名解析,提升响应速度 - 逻辑符必须小写:
and、or、not;大写或用&&会被 shell 当作命令分隔符
常见避坑提醒
实际操作中这几个细节最容易出问题:
- IP 地址输错或子网掩码不匹配——建议复制粘贴,避免手误
- 漏掉单引号:含空格或逻辑符时,
host 192.168.1.1 and port 80必须写成'host 192.168.1.1 and port 80' - 没加
-n或-nn:默认会尝试反向 DNS 解析,卡顿且干扰判断 - 权限不足:tcpdump 需要 root 权限,记得加
sudo或切换到 root 用户










