1. Wireshark 入门:发展史、核心功能、抓包原理、安装与界面初识
各位好,我是老张。干网络这行十几年了,Wireshark 是我电脑上永远不关的那个窗口。今天咱们聊聊这个工具——它怎么来的,能干什么,背后什么原理,以及怎么装怎么用。
说实话,我见过太多人一上来就点「开始抓包」,然后被满屏的包吓懵。别急,咱们一步步来。
1.1 Wireshark 发展史:从 Ethereal 说起
Wireshark 的前身叫 Ethereal,1998 年由 Gerald Combs 开发。那时候网络排障基本靠猜,或者靠 tcpdump 加一堆参数。Ethereal 一出来,大家终于能「看见」网络包了。
2006 年,Combs 换了工作,因为商标问题,项目改名为 Wireshark。嗯,这名字一直用到现在。
我入行时用的还是 Ethereal 0.8.x,那时候界面简陋得很,但已经能解决大问题了。有一次客户说「网速慢」,我打开 Ethereal 一看,发现有人在跑 BT 下载,直接定位到端口,半小时搞定。要是没这工具,估计得折腾一整天。
| 时间 | 事件 |
|---|---|
| 1998 | Gerald Combs 发布 Ethereal 0.2.0 |
| 2006 | 因商标问题,项目更名为 Wireshark |
| 2008 | Wireshark 1.0 发布,支持更多协议 |
| 2015 | Wireshark 2.0 改版界面,引入暗色主题 |
| 2023 | Wireshark 4.x,支持 USB、蓝牙等非网络接口 |
1.2 核心功能:它能干什么?
说白了,Wireshark 就做三件事:抓包、分析包、展示包。但每件事都能玩出花来。
- 抓包:从网卡上把原始数据包复制一份给你看。支持有线、无线、USB、蓝牙……只要系统认的接口,它基本都能抓。
- 分析包:自动解析 3000 多种协议。从 HTTP、TCP 到 Modbus、MQTT,它都认识。你不需要手动去拆二进制。
- 展示包:用树形结构把协议字段展开,一目了然。还能用颜色标记不同协议——我习惯把 HTTP 标成绿色,DNS 标成蓝色,一眼扫过去就知道流量构成。
我个人最常用的功能是「Follow Stream」。比如看一个 HTTP 请求,点右键选「Follow TCP Stream」,就能看到完整的请求和响应,不用在几百个包里翻来翻去。
- 实时抓包与离线分析
- 多协议深度解析(3000+)
- 强大的过滤引擎(显示过滤 + 捕获过滤)
- 统计与图表(IO Graph、Flow Graph、Conversations)
- 导出对象(HTTP 文件、SMB 文件等)
1.3 抓包原理:它怎么做到的?
Wireshark 抓包依赖底层库 libpcap(Windows 上是 WinPcap / Npcap)。这个库把网卡设置成「混杂模式」,然后复制经过网卡的所有数据包。
为什么会这样?正常模式下,网卡只收目标 MAC 是自己的包。混杂模式不管这些,来一个收一个。Wireshark 就是靠这个「偷看」所有流量的。
但有个坑——交换机环境。交换机只把包发给目标端口,你抓不到别人的流量。除非你用端口镜像(SPAN)、TAP 设备,或者 ARP 欺骗。我曾经在客户现场折腾了俩小时,才发现交换机没配镜像端口……嗯,从那以后我每次抓包前都先确认网络拓扑。
1.4 安装:Windows / macOS / Linux
安装很简单,但有几个细节要注意。
Windows
- 去官网 wireshark.org 下载安装包
- 安装时记得勾选 Npcap(抓包驱动)
- 安装完成后重启,让驱动生效
macOS
- 用 Homebrew:
brew install --cask wireshark - 或者去官网下载 .dmg 安装包
- 需要安装 ChmodBPF 或 LaunchDaemon,否则普通用户没权限抓包
Linux
# Ubuntu / Debian
sudo apt update
sudo apt install wireshark
# 安装时选择「允许非 root 用户抓包」
# 然后把自己加入 wireshark 组
sudo usermod -aG wireshark $USER
# 重新登录后生效
1.5 界面初识:别被吓到
第一次打开 Wireshark,你会看到三个主要区域。别慌,咱们一个一个说。
主界面布局
- 顶部菜单栏:文件、编辑、视图、捕获、分析、统计……常用的就几个:捕获 → 选项、分析 → 显示过滤表达式、统计 → 协议分级。
- 工具栏:开始/停止抓包、保存、打开、过滤框。我习惯把「自动滚动」关掉,不然抓包时界面一直跳,眼晕。
- 包列表区:显示每个包的编号、时间、源/目标地址、协议、长度、信息摘要。默认按时间排序。
- 包详情区:选中一个包,这里会以树形结构展示协议字段。比如 TCP 包,会展开源端口、目标端口、序列号、标志位等。
- 包字节区:原始十六进制和 ASCII 显示。一般用不到,但排查协议解析问题时很有用。
颜色规则
Wireshark 默认用颜色区分协议。比如:
- 浅紫色 = TCP 流量
- 浅蓝色 = UDP 流量
- 浅绿色 = HTTP 流量
- 红色 = 错误包(比如 TCP 重传)
你可以自定义颜色规则。我个人习惯把 DNS 标成亮蓝色,ARP 标成灰色,一眼就能看出网络里在发生什么。
第一个抓包实验
- 打开 Wireshark,选择你的网卡(比如 Wi-Fi 或以太网)
- 点击「开始捕获」按钮(鲨鱼鳍图标)
- 打开浏览器,访问一个网站(比如 baidu.com)
- 等几秒钟,点击「停止捕获」
- 在过滤框输入
http,按回车
你会看到只显示 HTTP 协议的包。选中一个 GET 请求,在详情区展开「Hypertext Transfer Protocol」,就能看到请求行、头部、状态码等信息。