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、蓝牙等非网络接口
小知识:Wireshark 的图标是一只鲨鱼鳍,寓意「嗅探」网络流量。你想想看,鲨鱼在水里游,靠嗅觉找猎物;Wireshark 在网络里游,靠抓包找问题。挺形象的吧?

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 欺骗。我曾经在客户现场折腾了俩小时,才发现交换机没配镜像端口……嗯,从那以后我每次抓包前都先确认网络拓扑。

Wireshark 抓包原理流程图 网卡(混杂模式) libpcap / Npcap Wireshark 内核 捕获过滤器 协议解析器 显示过滤器 用户界面展示 数据从网卡 → 底层库 → 内核 → 过滤器 → 解析器 → 展示给用户

1.4 安装:Windows / macOS / Linux

安装很简单,但有几个细节要注意。

Windows

  1. 去官网 wireshark.org 下载安装包
  2. 安装时记得勾选 Npcap(抓包驱动)
  3. 安装完成后重启,让驱动生效
避坑:我曾经遇到过安装后抓不到包,折腾半天发现是 Npcap 没装。Wireshark 安装包默认会带 Npcap,但如果你之前装过旧版,可能会冲突。建议先卸载旧版 Npcap,再重新安装。

macOS

  1. 用 Homebrew:brew install --cask wireshark
  2. 或者去官网下载 .dmg 安装包
  3. 需要安装 ChmodBPF 或 LaunchDaemon,否则普通用户没权限抓包

Linux

# Ubuntu / Debian
sudo apt update
sudo apt install wireshark

# 安装时选择「允许非 root 用户抓包」
# 然后把自己加入 wireshark 组
sudo usermod -aG wireshark $USER

# 重新登录后生效
我的习惯:Linux 下我一般用 tshark(命令行版 Wireshark)做自动化抓包,然后用 Wireshark GUI 分析。比如写个脚本每天凌晨抓 10 分钟流量,存成 pcap 文件,白天慢慢看。

1.5 界面初识:别被吓到

第一次打开 Wireshark,你会看到三个主要区域。别慌,咱们一个一个说。

主界面布局

  • 顶部菜单栏:文件、编辑、视图、捕获、分析、统计……常用的就几个:捕获 → 选项、分析 → 显示过滤表达式、统计 → 协议分级。
  • 工具栏:开始/停止抓包、保存、打开、过滤框。我习惯把「自动滚动」关掉,不然抓包时界面一直跳,眼晕。
  • 包列表区:显示每个包的编号、时间、源/目标地址、协议、长度、信息摘要。默认按时间排序。
  • 包详情区:选中一个包,这里会以树形结构展示协议字段。比如 TCP 包,会展开源端口、目标端口、序列号、标志位等。
  • 包字节区:原始十六进制和 ASCII 显示。一般用不到,但排查协议解析问题时很有用。

颜色规则

Wireshark 默认用颜色区分协议。比如:

  • 浅紫色 = TCP 流量
  • 浅蓝色 = UDP 流量
  • 浅绿色 = HTTP 流量
  • 红色 = 错误包(比如 TCP 重传)

你可以自定义颜色规则。我个人习惯把 DNS 标成亮蓝色,ARP 标成灰色,一眼就能看出网络里在发生什么。

第一个抓包实验

  1. 打开 Wireshark,选择你的网卡(比如 Wi-Fi 或以太网)
  2. 点击「开始捕获」按钮(鲨鱼鳍图标)
  3. 打开浏览器,访问一个网站(比如 baidu.com)
  4. 等几秒钟,点击「停止捕获」
  5. 在过滤框输入 http,按回车

你会看到只显示 HTTP 协议的包。选中一个 GET 请求,在详情区展开「Hypertext Transfer Protocol」,就能看到请求行、头部、状态码等信息。

记住:抓包不是目的,分析才是。别被满屏的包吓到,用过滤器和统计功能,把注意力集中在你想看的那部分流量上。