Ubuntu 下使用 Sniffer 做数据挖掘的实操流程
一、目标与总体流程
- 明确目标:如故障定位、性能瓶颈分析、安全威胁发现、业务行为画像等。
- 选择工具:抓包侧用tcpdump/Wireshark/Scapy,应用层语义解析可用mysqlsniffer等专用嗅探器。
- 采集数据:在合适的网段/接口以混杂模式抓取,并写入**.pcap**文件以便离线分析。
- 数据解析:用显示过滤器与统计功能做协议/会话/内容层面的解析。
- 特征工程:从流量中提取时延、重传、吞吐、连接特征、错误率等度量。
- 建模与可视化:用统计/机器学习做异常检测、聚类或趋势分析,并用Grafana/ELK展示。
- 合规与风险控制:全程确保授权、最小化采集、脱敏与访问控制。
二、工具选型与安装
- 抓包与协议分析
- tcpdump:命令行、轻量、适合自动化与批处理。
- 安装:sudo apt-get update && sudo apt-get install -y tcpdump
- Wireshark:图形界面、强大的协议解码与显示过滤。
- 安装:sudo apt-get update && sudo apt-get install -y wireshark
- 非 root 抓包:sudo dpkg-reconfigure wireshark,按提示允许非 root 捕获。
- Scapy:Python 库,灵活构造/解析/过滤,适合自定义分析与特征抽取。
- 安装:sudo apt-get update && sudo apt-get install -y python3-scapy
- 应用层专用嗅探
- mysqlsniffer:解析 MySQL 协议,便于在不改库的前提下观测查询。
- 安装依赖:sudo apt-get install -y libpcap-dev
- 编译运行:gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c
- 监听示例:sudo ./mysqlsniffer eth0;仅打印查询:sudo ./mysqlsniffer --no-mysql-hdrs eth0 | grep COM_QUERY
- 提示:抓包通常需要管理员权限;Wireshark 可通过配置实现非 root 捕获。
三、数据采集与预处理
- 选择接口与查看接口列表
- 查看:tcpdump -D(含any虚拟接口,可跨接口抓包)
- 监听:sudo tcpdump -i eth0
- 捕获过滤器(BPF,减少无关数据)
- 示例:sudo tcpdump -i eth0 -nn -s0 -w capture.pcap ‘tcp port 80 or 443’
- 说明:-nn 不解析主机/端口名,-s0 抓取完整包,-w 写入 pcap
- 显示过滤器(Wireshark/tshark,分析阶段用)
- 示例:http.request、tls.handshake、mysql.query
- 典型场景
- HTTP 明文流量:sudo tcpdump -i eth0 -nn -A -s0 ‘tcp port 80’
- DNS 查询:sudo tcpdump -i eth0 -nn -s0 -w dns.pcap ‘udp port 53’
- 长时抓包与分段:sudo tcpdump -i eth0 -nn -s0 -C 100 -w session_%03d.pcap
- 性能与合规
- 控制抓包量与文件大小,避免高负载/磁盘占满;仅在授权范围内采集与留存。
四、数据挖掘方法与示例
- 流量会话与主机画像
- 统计 Top N 会话/主机:tshark -r capture.pcap -q -z conv,tcp
- 提取 HTTP 主机与 UA:tshark -r capture.pcap -Y ‘http.request’ -T fields -e http.host -e http.user_agent | sort | uniq -c | sort -nr
- 性能与异常特征
- TCP 重传率与 RTT 估算:tshark -r capture.pcap -q -z io,stat,1,“tcp.analysis.retransmission”,“tcp.analysis.rtt”
- 长连接/短连接分布:按 tcp.stream 聚合会话时长与包数
- 安全威胁线索
- 暴力登录特征:tshark -r capture.pcap -Y ‘ssh’ -T fields -e ip.src -e tcp.srcport | sort | uniq -c | sort -nr | head
- SQL 注入/可疑关键字:tshark -r capture.pcap -Y ‘http.request’ -T fields -e http.host -e http.request.uri | grep -iE “('|union|select|sleep|benchmark)”
- DDoS/异常突发:按时间窗口统计 pps/bps 峰值与来源分布
- 应用层深度解析
- MySQL 查询观测:sudo ./mysqlsniffer --no-mysql-hdrs eth0 | grep COM_QUERY | awk ‘{print $1,$2,$NF}’ | sort | uniq -c | sort -nr
- 自动化特征抽取(Scapy 示例)
- 计算 TCP 往返时延(简化示例,需按实际握手/ACK 匹配完善)
- from scapy.all import *
- times = {}
- def handle(p):
- if p.haslayer(TCP) and p[TCP].flags & 0x02: # SYN
- times[(p[IP].src, p[TCP].sport, p[IP].dst, p[TCP].dport)] = p.time
- elif p.haslayer(TCP) and p[TCP].flags & 0x10: # ACK
- key = (p[IP].dst, p[TCP].dport, p[IP].src, p[TCP].sport)
- if key in times:
- print(“RTT(ms):”, (p.time - times[key])*1000)
- sniff(filter=“tcp”, prn=handle, store=False)
- 建模与可视化
- 将特征(如重传率、握手失败率、pps 峰值、URI 熵、UA 异常度)导入 Pandas/Scikit-learn 做聚类/异常检测;用 Grafana+Prometheus/ELK 展示趋势与告警。
五、合规与安全注意事项
- 仅在明确授权的网络与主机上抓包,避免收集敏感/个人数据;对留存数据加密与最小化。
- 生产环境抓包可能影响性能与稳定性,应控制速率、文件大小与抓包时长,并优先在镜像/测试链路进行。
- 使用显示过滤器与离线分析减少不必要的数据暴露;对分析结果设置访问控制与审计。