Linux Sniffer怎样进行流量过滤
小樊
44
2025-12-23 04:19:54
Linux Sniffer流量过滤实用指南
一、tcpdump表达式过滤
基本语法与常用选项
指定网卡:使用**-i any监听所有接口,或 -i eth0指定接口;抓包长度用 -s 0避免截断;显示链路层头用 -e**;以数字显示地址端口用**-nn**;将结果写入文件用**-w file.pcap**,后续用**-r file.pcap读取;限制包数用 -c N**。这些选项可与过滤表达式组合使用,精准缩小捕获范围。
三类过滤原语与逻辑组合
类型(type):host、net、port、portrange ;方向(dir):src、dst、src or dst、src and dst ;协议(proto):ip、ip6、arp、rarp、tcp、udp 等。可用逻辑运算符**and(&&)/or(||)/not(!)**与括号组合表达式。例如:只抓两台主机之间的 HTTP/HTTPS 流量可写为:‘host 192.168.1.10 and host 10.0.0.20 and (tcp port 80 or tcp port 443)’。
典型场景速查
按主机/网段:‘host 1.2.3.4 ’;‘src net 192.168.1.0/24 ’;‘dst net 10.0.0.0/8 ’
按端口/范围:‘port 80 ’;‘src port 1024-65535 ’;‘portrange 8000-8080 ’
按协议/方向:‘icmp’;‘tcp[tcpflags] & (tcp-syn|tcp-ack) != 0’(含 SYN 或 ACK 的 TCP);‘not arp’(排除 ARP)
按大小/内容:‘greater 128 ’(包长>128字节);‘tcp port 80 and (less 256 or greater 1500 )’(HTTP 且包长在特定区间)
二、BPF字节级过滤与TCP标志位
原理要点
tcpdump 的过滤基于内核的BPF(Berkeley Packet Filter) 。可用“proto[offset:size] ”访问报文头部字段,用关系运算与位运算做精确匹配,适合定位握手、异常标志位、特定载荷等细粒度问题。
常见用法示例
以太网广播:‘ether[0] & 1 != 0’(最低位为 1 表示广播/组播)
IPv4 报文:‘ip[0] = 4’(版本字段为 4)
ICMP Echo 请求:‘icmp[icmptype] = icmp-echo’ 或 ‘icmp[0] = 8’
TCP SYN 包:‘tcp[tcpflags] = tcp-syn’;仅 SYN 不含 ACK:‘tcp[tcpflags] & (tcp-syn|tcp-ack) = tcp-syn’
结合方向与端口:‘dst host 10.0.0.5 and tcp port 443 and (tcp[tcpflags] & tcp-syn) != 0’(仅目标为 10.0.0.5:443 的 SYN)
三、按协议与方向的精细化过滤
协议与方向组合
仅入站/出站:‘dst host 192.168.1.100 ’(入站);‘src host 192.168.1.100 ’(出站)
仅某协议族:‘ip6’(仅 IPv6);‘arp’(仅 ARP);‘icmp or icmp6’(仅 ICMP/ICMPv6)
排除噪声:‘not port 22 and not icmp’(排除 SSH 与 ping)
子网到子网:‘src net 192.168.0.0/16 and dst net 10.0.0.0/8 ’
端口范围与集合:‘portrange 1000-2000 ’;‘tcp port 80 or udp port 53 ’
显示与保存:加**-A查看 ASCII 内容(如 HTTP),加 -X/-XX查看十六进制,配合 -w**保存后用 Wireshark 深入分析
四、使用iptables进行“统计型”过滤与计数
思路与适用场景
iptables 工作在Netfilter 钩子上,可对匹配到的流量做计数与日志,适合“按源/目的/端口统计流量”的需求;它并不替代抓包分析,但常与 tcpdump 配合,用于快速量化某类流量的包/字节数。
快速示例
创建计数链并接入 INPUT/OUTPUT:
iptables -N traffic
iptables -A INPUT -j traffic
iptables -A OUTPUT -j traffic
统计与某主机的双向流量:
iptables -A traffic -s 192.168.88.100
iptables -A traffic -d 192.168.88.100
清零计数并持续观察:
iptables -Z
watch -d -n1 “iptables -L traffic -nvx”
提示:如需持久化规则,请使用系统的 iptables 保存机制(如 iptables-save/restore 或 firewalld 的持久化配置)。
五、抓包与过滤最佳实践
权限与安全
抓包通常需要root 或具备CAP_NET_RAW 能力;在不需要混杂模式时用**-p**保持正常模式,避免无意监听无关流量。
性能与存储
使用**-c限制包数、 -s 0避免截断、 -w写入文件后再分析,必要时配合 -r**回放;对高吞吐链路建议先“过滤再抓包”,减少 CPU 与磁盘压力。
过滤思路
先定“维度”(源/目的 IP、端口、协议、方向),再用逻辑运算组合;对疑难问题再用BPF 字节级 条件精确命中。必要时将结果**-w**保存,用 Wireshark/tshark 做图形化与深度分析。