Wireshark 使用备忘

Wireshark 网络抓包工具常用操作记录

Wireshark 使用备忘

Wireshark 是最流行的网络协议分析工具,用于捕获和分析网络流量。本文记录常用操作和过滤技巧。

1. 安装

1.1 Windows

1
2
3
4
5
# 使用 winget 安装
winget install Wireshark

# 或下载安装包
# https://www.wireshark.org/download.html

2. 基本操作

2.1 选择网卡

启动 Wireshark 后,在首页选择要监听的网卡:

  • 本地回环:Loopback: lo0(捕获本机通信)
  • 以太网:Etherneteth0
  • Wi-Fi:WLANwlan0

2.2 开始/停止抓包

  • 开始:双击网卡或点击蓝色鲨鱼图标
  • 停止:点击红色方块按钮 Ctrl+E
  • 重新开始:点击绿色鲨鱼图标 Ctrl+R

2.3 保存抓包

1
2
3
4
5
6
7
8
# 保存为 pcapng 文件
文件 -> 保存 (Ctrl+S)

# 导出特定数据包
文件 -> 导出特定数据包

# 另存为 pcap 格式(兼容老版本)
文件 -> 另存为 -> 选择格式

3. 显示过滤器

3.1 协议过滤

1
2
3
4
5
6
7
tcp              # 只显示 TCP 流量
udp              # 只显示 UDP 流量
http             # 只显示 HTTP 流量
dns              # 只显示 DNS 流量
icmp             # 只显示 ICMP 流量(ping)
ssh              # 只显示 SSH 流量
tls || ssl       # 显示 TLS/SSL 流量

3.2 IP 地址过滤

1
2
3
4
5
ip.addr == 192.168.1.100      # 源或目的 IP
ip.src == 192.168.1.100       # 源 IP
ip.dst == 192.168.1.100       # 目的 IP
ip.addr == 192.168.1.0/24     # 网段过滤
!(ip.addr == 192.168.1.100)   # 排除某 IP

3.3 端口过滤

1
2
3
4
5
tcp.port == 80                # TCP 80 端口(源或目的)
tcp.srcport == 80             # TCP 源端口
tcp.dstport == 80             # TCP 目的端口
udp.port == 53                # UDP 53 端口(DNS)
tcp.port >= 8000 && tcp.port <= 9000  # 端口范围

3.4 组合过滤

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 与
ip.addr == 192.168.1.100 && tcp.port == 80

# 或
tcp.port == 80 || tcp.port == 443

# 非
!(ip.addr == 192.168.1.100)

# 复杂组合
(ip.addr == 192.168.1.100 && tcp.port == 80) || (ip.addr == 192.168.1.200 && tcp.port == 443)

3.5 HTTP 相关

1
2
3
4
5
6
7
http                          # 所有 HTTP 流量
http.request.method == "GET"  # GET 请求
http.request.method == "POST" # POST 请求
http.request.uri contains "api"  # URL 包含 api
http.response.code == 200     # 响应码 200
http.response.code == 404     # 响应码 404
http.host contains "baidu"    # Host 包含 baidu

3.6 TCP 相关

1
2
3
4
5
6
7
tcp.flags.syn == 1            # SYN 包
tcp.flags.ack == 1            # ACK 包
tcp.flags.fin == 1            # FIN 包
tcp.flags.reset == 1          # RST 包
tcp.analysis.retransmission   # 重传包
tcp.analysis.duplicate_ack    # 重复 ACK
tcp.analysis.zero_window      # 零窗口

3.7 DNS 相关

1
2
3
4
5
6
7
dns                           # 所有 DNS 流量
dns.qry.name == "baidu.com"   # 查询指定域名
dns.qry.name contains "baidu" # 查询域名包含 baidu
dns.flags.response == 1       # DNS 响应
dns.flags.response == 0       # DNS 请求
dns.a                         # A 记录查询
dns.aaaa                      # AAAA 记录查询

4. 抓包过滤器

在开始抓包前设置,减少捕获的数据量:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 语法
host 192.168.1.100            # 指定主机
net 192.168.1.0/24            # 指定网段
port 80                        # 指定端口
src host 192.168.1.100        # 源主机
dst host 192.168.1.100        # 目的主机

# 组合
host 192.168.1.100 && port 80
tcp port 80 || tcp port 443
!(port 22)                     # 排除 SSH

5. 实用功能

5.1 追踪 TCP 流

右键点击数据包 → 追踪流 → TCP 流

可以看到完整的请求和响应内容,适合分析 HTTP 通信。

5.2 导出对象

1
2
文件 -> 导出对象 -> HTTP
# 可以导出图片、文件等

5.3 统计分析

1
2
3
4
5
统计 -> 捕获文件属性    # 文件概况
统计 -> 协议分级        # 协议分布
统计 -> 端点           # 通信端点统计
统计 -> 对话           # 通信对话统计
统计 -> I/O 图表       # 流量图表

5.4 搜索数据包

Ctrl+F 打开搜索:

  • 显示过滤器:使用过滤语法
  • 十六进制值:搜索十六进制
  • 字符串:搜索文本内容
  • 正则表达式:正则匹配

5.5 标记数据包

1
2
3
右键 -> 标记/取消标记 (Ctrl+M)
标记的数据包会高亮显示
导出时可选择只导出标记的包

6. 常用分析场景

6.1 分析 HTTP 请求

1
2
3
4
5
6
7
8
# 过滤器
http.request

# 查看请求详情
点击数据包 -> 展开 Hypertext Transfer Protocol

# 追踪完整请求响应
右键 -> 追踪流 -> TCP 流

6.2 分析 TCP 三次握手

1
2
3
4
5
6
7
# 过滤器
ip.addr == 目标IP && tcp.flags.syn == 1 || tcp.flags.ack == 1

# 顺序
# 1. SYN (Client -> Server)
# 2. SYN,  ACK (Server -> Client)
# 3. ACK (Client -> Server)

6.3 分析网络延迟

1
2
3
4
5
6
7
8
# 查看 TCP 握手时间
tcp.flags.syn == 1 || tcp.flags.ack == 1

# 查看 TCP 重传
tcp.analysis.retransmission

# 查看 RTT
统计 -> TCP 流图形 -> 时间序列(Stevens)

6.4 排查 DNS 问题

1
2
3
4
5
6
7
8
# 查看 DNS 查询和响应
dns

# 查看响应时间
dns.time

# 查看失败的查询
dns.flags.rcode != 0

6.5 分析 HTTPS

1
2
3
4
5
6
7
8
9
# 解密 HTTPS 流量(需要浏览器导出密钥)
# 设置环境变量
export SSLKEYLOGFILE=/path/to/keylog.txt

# Wireshark 配置
编辑 -> 首选项 -> Protocols -> TLS -> (Pre)-Master-Secret log filename

# 过滤
tls || ssl

7. 命令行工具

7.1 tshark

Wireshark 的命令行版本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 安装
sudo apt install tshark

# 抓包
tshark -i eth0                  # 抓取 eth0 接口
tshark -i eth0 -f "port 80"     # 抓取 80 端口

# 读取文件
tshark -r capture.pcap          # 读取文件
tshark -r capture.pcap -Y "http" # 过滤 HTTP

# 输出格式
tshark -r capture.pcap -T fields -e ip.src -e ip.dst -e frame.protocols

# 统计
tshark -r capture.pcap -q -z conv, tcp    # TCP 会话统计
tshark -r capture.pcap -q -z io, phs       # 协议层级统计

# 写入文件
tshark -i eth0 -w output.pcap -c 1000  # 抓 1000 个包

7.2 常用 tshark 命令

1
2
3
4
5
6
7
8
# 实时查看 HTTP 请求
tshark -i eth0 -Y "http.request" -T fields -e http.host -e http.request.uri

# 查看 DNS 查询
tshark -i eth0 -Y "dns.qry.name" -T fields -e dns.qry.name

# 统计流量 Top 10
tshark -r capture.pcap -T fields -e ip.src | sort | uniq -c | sort -nr | head -10

参考链接

Licensed under CC BY-NC-SA 4.0