Linux怎么使用Tcpdump过滤指定网段流量
Tcpdump 使用 BPF 过滤表达式筛选数据包。过滤一个 IPv4 网段时,核心写法是 net 网段/前缀;再配合 src、dst、port 和逻辑运算符,就能只保留需要分析的流量。
以下示例以网卡 eth0 和网段 192.168.10.0/24 为例。执行抓包通常需要 root 权限或相应 capability。

一、确认抓包网卡和目标网段
先查看接口及地址:
ip -br addr tcpdump -D
服务器接口可能叫 ens33、enp0s3 或其他名称,不要直接照抄 eth0。网段也要写网络地址,例如主机地址 192.168.10.25/24 对应的过滤网段是 192.168.10.0/24。
二、过滤指定网段的双向流量
同时捕获源地址或目标地址属于该网段的数据包:
sudo tcpdump -i eth0 net 192.168.10.0/24 -nn
-i eth0 指定接口,-nn 禁止把 IP 和端口转换为名称,可减少解析等待并保持输出清晰。需要监听所有接口时可把接口改为 any。
三、只过滤来源或目标网段
只查看从该网段发出的流量:
sudo tcpdump -i eth0 src net 192.168.10.0/24 -nn
只查看发往该网段的流量:
sudo tcpdump -i eth0 dst net 192.168.10.0/24 -nn
src net 和 dst net 适合区分客户端请求与服务器返回。如果只写 net,两个方向都会匹配。
四、叠加端口、协议与排除条件
过滤该网段中的 HTTPS 流量:
sudo tcpdump -i eth0 'net 192.168.10.0/24 and tcp port 443' -nn
过滤网段内的 DNS 流量:
sudo tcpdump -i eth0 'net 192.168.10.0/24 and port 53' -nn
排除 SSH,避免远程终端产生大量干扰包:
sudo tcpdump -i eth0 'net 192.168.10.0/24 and not port 22' -nn
复杂表达式建议使用单引号包裹。组合 and、or 时应加括号明确优先级,例如:
sudo tcpdump -i eth0 'net 192.168.10.0/24 and (port 80 or port 443)' -nn

五、限制数量并保存为抓包文件
只捕获 100 个匹配包:
sudo tcpdump -i eth0 net 192.168.10.0/24 -nn -c 100
保存为 pcap 文件,之后可用 Wireshark 或 tcpdump 继续分析:
sudo tcpdump -i eth0 net 192.168.10.0/24 -nn -w subnet.pcap
读取文件时不需要再访问网卡:
tcpdump -r subnet.pcap -nn
六、没有抓到数据时检查这些位置
- 接口是否正确,容器、虚拟专用网络和网桥流量可能经过其他虚拟接口。
- 网段掩码是否正确,
/24、/16的匹配范围差别很大。 - 流量是否发生在本机其他接口,可暂时用
-i any验证。 - 是否错误组合了
src、dst或过多的and条件。 - 先移除端口条件确认网段能匹配,再逐步加回过滤项。











