tcpdump网段过滤需用单引号包裹、小写逻辑符,支持src net/dst net加cidr,可组合多网段、排除子网,并能与协议端口组合精简捕获,-w参数使bpf过滤在内核生效以减小文件体积。

直接用 src net 或 dst net 加网段 CIDR 表示法就能精准过滤,关键在引号包裹、大小写正确、逻辑符小写。
抓指定源网段的流量
匹配所有从该网段发出的数据包。例如只看 192.168.10.0/24 网段的出向通信:
sudo tcpdump -i eth0 'src net 192.168.10.0/24'- 支持多个网段组合:用
or连接,如'src net 192.168.1.0/24 or src net 172.16.0.0/16' - 注意必须加单引号,否则 shell 会把
or当作命令分隔符
抓指定目的网段的流量
匹配所有发往该网段的数据包。例如监控进入 10.20.0.0/16 的流量:
sudo tcpdump -i eth0 'dst net 10.20.0.0/16'- 可排除子网:比如抓 10.10.0.0/16 但不包括其中的 10.10.5.0/24,写成
'dst net 10.10.0.0/16 and not dst net 10.10.5.0/24' - 不能写成
AND或&&,BPF 语法只认小写and
结合协议或端口进一步缩小范围
网段过滤常和协议、端口搭配使用,避免捕获无用包:
- 只抓某网段的 TCP 流量:
sudo tcpdump -i any 'tcp and src net 192.168.2.0/24' - 只抓发往某网段且目标端口是 3306 的 MySQL 包:
sudo tcpdump -i eth0 'dst net 172.18.0.0/24 and dst port 3306' - 混合方向:比如源是 A 网段、目标是 B 网段的 SSH 流量:
'src net 192.168.1.0/24 and dst net 10.0.0.0/8 and dst port 22'
保存过滤后的流量到文件
加 -w 参数时,过滤器在内核 BPF 层生效,未匹配的包根本不会进用户空间:
sudo tcpdump -i eth0 -w internal-traffic.pcap 'src net 192.168.100.0/24 or dst net 192.168.100.0/24'- 这样生成的 pcap 文件体积更小,磁盘 IO 更低,Wireshark 打开也更快
- 记得用
tcpdump -r internal-traffic.pcap验证内容是否符合预期











