实战场景:分析网页访问过程

我们将分析访问百度首页的完整过程,涵盖 DNS、TCP、HTTP 等协议。

第一步:准备工作

1. 启动

# 在终端启动或直接点击图标

sudo wireshark # Linux可能需要sudo权限

2. 配置捕获设置

推荐配置:

  • 菜单栏 → 捕获 → 选项

  • 勾选"在所有接口上使用混杂模式"

  • 设置"每个数据包的最大字节数"为默认的262144

  • 关键步骤:创建捕获过滤器避免干扰

    # 只抓取DNS、HTTP/HTTPS和与百度的通信
    port 53 or port 80 or port 443 or host www.baidu.com
第二步:开始抓包与分析
1. 开始抓包
# 1. 选择正确的网络接口(通常是Wi-Fi或以太网)

# 2. 点击"开始捕获"(蓝色鲨鱼鳍)

# 3. 立即打开浏览器访问:http://www.baidu.com

# 4. 等待页面加载完成后,返回Wireshark点击"停止"
2. 初始过滤与概览

观察到的典型流量模式:

No.     Time        Source          Destination     Protocol Length Info
1       0.000000    192.168.1.100   8.8.8.8         DNS      86     Standard query A www.baidu.com
2       0.025000    8.8.8.8         192.168.1.100   DNS      102    Standard query response A 110.242.68.4
3       0.026000    192.168.1.100   110.242.68.4    TCP      66     59312 → 80 [SYN]
4       0.056000    110.242.68.4    192.168.1.100   TCP      66     80 → 59312 [SYN, ACK]
5       0.056000    192.168.1.100   110.242.68.4    TCP      54     59312 → 80 [ACK]
6       0.057000    192.168.1.100   110.242.68.4    HTTP     531    GET / HTTP/1.1
...

【点这里】wireshark抓包实战视频

第三步:协议逐层深度分析
# 过滤DNS包

dns

# 或精确查找百度查询

dns.qry.name contains "baidu"

分析具体数据包:

请求包分析:

Frame 1: 86 bytes on wire
Ethernet II: 源MAC、目标MAC
Internet Protocol: 源IP(192.168.1.100)、目标IP(8.8.8.8)
User Datagram Protocol: 源端口53 → 目标端口随机高位端口
Domain Name System (query)
    Transaction ID: 0x9a1b
    Flags: 0x0100 Standard query
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.baidu.com: type A, class IN

响应包分析:

Domain Name System (response)
    Transaction ID: 0x9a1b  # 与请求匹配
    Flags: 0x8180 Standard query response, No error
    Questions: 1
    Answer RRs: 2
    Answers:
        www.baidu.com: type CNAME, class IN, cname www.a.shifen.com
        www.a.shifen.com: type A, class IN, addr 110.242.68.4

2. TCP 三次握手分析
# 过滤TCP握手

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

# 或追踪整个TCP流

右键任意TCP包 → 追踪流 → TCP流

详细分析握手过程:

客户端 SYN

Transmission Control Protocol
    Source Port: 59312
    Destination Port: 80
    [Stream index: 0]
    [TCP Segment Len: 0]
    Sequence number: 0 (relative sequence number)
    Acknowledgment number: 0
    Flags: 0x002 (SYN)
    Window size value: 65535
    [Calculated window size: 65535]
    [Window size scaling factor: -1 (unknown)]
    Options: (12 bytes)
        Maximum segment size: 1460 bytes
        No-Operation (NOP)
        Window scale: 6 (multiply by 64)
        SACK permitted

服务器 SYN-ACK

Flags: 0x012 (SYN, ACK)
Sequence number: 0
Acknowledgment number: 1  # 确认客户端的SYN
Window size value: 8192
Maximum segment size: 1460 bytes

客户端 ACK

Flags: 0x010 (ACK)
Sequence number: 1
Acknowledgment number: 1  # 确认服务器的SYN

3. HTTP 请求/响应分析
# 过滤HTTP请求

http.request.method == "GET"

# 查看完整的HTTP流

右键HTTP包 → 追踪流 → HTTP流

HTTP GET 请求分析:

Hypertext Transfer Protocol
    GET / HTTP/1.1\r\n
    Host: www.baidu.com\r\n
    Connection: keep-alive\r\n
    Upgrade-Insecure-Requests: 1\r\n
    User-Agent: Mozilla/5.0...Chrome/120.0.0.0\r\n
    Accept: text/html,...\r\n
    Accept-Encoding: gzip, deflate\r\n
    Accept-Language: zh-CN,zh;q=0.9\r\n
    \r\n
    [Full request URI: http://www.baidu.com/]
    [HTTP request 1/1]
    [Response in frame: 8]

HTTP 响应分析

Hypertext Transfer Protocol
    HTTP/1.1 200 OK\r\n
    Date: Wed, 15 Mar 2024 08:00:00 GMT\r\n
    Content-Type: text/html;charset=utf-8\r\n
    Connection: keep-alive\r\n
    Vary: Accept-Encoding\r\n
    Cache-Control: private, no-cache, no-store, proxy-revalidate\r\n
    Content-Length: 2381\r\n
    \r\n
    [HTTP response 1/1]
    [Time since request: 0.036000000 seconds]
    [Request in frame: 6]
    [Next request in frame: 12]
    File Data: 2381 bytes

【点这里】wireshark抓包实战视频

第四步:高级分析技巧

发现TCP重传:

查找重传包

tcp.analysis.retransmission

# 或通过着色规则快速识别

# 黑色背景的包通常是重传
2. 流量统计与可视化
# 1. 查看协议分布

统计 → 协议分级

# 2. 查看端点通信情况

统计 → 端点 → IPv4标签页

# 可以看到与哪些IP通信最频繁

# 3. 生成IO图表分析流量模式

统计 → IO图表

# 添加图形:每秒钟数据包数、字节数等
3. 解密HTTPS流量(需配置)
# 前提:拥有服务器的私钥或配置了SSLKEYLOGFILE

编辑 → 首选项 → 协议 → TLS

# 在(Pre)-Master-Secret log filename中指定日志文件
第五步:实战场景演练

1:网站访问慢的诊断

# 1. 过滤出问题的网站流量

ip.addr == 110.242.68.4

# 2. 检查时间差

# 添加时间列:右键列头 → 列偏好设置 → 添加新列

# 类型:Delta time,显示为秒

# 3. 查找瓶颈

tcp.analysis # 查看专家信息

统计 → 对话 → 查看哪些连接耗时最长
2:检测异常连接
# 1. 查找可疑端口

tcp.port >= 10000 and tcp.port <= 65535

# 查看高位端口的异常连接

# 2. 查找大量SYN包(端口扫描特征)

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

统计 → 对话 → 排序查看SYN数量

# 3. 查找DNS隧道特征

dns.qry.name.len > 50 # 超长域名

dns.qry.type == 0x10 # TXT记录滥用
3:分析API调用
# 1. 过滤特定API路径

http.request.uri contains "/api/"

# 2. 查看JSON响应

右键 → 追踪流 → HTTP流

# 可以查看完整的JSON请求/响应

# 3. 分析API性能

http.time # 响应时间过滤
第六步:报告生成与保存
# 保存过滤后的数据

文件 → 导出特定分组...

# 可以只保存过滤后的包

# 保存统计信息

统计 → 各种统计 → 复制为CSV/保存
2. 标记重要发现
# 给重要数据包添加注释

右键包 → 添加分组注释

# 包列表会显示笔记图标

# 使用书签

右键包 → 标记/取消标记分组
3. 生成报告
文件 → 导出分组解析结果 → 为纯文本

# 包含所有解析信息

# 或使用tshark命令行生成报告

tshark -r capture.pcap -Y "http" -V > http_analysis.txt

掌握 Wireshark 的精髓可归结为三点:深刻理解网络协议的语言,熟练运用过滤器锁定关键信息,并在真实的抓包实践中反复磨练。

【点这里】wireshark抓包实战视频

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐