Skip to content

关于Wireshark

Wireshark(前身 Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。

它可以运行在 Windows 和 Linux 操作系统上。可以使用该工具捕获并分析各类协议数据包,本文将讲解该工具的安装及基本使用方法。

为什么要学 Wireshark?

在日常运维工作中,我们经常遇到这些头疼问题:

  • 网络莫名其妙断线:用户抱怨网络慢,但不知道问题出在哪
  • 安全事件调查:怀疑系统被入侵,需要分析网络流量找证据
  • 应用性能问题:数据库连接慢,API 响应超时,排查困难
  • 协议学习需求:想深入理解 TCP/IP、HTTP、TLS 等协议工作原理

这时候,Wireshark 就成了我们的"火眼金睛",能够透视网络流量的每一个细节。

下载及安装

Kali Linux 系统自带 Wireshark 工具,而 Windows 系统中默认没有安装该工具。因此,本节讲解如何在 Windows 系统中安装 Wireshark 工具。

  1. 下载地址:https://www.wireshark.org/#download
  2. 选择适合自己系统版本:Windows x64 安装程序
  3. 双击下载的软件包进行安装。安装比较简单,只要使用默认值,单击 Next 按钮,即可安装成功

界面导航快捷键

掌握这些快捷键,分析效率翻倍:

快捷键功能使用场景
Ctrl+F搜索数据包查找特定内容
Ctrl+G跳转到指定包快速定位
Ctrl+M标记数据包重点关注
Ctrl++ / Ctrl+-放大缩小调整显示
  1. 选择网卡:选择正确的网络接口(WiFi 或以太网)
  2. 设置捕获过滤器:避免抓到无关流量
  3. 调整缓冲区:大流量环境下增加缓冲区大小
  4. 关闭域名解析:提升抓包性能

💡 小贴士:新手建议先不设置过滤器,抓取一段时间后再用显示过滤器分析。

过滤器

显示过滤器

显示过滤器是 Wireshark 的核心功能,语法简单但功能强大:

IP 地址过滤

ip.src == 192.168.1.100      # 源IP
ip.dst == 192.168.1.1        # 目标IP  
ip.addr == 192.168.1.0/24    # IP段
!(ip.addr == 192.168.1.1)    # 排除IP

端口过滤

tcp.port == 80               # HTTP流量
tcp.port == 443              # HTTPS流量
tcp.port == 22               # SSH流量
tcp.port >= 1000 and tcp.port <= 2000  # 端口范围

HTTP 专用过滤器

http.request.method == "POST"         # POST请求
http.response.code == 404             # 404错误
http.host == "www.example.com"        # 特定域名
http.user_agent contains "Chrome"     # 浏览器类型
http.time > 1.0                       # 响应时间超过1秒

高级组合技巧

# 逻辑组合
(tcp.port == 80 or tcp.port == 443) and ip.src == 192.168.1.100

# 内容搜索
tcp contains "password"               # 包含密码字段
http contains "admin"                 # 包含admin关键词

# 正则表达式
http.host matches ".*\\.com$"         # 匹配.com域名

# 时间过滤
frame.time >= "2024-01-01 00:00:00"   # 特定时间范围

捕获过滤器

基于 BPF 语法,在抓包时就过滤:

host 192.168.1.1              # 特定主机
port 80                        # 特定端口  
host 192.168.1.1 and port 80  # 组合条件
not port 22                    # 排除SSH

协议分析

TCP 连接分析

TCP 是网络通信的基础,掌握 TCP 分析是必备技能:

连接建立分析

  • 查找三次握手:SYN → SYN-ACK → ACK
  • 连接重置:tcp.flags.reset == 1
  • 连接超时:tcp.analysis.retransmission

性能问题诊断

tcp.analysis.retransmission    # TCP重传
tcp.analysis.duplicate_ack     # 重复ACK
tcp.analysis.zero_window       # 窗口为零
tcp.analysis.out_of_order      # 包乱序

实战技巧:右键数据包选择 "Follow TCP Stream" 可以看到完整的 TCP 会话内容。

HTTP 流量分析

Web 应用问题排查的核心:

# 错误响应分析
http.response.code >= 400      # 客户端和服务器错误

# 性能分析  
http.time > 2.0                # 慢速响应
http.content_length > 1000000  # 大文件传输

# 安全分析
http.request.uri contains "union"    # SQL注入尝试
http.request.uri contains "<script>" # XSS攻击尝试

DNS 解析分析

网络访问的第一步往往是 DNS 解析:

dns.flags.response == 0        # DNS查询
dns.flags.response == 1        # DNS响应
dns.flags.rcode != 0           # DNS错误
dns.time > 0.1                 # 慢速DNS查询
dns.qry.name contains "example.com"  # 特定域名

TLS/SSL 安全分析

HTTPS 流量虽然加密,但握手过程暴露大量信息:

tls.handshake                  # TLS握手过程
tls.handshake.certificate      # 证书信息
tls.alert                      # TLS警报
tls.record.version == 0x0303   # TLS 1.2版本

网络故障排查实战

常见连接问题

1. 连接建立失败

  • 现象:看到 SYN 包,但没有 SYN-ACK 响应
  • 原因:目标服务器不可达或端口未开放
  • 排查:检查防火墙设置和服务状态

2. 连接频繁重置

  • 现象:大量 RST 包
  • 原因:应用程序异常终止连接
  • 排查:检查应用程序日志

3. 数据传输缓慢

  • 现象:大量重传和重复 ACK
  • 原因:网络拥塞或丢包
  • 排查:检查网络设备状态

性能问题诊断

利用 Wireshark 的统计功能:

  • Statistics → I/O Graph:查看流量趋势
  • Statistics → Conversations:分析通信会话
  • Statistics → Endpoints:查看端点统计
  • Statistics → Protocol Hierarchy:协议分布

实战案例:网站访问缓慢

  1. 抓取用户访问流量
  2. 分析 DNS 解析时间dns.time > 0.1
  3. 检查 HTTP 响应时间http.time > 1.0
  4. 查看 TCP 传输问题tcp.analysis.retransmission
  5. 定位瓶颈环节:DNS、连接建立、还是数据传输?

网络安全分析

攻击行为检测

端口扫描识别

tcp.flags.syn == 1 and tcp.flags.ack == 0  # SYN扫描

Web 攻击检测

# SQL注入尝试
http.request.uri contains "union" or http.request.uri contains "select" or http.request.uri contains "drop"

# XSS攻击尝试  
http.request.uri contains "<script>" or http.request.uri contains "javascript:"

# 目录遍历攻击
http.request.uri contains "../"

可疑流量特征

# 异常用户代理
http.user_agent contains "bot" or http.user_agent contains "scanner"

# 大量失败请求
http.response.code == 401 or http.response.code == 403

# DNS隧道检测
dns.qry.name.len > 50

数据泄露检测

# 明文密码传输
tcp contains "password=" or tcp contains "passwd="

# 敏感信息泄露
tcp contains "credit" or tcp contains "ssn"

# 可疑文件传输
http.request.method == "PUT" or ftp-data

实战案例:安全事件分析

某单位怀疑遭受攻击,提供了流量包要求分析:

分析步骤

  1. 概览分析:Statistics → Protocol Hierarchy 查看协议分布
  2. 异常检测:查找大量连接、异常端口、错误响应
  3. 攻击特征:使用安全过滤器查找攻击模式
  4. 证据收集:Follow Stream 获取完整攻击过程
  5. 溯源分析:分析攻击者 IP、工具特征

GitHub 项目识别技巧

http contains "github"
http.host contains "github"
http.request.uri contains "github"

高效分析技巧

大文件处理策略

面对 GB 级别的抓包文件:

  1. 时间分段frame.time >= "2024-01-01 10:00:00" and frame.time <= "2024-01-01 11:00:00"
  2. 协议过滤:先分析主要协议,再深入细节
  3. 使用 tshark:命令行工具处理大文件更高效
  4. 导出相关流:File → Export Objects 导出 HTTP 对象

颜色规则优化

自定义颜色让分析更直观:

  • 红色:TCP 错误 tcp.analysis.flags
  • 黄色:HTTP 错误 http.response.code >= 400
  • 绿色:DNS 查询 dns
  • 蓝色:正常 HTTP http

设置路径:View → Coloring Rules

统计分析技巧

  • 流量趋势:I/O Graph 查看时间分布
  • 对话分析:Conversations 找出主要通信方
  • 协议分布:Protocol Hierarchy 了解流量构成
  • 响应时间:Service Response Time 分析性能

命令行神器:tshark

对于批量分析和自动化,tshark 是不可替代的工具:

基础用法

# 实时抓包
tshark -i eth0

# 分析文件
tshark -r capture.pcap

# 应用过滤器
tshark -r capture.pcap -Y "http"

# 自定义输出
tshark -r capture.pcap -T fields -e ip.src -e ip.dst -e http.host

高级分析

# JSON 输出
tshark -r capture.pcap -T json

# 导出 HTTP 对象
tshark -r capture.pcap --export-objects http,/tmp/objects/

# 统计分析
tshark -r capture.pcap -z conv,tcp
tshark -r capture.pcap -z endpoints,ip
tshark -r capture.pcap -z io,phs

实用脚本示例

#!/bin/bash
# HTTP 流量分析脚本

echo"=== 访问最多的网站 ==="
tshark -r $1 -Y "http.request" -T fields -e http.host | \
sort | uniq -c | sort -nr | head -10

echo"=== HTTP 状态码分布 ==="
tshark -r $1 -Y "http.response" -T fields -e http.response.code | \
sort | uniq -c | sort -nr

echo"=== 用户代理统计 ==="
tshark -r $1 -Y "http.request" -T fields -e http.user_agent | \
sort | uniq -c | sort -nr | head -5

实战演练:完整分析流程

网络问题排查检查清单

  1. 📋 基础信息收集
    • Statistics → Summary:了解抓包基本信息
    • 时间范围、数据包数量、文件大小
  2. 🔍 协议分析
    • Protocol Hierarchy:查看协议分布
    • 识别主要协议和异常协议
  3. 💬 通信分析
    • Conversations:找出主要通信方
    • 分析流量方向和数据量
  4. ⚠️ 异常检测
    • 查找错误、重传、异常状态码
    • 检查是否有攻击特征
  5. ⏱️ 性能分析
    • I/O Graph:查看流量趋势
    • Response Time:分析响应性能
  6. 🔬 深入分析
    • Follow Stream:查看具体通信内容
    • 导出相关文件和对象

常见问题及解决方案

问题 1:中文显示乱码

  • 解决:Edit → Preferences → Protocols → HTTP → 设置字符编码为 UTF-8

问题 2:DNS 解析导致界面卡顿

  • 解决:View → Name Resolution → 关闭所有名称解析

问题 3:内存占用过高

  • 解决:使用显示过滤器减少显示包数量,或分段分析

问题 4:时间显示不直观

  • 解决:View → Time Display Format → 选择合适的时间格式