Wireshark 网络抓包与协议分析基础
Wireshark 是什么
Wireshark(前身 Ethereal)是一款开源的网络包分析器,可以实时捕获网络接口上的所有数据包并解析其协议内容。它广泛应用于:
- 渗透测试:分析自己发出的攻击流量是否正确,抓目标的响应包
- 运维排查:定位网络延迟、丢包、连接问题的根因
- 协议学习:HTTP、DNS、TCP 三次握手等所有网络协议的最佳学习工具
- 取证分析:分析网络流量日志还原攻击过程
基础用法
启动抓包
选择要抓包的接口(eth0 / wlan0 / lo 回环),点击放大镜图标开始。抓包开始后会看到实时滚动的包列表。
过滤表达式(关键技能)
Wireshark 的显示过滤语法是必须掌握的核心技能:
# 只看 HTTP 请求
http.request
# 只看特定 IP 的包
ip.addr == 192.168.1.100
# 组合条件
http.request and ip.src == 192.168.1.50 and tcp.port == 8080
# DNS 查询过滤
dns.qry.name contains "example"
# 排除特定协议
!arp and !icmp
# TCP SYN 包(TCP 三次握手第一个包)
tcp.flags.syn == 1
保存抓包文件
File → Save As → 选择 pcapng 格式
pcapng 是 Wireshark 原生格式,包含包的时间戳和元数据。抓到的文件可以传给团队其他成员、导入 Zeek/Suricata 等工具做批量分析。
三个面板详解
- Packet List:每个包一行,显示编号、时间戳、源 IP、目的 IP、协议、信息摘要
- Packet Details:选中一个包后,这里分层显示各协议头(Ethernet → IP → TCP → HTTP),可以逐层展开查看字段
- Packet Bytes:最底层是原始字节,hex + ASCII 两种视图并排显示
实战场景
场景一:确认反向 Shell 是否连上
在 Metasploit 或 nc 发起的反向 shell 连接时,用 Wireshark 抓包:
- 过滤器设为
tcp.port == 4444(监听端口) - 成功连上后会看到 TCP 三次握手 → 后续的数据传输
- 如果只看到 SYN 包没有 SYN-ACK,说明目标有防火墙拦截
场景二:分析 HTTP POST 数据
Burp Suite 虽然可以看到 HTTP 请求,但有时候需要看底层的 TCP 重传、分段情况。Wireshark 可以:
- 右键 HTTP 请求 → Follow → TCP Stream,查看完整会话
- 分析 TCP 层的乱序、重传、窗口大小等信息
场景三:检测 ARP 欺骗
arp.opcode == 2 # ARP 响应包(正常应该很少)
arp.announcement == 1 # 免费 ARP / 无故 ARP
如果看到大量来自不同 MAC 地址的 ARP 响应声称自己是网关 IP,那就是有人在做 ARP 欺骗。
命令行版本 tshark
不方便打开 GUI 时用 tshark(Wireshark 命令行版):
# 抓 eth0 上的 HTTP 流量并实时显示
tshark -i eth0 -Y "http" -T fields -e frame.time -e http.host -e http.request.uri
# 读取已有的 pcap 文件做分析
tshark -r capture.pcapng -q -z io,stat,5 # 每 5 秒统计一次流量
tcpdump 入门
tcpdump 是 Wireshark 的命令行抓包基础,SSH 远程服务器上最常用:
tcpdump -i eth0 host 192.168.1.100 and port 80 -w capture.pcap
抓完用 Wireshark 打开 .pcap 文件继续分析。