Wireshark:抓包看清线上到底传了什么
- 分类
- 网络诊断
- 平台
- Windows、macOS、Linux
- 许可证
- 免费开源(GPLv2)
- 是否开源
- 开源
- 收费模式
- 免费
- 适用工序
- 中控与协议、系统集成与交付、运维与商业
- 支持协议
- TCP、UDP、HTTP、Modbus TCP
它到底解决什么
展厅现场"控制没反应"这句话背后,其实压着三种完全不同的可能:中控压根没把指令发出去,指令发出去了但没到设备网口,或者到了设备网口但设备不理。这三种情况处置方式天差地别——第一种该查中控程序,第二种该查网络链路,第三种该查设备本身或协议对不对——但光靠现象猜,永远猜不准,只会变成中控集成商、设备厂家、网络布线方三方互相甩锅。
Wireshark 官方对自己的定位很直接:这是一款网络协议分析器,能把一台机器网口上进出的每一个数据包截下来,摊开给你看。它不猜、不推断,只是把线路上真实发生的事情原样记下来——发没发、到没到、回没回,这三件事一旦有了抓包记录,就不再是各说各话,而是摆在桌面上的事实。这也是它区别于大多数排障工具的地方:像 PingPlotter 测的是链路通不通、快不快,回答的是"路好不好走";Wireshark 看的是路上到底跑了什么、跑没跑到,回答的是"东西到底送没送到"。两者不是竞争关系,是同一类问题的两个不同切面。
展厅哪道工序会用到它
中控发指令设备没反应,三方在扯皮。 中控集成商说指令肯定发了,设备厂家说从没收到过这条指令,布线方说线是通的。挂上 Wireshark 在中控主机或设备这一侧抓一段,指令包发没发、发了几次、设备回没回应,报文里写得清清楚楚,不用听各方各执一词。
接手他人做的老项目,链路细节不明。 设备用的什么协议、什么端口、地址怎么编,前任集成商没留文档,人也联系不上。抓一段线上实际跑的数据,比翻半天说明书更快知道现在到底在传什么。
偶发响应超时或丢包,其它工具查不出原因。 有的设备十次里有一两次不响应,间歇性问题最难查。持续抓一段时间,把发生超时那一刻的报文调出来看,往往能看出是重传次数异常、还是响应压根没发出来。
验收阶段需要一份拿得出手的记录。 客户或监理要求提供"链路确实联通、指令确实送达"的证据,一份带时间戳的抓包记录比一句"我们测过没问题"有说服力得多。
怎么获取,该下哪个包
只认官网这一个渠道。抓包软件需要装一个能直接读取网卡底层数据的驱动,运行时权限也比普通软件高,来路不明的安装包风险不成比例。
官方按平台分发,Windows、macOS、Linux(含直接发行版仓库和源码)都有对应的安装方式,具体版本号页面上会实时更新,不在这里罗列,以下载页当时展示的为准。
有一件事值得单独说清楚:Windows 版安装包会连带装上一个底层抓包驱动(负责让系统把网卡收到的原始数据交给上层软件读取),这是抓包这件事能成立的前提,不装它软件打开后网卡列表是空的,什么都抓不到。因此走官方安装包一路装完,不要图省事只复制一个可执行文件过去用——那样底层驱动没跟着装,装了也是摆设。macOS 和 Linux 上通常依赖系统自带或另外安装的等效抓包库,具体以官网安装说明为准。
最短可用路径
- 从官网下载页选对应系统的安装包,装上,一路默认选项即可(Windows 上默认会连带装好底层抓包驱动,别跳过)。
- 打开软件,会看到一个"欢迎页",列出这台机器上可用的网络接口,每个接口旁边有一条随流量跳动的小图,能大致看出这个口现在有没有数据在跑。
- 选对接口是这一步最容易出错的地方,选错了后面全白搭,下一节详细说怎么选。
- 选中接口,点开始,报文开始一条一条往下滚。
- 用过滤框缩小范围(下一节讲怎么用),找到你关心的那几条指令包,看它发没发、有没有回应。
- 需要留证据的话,把当前的过滤结果导出保存成文件,或者直接截图。
第 3 步和第 5 步是全篇真正的重点,接下来展开讲。
展厅工程里真正要弄明白的那几件事
这一节不讲底层怎么实现的,讲的是现场和售前真正用得上的判断。
为什么插在交换机口上却什么都抓不到
这是现场最常见的困惑:软件装好了,网卡也选对了,点开始却一个包都没有,或者只看到自己这台机器发出去的东西,看不到旁边两台设备之间的通信。
原因跟以前的老式集线器和现在的交换机工作方式不一样有关。老式集线器收到一个包会原样转发给所有口,谁插在上面都能看到所有流量;现在展厅里用的交换机不是这样——它会记住每个口连的设备地址,之后只把发给这台设备的流量转发到对应的口上,其它流量根本不会经过你插的那个口。也就是说,就算把网卡设成"能收所有包"的模式(业内叫混杂模式),只要交换机压根没把别人的流量转发到你这个口上,网卡也无从收起。
想看到别人之间的流量,通常有三条路:
- 直接在目标设备自己的机器上装。 最简单,缺点是只能看这台机器自己收发的,看不到它跟第三方之间隔了几跳之外的情况——但展厅排查中控和某台设备的通信问题,这条往往就够用。
- 用交换机的"镜像口"。 稍微上点档次的交换机(业内也叫网管型交换机)都带这个功能,官方叫法不统一,常见的说法有端口镜像、SPAN。设置之后,交换机会把某个口的流量复制一份,同时发到你指定的另一个口上,插上 Wireshark 就能看到原本看不到的那部分流量。这条路需要有交换机的管理权限,现场经常卡在"这台交换机是甲方物业的,没人给权限"。
- 加一个网络分线器(业内叫 Tap)。 接在两台设备之间的链路中间,不改变原有连接,专门吐出一份镜像流量给抓包设备。适合那种谁都不想动交换机配置、又必须临时接进去看一眼的场合。
这是整篇最容易被现场人员跳过的一步:先想清楚"这根线插在哪儿能看到我想看的东西",再谈装什么软件、怎么过滤。 插错了地方,后面的一切操作都是在一个空文件上打转。
过滤怎么用:思路比语法重要
刚开始抓包最直观的冲击是报文太多,几秒钟就能滚出几千条,中控发的那一条指令淹没在里面根本找不到。这时候要用的就是过滤,官方文档把它分成两种,搞清楚这两种的分工比记住具体写法重要得多:
- 抓包过滤:在开始抓包之前设定,决定这次到底往文件里写哪些包,没匹配上的包压根不会被记下来。适合提前就知道只想看某个方向流量的场合。
- 显示过滤:抓完之后(或者正在抓的过程中)在软件上方那个输入框里填,作用只是把不想看的暂时藏起来,文件里的原始数据一条都没少,随时可以清空过滤重新看全部。展厅现场排障几乎全用这一种,因为通常是先抓一段再回头找问题。
不用去记一整套过滤语法,下面几条思路现场直接照抄,填进显示过滤框回车就生效:
- 只看某台设备的流量:把这台设备的 IP 地址填进过滤框,比如
ip.addr == 192.168.1.20,回车后只剩下这台设备发出和收到的包,其余全部先藏起来。 - 只看某种协议的流量:直接把协议的名字打进过滤框,比如输入
modbus就只留 Modbus TCP 的通信,输入http就只留网页类流量——协议本身的报文结构不在这里展开,Modbus 详细内容看 Modbus 协议详解。 - 只看某个端口的流量:比如 Modbus TCP 惯用 502 端口,填
tcp.port == 502就只留走这个端口的通信,适合协议名没匹配上、但知道端口号的场合。
过滤框输入的内容如果变红,多半是名字或写法有出入,先从最简单的一个协议名开始试,能通再往上叠条件,比一上来就想拼一条复杂过滤划算得多。
把一段对话拼回人话看:跟踪流
单条报文看着都是些字段和数值,不好直接判断"这一来一回到底在说什么"。软件提供一个叫"跟踪流"(官方叫 Follow Stream)的功能:在报文列表里选中任意一条属于这段通信的包,右键选跟踪,软件会把这一整段来回通信按发生顺序重新拼起来,显示成类似聊天记录的样子,一方发的内容和另一方回的内容用不同颜色区分。
这个功能对现场最大的用处是省去自己一条一条翻译报文的功夫——中控发的指令和设备的应答被完整拼在一起,谁先说的、说了什么、对方怎么回的,一眼就能看全流程,而不是在几十条零散报文里来回对照序号。
专家信息:一个用来找起点的红绿灯,不是结论
软件会自动扫描抓到的报文,把里面看着不太正常的地方(比如反复重传、连接被异常中断、格式不完整的包)挑出来,按严重程度分级标出来,级别从轻到重大致是:常规提示、值得注意、警告、严重错误。
官方对这个功能的定性说得很明确:它只是排查的起点,不是结论。 出现了标记不代表这里一定有问题,没出现标记也不代表这段通信完全正常——具体要不要当回事,得结合现场实际情况判断。现场用法是:先扫一眼有没有大片警告或错误级别的标记,如果时间点跟"设备没反应"发生的那一刻对得上,这就是一个值得深挖的起点;对不上,就说明问题大概率不在这个层面。
它只回答"传了什么",回答不了"为什么设备不认"
这条边界必须说清楚,不然容易对这个工具抱过高期待。Wireshark 能确定的是线路层面的三件事:指令包发没发出去、有没有到设备网口、设备有没有回应。这三件事一旦确定,责任范围立刻能划清一大半。 但如果指令确实发出去了、设备也确实收到了,可设备就是不执行——协议格式对不对、地址编号对不对、设备固件本身有没有 bug,这些内容层面的问题不归它管,它只是把原始字节如实摆出来。
能不能把这些字节直接读成有意义的内容,还取决于这条协议有没有对应的解析规则。像 Modbus TCP 这类被广泛支持的协议,软件能直接把报文翻译成寄存器地址、数值这些看得懂的字段;但展厅里大量设备走的是投影机、大屏这类厂家自定义的串口指令(协议本身讲解见 RS232/RS485 详解),如果这类指令是通过网络透传发出去的,Wireshark 通常只能显示成一段裸数据,具体每个字节代表什么,还是得对照设备厂家的协议文档自己翻译。分不清 TCP、UDP 这类基础概念的,可以先看 TCP/UDP 协议详解 打底。
也正因为如此,它跟站内 MThings 是两种互补的工具,不是二选一:MThings 是主动发指令去问一台设备,看它答不答、答的对不对;Wireshark 是被动看线上实际传了什么,不主动发任何东西。现场常见的顺序是先用 Wireshark 确认中控发的指令到底有没有真的送到设备网口——如果确认发了但设备没回应,再用 MThings 这类主动工具换一个"身份"重新问一遍,就能进一步判断问题是出在总线/设备侧,还是原来那套中控程序本身。
踩坑与排错清单
| 现象 | 原因 | 处置 |
|---|---|---|
| 网卡选对了,点开始却一个包都没有 | 插在普通交换机的空口上,交换机根本不会把别人的流量转发到这个口 | 直接在目标设备本机抓,或找交换机的镜像口,或加一个网络分线器 |
| 能看到自己这台机器发的包,看不到另外两台设备之间的通信 | 同上,交换机把不相关的流量隔离开了 | 同上,需要用镜像口或分线器才能看到第三方之间的流量 |
| 报文一直在滚,找不到中控发的那条指令 | 没用过滤,或者把抓包过滤和显示过滤这两个输入框弄混了 | 先按协议名或对方 IP 做一次显示过滤,缩小范围再找 |
| 过滤框输入内容后变红、没生效 | 协议名或字段名写法有出入 | 从一个最简单的协议名开始试,能通再往上加条件 |
| Windows 上打开软件,接口列表是空的 | 装的时候底层抓包驱动没跟着装上,或者没装成功 | 重新走官方安装包完整装一遍,不要只拷贝一个可执行文件 |
| 某段协议的内容全是"未知"或一串裸字节看不懂 | 这条协议没有对应的解析规则,软件不认识它的字段结构 | 对照设备厂家的协议文档手工翻译,别指望软件自动翻译出来 |
| 在目标机器上抓包,提示权限不足或直接抓不到东西 | 抓包需要比普通操作更高的系统权限 | 用管理员权限运行;确认这台机器允许安装抓包驱动 |
| 挂机抓了很久,文件巨大,软件卡死打不开 | 没设范围就长时间不间断抓包,文件铺得太大 | 抓包时提前用过滤缩小范围,或设置按大小/时间自动分卷 |
| 抓到报文显示"到了",设备却还是不执行 | 线路层面没问题,问题在协议内容或设备本身 | 这已经超出抓包能回答的范围,转去核对协议参数或设备状态 |
什么时候别用它
展项本身的程序问题,它帮不上忙。 播放器崩溃、内容加载失败、逻辑报错,这些都是应用层的事,网络包全部正常,只能说明网络没问题,不能证明程序没问题。这种情况该去查程序日志,不是死磕抓包文件。
现场没有镜像口、没有交换机权限、又赶工期的场合,别硬装。 前面讲过,插在普通交换机的空口上大概率什么都看不到,装了软件也是白装。这时候该先想办法拿到交换机管理权限,或者干脆换成直接在目标设备本机抓——不是工具不行,是没找对能看到数据的位置。
只想确认"网络通不通"图省事,别小题大做。 系统自带的 ping 已经能回答这个一次性问题,没必要为此装一个专门用来逐包分析的工具。
走的协议本身认不出来,别指望它帮你翻译内容。 抓包能证明"指令确实传过去了",证明不了"传的内容对不对、设备为什么不理"。协议内容层面的问题,还是要回到协议文档和设备本身。
甲方内网明令禁止装抓包/嗅探类软件的项目,别硬装。 政务、金融类展厅项目对这类工具往往卡得很严,需要先走安全审批,这是流程问题,不是技术问题,投标前先跟甲方确认清楚能不能用。
与本站的衔接
- 协议本身的报文结构和地址模型,见 Modbus 协议详解、RS232/RS485 详解、TCP/UDP 协议详解、PJLink 协议详解,本篇涉及的地方均已内链,不重复展开。
- 主动发指令去问设备、和被动看线上传了什么这两条路怎么配合,见 MThings 软件页。
- 只是想测链路通不通、丢不丢包,而不需要看具体传输内容,见 PingPlotter 软件页。
- 手边没有装软件的条件、只想快速核对一条 Modbus 数据,可以用站内的在线 Modbus 助手。
- 定位出问题在网络之外、需要远程接管处理,见远程运维专题。
把一次性排查变成持续可见
诊断工具回答的是「此刻通不通」。而网络会缓慢劣化——设备变更、流量增长、线路老化,这些不会有任何提示,只会让某天的故障看起来毫无征兆。
企服君的运维体系把连通性与设备状态纳入持续采集,让劣化趋势可见而不是等到出问题才查。集成商如果想让运维有据可依,见集成商年费方案。
出处
- Wireshark 官网首页(产品定位、开源与免费声明):https://www.wireshark.org/
- Wireshark 官网下载页(各平台安装方式、Windows 安装包捆绑说明):https://www.wireshark.org/download.html
- Wireshark 官网 About 页(功能列表、多平台支持范围):https://www.wireshark.org/about.html
- Wireshark 官方代码仓库 COPYING 许可证文件(GNU GPL v2 全文):https://gitlab.com/wireshark/wireshark/-/raw/master/COPYING
- 官方用户手册《Prerequisites》(抓包前提条件:权限、接口选择、抓包位置):https://www.wireshark.org/docs/wsug_html_chunked/ChCapPrerequisitesSection.html
- 官方用户手册《The "Capture" Section Of The Welcome Screen》(接口选择界面说明):https://www.wireshark.org/docs/wsug_html_chunked/ChCapInterfaceSection.html
- 官方用户手册《Filtering while capturing》(抓包过滤说明):https://www.wireshark.org/docs/wsug_html_chunked/ChCapCaptureFilterSection.html
- 官方用户手册《Filtering Packets While Viewing》(显示过滤说明、与抓包过滤的区别):https://www.wireshark.org/docs/wsug_html_chunked/ChWorkDisplayFilterSection.html
- 官方用户手册《Following Protocol Streams》(跟踪流功能说明):https://www.wireshark.org/docs/wsug_html_chunked/ChAdvFollowStreamSection.html
- 官方用户手册《Expert Information》(专家信息功能与官方定性"起点非结论"):https://www.wireshark.org/docs/wsug_html_chunked/ChAdvExpert.html
- 官方用户手册《Installing Wireshark under Windows》(Windows 安装包捆绑底层抓包驱动说明):https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallWinInstall.html
- Wireshark 官方 Wiki《CaptureSetup/Ethernet》(交换网络下为何抓不到其他设备流量、镜像口/网络分线器等应对方式):https://wiki.wireshark.org/CaptureSetup/Ethernet
- Wireshark 官方显示过滤参考(Modbus 协议解析支持存在性核实):https://www.wireshark.org/docs/dfref/m/modbus.html
本文所述软件功能、安装方式与官方术语均来自上述官方材料;文中涉及的展厅工序判断、抓包点位选择与故障定位方法属于工程经验总结,具体项目请以现场实际情况和官网最新信息为准。
本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。
- wireshark.org · 首页 ↗
- wireshark.org · download ↗
- wireshark.org · about ↗
- gitlab.com · COPYING ↗
- wireshark.org · ChCapPrerequisitesSect… ↗
- wireshark.org · ChCapInterfaceSection ↗
- wireshark.org · ChCapCaptureFilterSect… ↗
- wireshark.org · ChWorkDisplayFilterSec… ↗
- wireshark.org · ChAdvFollowStreamSecti… ↗
- wireshark.org · ChAdvExpert ↗
- wireshark.org · ChBuildInstallWinInsta… ↗
- wiki.wireshark.org · Ethernet ↗
- wireshark.org · modbus ↗
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。