温馨提示×

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做图形化与深度分析。

0