Wireshark 抓包分析入门:网络流量安全检测实战

适用场景

本教程适用于网络安全运维人员、渗透测试工程师和开发者,需要通过网络流量抓包分析来排查安全威胁的场景。典型应用包括:分析恶意软件的 C2 通信模式、检测未加密的敏感数据传输、识别 DNS 隧道攻击、定位慢速攻击的源特征、验证 WAF 规则是否生效等。

前置条件

  • 安装了 Wireshark 的 Windows/Linux/macOS 机器(下载地址
  • 管理员/root 权限(抓包需要 RAW socket 权限)
  • 基本的 TCP/IP 网络协议知识

Linux 下通过命令行安装:

# Ubuntu/Debian
sudo apt-get install -y wireshark tshark

# CentOS/RHEL
sudo yum install -y wireshark

# 将当前用户加入 wireshark 组(避免每次 sudo)
sudo usermod -aG wireshark $USER
# 重新登录后生效

原理说明

Wireshark 是目前最广泛使用的网络协议分析工具,基于 libpcap/WinPcap 库捕获网卡上的原始数据包。其工作流程为:

  1. 捕获:网卡设置为混杂模式(promiscuous mode),捕获所有经过的数据包
  2. 过滤:使用 BPF(Berkeley Packet Filter)语法实时筛选感兴趣的数据流
  3. 分析:对捕获的包进行协议解析,逐层展示以太网帧、IP 头、TCP/UDP 段、应用层负载
  4. 追踪:通过”Follow TCP Stream”功能重建完整的应用层会话内容

抓包分析在网络安全上的核心价值在于:攻击者的行为必然在网络层留下痕迹,而 Wireshark 可以让这些痕迹变得可视化。

操作步骤

步骤一:选择正确的捕获接口

# 命令行:列出所有可用接口
tshark -D

# Wireshark GUI:启动后选择 Capture → Options
# 通常选择:
#   - eth0/ens33:有线网卡(服务器流量)
#   - wlan0:无线网卡
#   - any:所有接口(Linux 特有)

在云服务器上抓包时,注意选择正确的虚拟网卡(如 eth0、ens5)。如不确定,先运行 ip addr 确认活跃接口。

步骤二:配置捕获过滤器(Capture Filter)

BPF 语法在捕获阶段过滤,减少不必要的包量:

# 仅捕获目标端口 80 和 443 的 TCP 流量
tcp port 80 or tcp port 443

# 仅捕获来自/去往特定 IP 的流量
host 192.168.1.100

# 仅捕获 DNS 查询和响应
port 53

# 排除 SSH 流量(避免自己产生的大量干扰数据)
not port 22

# 组合:捕获特定 IP 的 HTTP/HTTPS 流量,排除 SSH
host 10.0.0.5 and (tcp port 80 or tcp port 443) and not port 22

步骤三:使用显示过滤器(Display Filter)分析威胁

显示过滤器在捕获后应用,语法比 BPF 更强大,支持协议字段级过滤:

1. 检测未加密的 HTTP 登录

http.request.method == "POST" and http contains "password"

在 Follow TCP Stream 中可以直接看到明文用户名密码。

2. 识别 DNS 隧道攻击

dns.qry.name.len > 30 and dns.flags.response == 0

DNS 隧道通常使用超长子域名编码数据,查询长度显著超过正常值(正常 DNS 查询通常 < 30 字符)。

3. 检测端口扫描

tcp.flags.syn == 1 and tcp.flags.ack == 0 and tcp.flags.reset == 1

SYN-ACK-RST 三连模式是端口扫描的典型特征。大量不同目标端口的 SYN 包(无后继 ACK)表明 SYN 扫描。

4. 发现异常大包(可能的数据泄露)

frame.len > 1000 and tcp.port == 80

正常 HTTP 请求通常较小,响应体大的页面可能需要排除 CDN 资源。结合 data.len 过滤出站方向的异常大包。

5. 定位 Slowloris 慢速攻击

http.request and frame.time_delta > 10

Slowloris 攻击者会缓慢发送 HTTP headers,包间延迟远高于正常浏览器。过滤出包间隔 > 10 秒的 HTTP 请求。

步骤四:Follow TCP Stream 重建会话

在 Wireshark GUI 中:

# 选中任意一个感兴趣的包 → 右键 → Follow → TCP Stream
# 或快捷键:Ctrl+Alt+Shift+T

命令行方式:

# 先导出特定流
tshark -r capture.pcap -Y "tcp.stream eq 0" -T fields -e tcp.payload

# 或直接查看 HTTP 请求+响应
tshark -r capture.pcap -Y "http" -T fields -e http.request.full_uri -e http.response.code

通过 TCP Stream 可以完整看到客户端和服务器的对话,包括未加密的凭据、SQL 注入载荷、XSS payload 等攻击内容。

步骤五:统计与导出报告

# 协议层级统计
tshark -r capture.pcap -z io,phs

# HTTP 请求统计
tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri | sort | uniq -c | sort -rn | head -20

# 端点统计(哪些 IP 通信量最大)
tshark -r capture.pcap -z endpoints,ip

# 导出特定对话
tshark -r capture.pcap -Y "ip.addr == 10.0.0.5" -w filtered.pcap

步骤六:实战案例——分析 SQL 注入尝试

# 捕获期间过滤 HTTP POST 请求
tshark -i eth0 -Y "http.request.method == POST" -T fields -e http.host -e http.request.uri -e http.file_data

# 查找包含 SQL 关键字的包
tshark -r capture.pcap -Y "http contains \"SELECT\" or http contains \"UNION\" or http contains \"1=1\"" -T fields -e frame.number -e http.request.uri -e http.file_data

配置验证

# 验证抓包本身正常工作
tshark -i eth0 -c 10  # 捕获 10 个包后自动停止

# 验证 pcap 文件可读
tshark -r capture.pcap -q -z io,stats

# 测试 BPF 过滤器
tcpdump -i eth0 -c 5 "tcp port 80"  # 与 Wireshark 共享 BPF 语法,先用 tcpdump 确认过滤器正确

常见问题

Q1:抓包时只能看到自己的包(没有其他流量)?

有两种可能:① 在交换机网络中,非镜像端口无法看到其他主机的流量(需要端口镜像/SPAN);② 在云环境中,虚拟交换机默认隔离。解决方案:在目标主机上直接抓包,或配置 VPC 流量镜像/安全日志。云服务器建议将 Wireshark 直接安装在目标机器上。

Q2:pcap 文件太大,如何分段?

# 按文件大小分片(每片 100MB)
tshark -i eth0 -b filesize:102400 -b files:5 -w capture.pcap

# 按时间分片(每 30 分钟一个文件)
tshark -i eth0 -b duration:1800 -b files:10 -w capture.pcap

参数 -b filesize 按 KB 计算(102400 = 100MB),-b files 最多保留 N 个文件(循环覆盖)。对于持续监控场景,建议配合 logrotate 管理抓包文件。

Q3:Wireshark 显示很多 TCP Retransmission,是攻击吗?

不一定。TCP 重传可能由网络拥塞、链路质量问题、服务器负载过高导致。如果大量重传集中在特定 IP 且伴随 ZeroWindow 通告,则可能是攻击者在耗尽目标连接资源(如 Slowloris 或 SYN flood)。通过 tcp.analysis.retransmission 过滤可以定位问题流。

总结

Wireshark 是网络安全分析中最基础也最强大的工具之一。通过精确设置捕获和显示过滤器,可以从海量流量中快速定位攻击特征。建议将此技能与入侵检测系统(IDS)配合使用——先用 Suricata/Snort 生成告警,再用 Wireshark 深度分析告警对应的流量。定期对关键服务器的流量进行抓包审计,是发现隐蔽威胁的有效手段。