找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 190|回复: 0

Wireshark 网络抓包与协议分析实战教程

[复制链接]

16

主题

2

回帖

267

积分

超级版主

积分
267
发表于 2026-6-29 20:12:17 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 Soda 于 2026-6-29 20:20 编辑


一、Wireshark 简介

Wireshark 是目前最流行的网络协议分析工具,能够深入解析各种网络协议,帮助网络工程师、安全人员排查网络问题、分析网络流量。

主要功能:
  • 实时捕获网络数据包
  • 支持上千种协议解析
  • 强大的过滤和搜索功能
  • 支持多种格式的数据包文件
  • 丰富的统计分析功能





二、安装与基本配置

2.1 下载安装

官网下载地址:https://www.wireshark.org/

Windows:直接下载安装包,注意安装 WinPcap 或 Npcap

Linux:
  1. # Ubuntu/Debian
  2. sudo apt install wireshark

  3. # CentOS/RHEL
  4. sudo yum install wireshark
复制代码


macOS:
  1. brew install --cask wireshark
复制代码


2.2 首次配置

Linux 下需要配置权限:
  1. sudo dpkg-reconfigure wireshark-common
  2. sudo usermod -aG wireshark $USER
复制代码





三、界面介绍

Wireshark 主界面分为几个主要区域:

  • 菜单栏:文件、编辑、视图、捕获、分析等
  • 工具栏:常用操作快捷按钮
  • 过滤栏:显示过滤器输入框
  • 数据包列表:显示捕获的所有数据包
  • 数据包详情:选中数据包的详细协议层
  • 数据包字节:原始十六进制数据





四、抓包过滤器(Capture Filters)

抓包过滤器在开始抓包前设置,只捕获符合条件的数据包,减少性能开销。

4.1 基本语法

  1. # 只捕获特定主机的流量
  2. host 192.168.1.100

  3. # 只捕获源或目标主机
  4. src host 192.168.1.100
  5. dst host 192.168.1.100

  6. # 只捕获特定端口
  7. port 80
  8. port 443

  9. # 只捕获特定协议
  10. tcp
  11. udp
  12. icmp
  13. arp
复制代码


4.2 组合条件

  1. # 逻辑与(&& 或 and)
  2. host 192.168.1.100 and port 80

  3. # 逻辑或(|| 或 or)
  4. port 80 or port 443

  5. # 逻辑非(! 或 not)
  6. not port 22

  7. # 复杂组合
  8. (src host 10.0.0.1 and dst port 80) or icmp
复制代码


4.3 常用抓包过滤示例

  1. # 只捕获 HTTP 流量
  2. port 80

  3. # 捕获特定子网的流量
  4. net 192.168.1.0/24

  5. # 捕获 DNS 流量
  6. port 53

  7. # 排除广播和组播
  8. not broadcast and not multicast

  9. # 只捕获 TCP SYN 包
  10. tcp[tcpflags] & tcp-syn != 0
复制代码





五、显示过滤器(Display Filters)

显示过滤器在抓包后使用,从已捕获的数据包中筛选显示。

5.1 基本语法

  1. # IP 地址过滤
  2. ip.addr == 192.168.1.100
  3. ip.src == 192.168.1.100
  4. ip.dst == 192.168.1.100

  5. # 端口过滤
  6. tcp.port == 80
  7. tcp.srcport == 80
  8. tcp.dstport == 443

  9. # 协议过滤
  10. http
  11. dns
  12. icmp
  13. tcp
  14. udp
复制代码


5.2 组合条件

  1. # 逻辑与
  2. ip.addr == 192.168.1.100 && tcp.port == 80

  3. # 逻辑或
  4. http || dns

  5. # 逻辑非
  6. !arp

  7. # 包含关系
  8. http.request.uri contains "login"
复制代码


5.3 常用显示过滤示例

  1. # HTTP 请求
  2. http.request

  3. # HTTP 响应
  4. http.response

  5. # HTTP 状态码
  6. http.response.code == 200
  7. http.response.code == 404

  8. # TCP 标志位
  9. tcp.flags.syn == 1
  10. tcp.flags.reset == 1
  11. tcp.flags.fin == 1

  12. # DNS 查询
  13. dns.qry.name == "www.example.com"
  14. dns.flags.response == 0  # 查询
  15. dns.flags.response == 1  # 响应

  16. # ICMP
  17. icmp.type == 8  # Echo Request (ping)
  18. icmp.type == 0  # Echo Reply

  19. # 特定字符串
  20. tcp contains "password"
  21. http contains "User-Agent"
复制代码





六、常用协议分析

6.1 HTTP 协议分析

查看 HTTP 请求方法:
  1. http.request.method == "GET"
  2. http.request.method == "POST"
复制代码


查看 HTTP 头部:
  1. http.host == "www.example.com"
  2. http.user_agent contains "Chrome"
  3. http.cookie contains "session"
复制代码


追踪 HTTP 流:
右键数据包 → Follow → HTTP Stream,可以查看完整的 HTTP 请求和响应内容。

6.2 TCP 协议分析

TCP 三次握手:
  • SYN:客户端 → 服务端
  • SYN, ACK:服务端 → 客户端
  • ACK:客户端 → 服务端


过滤 SYN 包:
  1. tcp.flags.syn == 1 && tcp.flags.ack == 0
复制代码


TCP 四次挥手:
  • FIN, ACK:主动关闭方
  • ACK:被动关闭方
  • FIN, ACK:被动关闭方
  • ACK:主动关闭方


查看 TCP 重传:
  1. tcp.analysis.retransmission
  2. tcp.analysis.duplicate_ack
复制代码


6.3 DNS 协议分析

DNS 查询类型:
  1. dns.qry.type == 1   # A 记录
  2. dns.qry.type == 5   # CNAME
  3. dns.qry.type == 28  # AAAA (IPv6)
复制代码


查看 DNS 响应时间:
Wireshark 会自动计算 DNS 查询的响应时间,在数据包详情中可以看到。

6.4 ICMP 协议分析

  1. # Ping 请求
  2. icmp.type == 8

  3. # Ping 响应
  4. icmp.type == 0

  5. # 目标不可达
  6. icmp.type == 3

  7. # 超时
  8. icmp.type == 11
复制代码





七、实战案例

7.1 案例一:排查网站访问慢

步骤:
  • 开始抓包,访问目标网站
  • 使用 http 过滤器查看 HTTP 流量
  • 查看 TCP 三次握手时间
  • 查看 HTTP 请求响应时间
  • 检查是否有重传、丢包


关键指标:
  • TCP 连接建立时间(RTT)
  • HTTP 首字节时间(TTFB)
  • 重传率
  • 窗口大小变化


7.2 案例二:分析 DNS 解析问题

步骤:
  • 捕获 DNS 流量(port 53)
  • 查看 DNS 查询是否发出
  • 查看是否收到 DNS 响应
  • 检查响应时间
  • 检查返回的 IP 地址是否正确


常见问题:
  • DNS 查询超时
  • DNS 响应慢
  • 返回错误的 IP


7.3 案例三:排查 TCP 连接失败

步骤:
  • 捕获目标端口的 TCP 流量
  • 查看是否有 SYN 包发出
  • 查看是否收到 SYN-ACK
  • 如果只有 SYN 没有响应,可能是防火墙或端口未开放
  • 如果收到 RST,说明端口未开放或被拒绝





八、高级技巧

8.1 颜色规则

Wireshark 默认对不同协议和状态的数据包使用不同颜色:
  • 绿色:TCP SYN, SYN-ACK
  • 浅蓝:UDP
  • 深蓝:DNS
  • 黑色:有错误的包(如校验和错误)


可以自定义颜色规则:View → Coloring Rules

8.2 统计功能

查看协议分层统计:
Statistics → Protocol Hierarchy

查看会话统计:
Statistics → Conversations

查看端点统计:
Statistics → Endpoints

查看 IO 图表:
Statistics → IO Graphs(流量趋势图)

8.3 导出数据

导出特定数据包:
File → Export Specified Packets

导出为 CSV:
File → Export Packet Dissections → As CSV

导出 HTTP 对象:
File → Export Objects → HTTP

8.4 常用快捷键

  1. Ctrl + E        开始/停止抓包
  2. Ctrl + N        新建捕获
  3. Ctrl + O        打开文件
  4. Ctrl + S        保存文件
  5. Ctrl + F        查找数据包
  6. Ctrl + /        聚焦到过滤栏
  7. Alt + ←/→      上一个/下一个匹配的包
  8. Space           展开/折叠数据包详情
  9. Enter           打开数据包详情
复制代码





九、常见问题

9.1 无法抓包
  • 检查是否有管理员/root 权限
  • 检查网卡选择是否正确
  • 检查 WinPcap/Npcap 是否安装


9.2 抓到的包都是乱码
  • HTTPS 流量默认是加密的,需要配置 SSL 解密
  • 可以导入 SSL key 或使用 SSLKEYLOGFILE


9.3 抓包文件太大
  • 使用抓包过滤器减少捕获量
  • 使用 ring buffer 自动分割文件
  • 定期停止并保存


9.4 如何在 Linux 命令行抓包

使用 tcpdump:
  1. # 基本抓包
  2. tcpdump -i eth0 -w capture.pcap

  3. # 带过滤条件
  4. tcpdump -i eth0 port 80 -w http.pcap

  5. # 读取抓包文件
  6. tcpdump -r capture.pcap
复制代码





十、学习建议

  • 多动手实践:理论结合实际,多抓包多分析
  • 学习协议原理:理解 TCP/IP 协议栈是基础
  • 积累常见问题:建立自己的问题排查手册
  • 关注安全分析:Wireshark 也是安全分析的重要工具
  • 学习高级功能:如 Lua 脚本、自定义解析器等





总结: Wireshark 是网络工程师必备的工具,掌握它能大大提升网络问题排查效率。建议从基础过滤开始,逐步深入学习协议分析和高级功能。遇到问题时,先抓包再分析,很多网络问题都能一目了然。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|资源侠论坛

GMT+8, 2026-9-12 20:14 , Processed in 0.021816 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表