ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Wireshark 抓包分析实战:安装、过滤器与网络排障定位

Wireshark 抓包分析实战:安装、过滤器与网络排障定位 做网络排障这十几年Wireshark 这个网络数据报分析工具是我装机之后第一批必装的软件之一。第一次真正靠它解决问题是处理一个后台接口偶发超时的故障服务端日志干干净净监控大盘上 CPU、内存、连接数全都正常可前端就是隔一阵子卡一次重试一下又好了。当时同事丢过来一个 pcap 文件说你先看看报文我泡了整整一个下午从 TCP 重传一路追到窗口收缩最后定位到中间某一跳设备的 MTU 协商有问题导致大包被丢弃、小包正常。那次之后抓包分析从我的最后手段变成了第一反应。这篇文章不打算写成软件说明书。市面上讲 Wireshark 的教程已经很多但大部分停留在点击哪个按钮、输入哪个过滤器的层面看完还是不知道遇到真实问题该怎么下手。我想聊的是这个工具在网络链路里到底站在什么位置它的抓包能力从哪里来安装环节有哪些看起来无关紧要、实际会直接把新手劝退的坑长时间抓包为什么不能傻开着图形界面以及拿到一份几百兆的报文之后怎么在十分钟内把它压缩成两三句能汇报的结论。不管你是刚接触抓包的学生、做后端和运维的工程师还是需要排查音视频、工业总线这类偏门协议的老手下面这些内容应该都能直接抄去用。1. 先搞清楚它在链路里的位置再谈怎么用很多人学 Wireshark 的顺序是反的先背过滤器语法再学菜单最后才模模糊糊地知道自己在抓什么。我建议先把它的工作原理捋清楚后面所有的操作都会变得顺理成章。这一层想明白了遇到抓不到包、解不出协议、分析结果反常的情况排查方向自然就有了。1.1 从网卡到解码器一包数据是怎么被看见的Wireshark 本质上是三层结构叠在一起。最底下是抓包驱动Windows 上叫 NpcapLinux 和 macOS 上是 libpcap 或者 BPF 接口这一层负责把网卡收到的原始帧原封不动地复制一份出来。中间是解码引擎也就是常说的 dissectorWireshark 内置了三千多种协议解析器从最底层的以太网帧头开始一层一层往上拆以太网帧头告诉你是 IPv4 还是 IPv6IP 头告诉你是 TCP 还是 UDPTCP 头再告诉你是 80 端口还是 443 端口最后交给 HTTP 或者 TLS 解析器处理。最上面才是你看到的界面、过滤器、统计图表。这里有个关键点需要说清楚Wireshark 是被动监听它不发送任何探测包不改变网络状态只是把流经网卡的数据复制一份。所以你抓不到的东西往往不是软件的问题而是那些包根本没到达你的网卡。举个最常见的例子你用交换机组建的网络里A 和 B 两台机器直接通信你在 C 机器上抓包默认情况下一个包都抓不到因为交换机只会把帧转发给目的端口。想看到别人的流量前提是流量真的经过你比如镜像端口、集线器、或者你就在网关位置上。另一个容易混淆的概念是混杂模式。网卡的默认行为是只接收目的 MAC 地址是自己的帧其他帧直接扔掉。打开混杂模式之后网卡会把总线上能看到的帧全部交给上层。在无线网络里这个模式还有额外限制即使开了混杂模式也只有开启了加密、你知道密码、并且做了相应协商之后才能看到别人的帧这一点跟有线网络完全不同也是很多人抓不到无线包的根本原因。提示抓包前一定要确认你的位置能不能看到目标流量。位置不对过滤器写得再漂亮也是白费。我见过太多人卡在这一步以为是软件故障。1.2 什么时候该用它什么时候该换工具Wireshark 强在协议覆盖广、图形界面直观、解码深度足够但它不是万能的。抓包这件事有几类工具各自有明确的适用边界选错了会浪费大量时间。工具优势短板适合的场景Wireshark协议解析最全图形化分析统计面板丰富吃内存超长时间抓包容易崩不适合远程无人值守交互式排查、协议学习、疑难杂症定位tshark同一套解码引擎命令行可脚本化需要记参数可视化弱服务器上抓包、批量处理 pcap、自动化流水线dumpcap极轻量专管落盘没有分析能力长时间持续抓包先存后析浏览器开发者工具应用层请求响应一目了然看不到 TCP 层看不到重传和乱序前端接口调试、页面性能分析专用硬件嗅探器不掉包时间戳精准价格高端口数量有限万兆以上链路、射频信号分析我自己的习惯是单人排查用 Wireshark服务器上丢一个 dumpcap 常驻跑着出问题再去捞文件需要把抓包结果做成自动化报告的时候用 tshark 配上 shell 或者 Python 脚本。这三件套基本覆盖了九成以上的场景。顺便说一句浏览器开发者工具和 Wireshark 不是替代关系而是互补的——前者告诉你这个请求慢后者告诉你为什么慢。2. 安装与环境准备新手最容易在这里翻车安装本身没什么技术含量但 Wireshark 的安装包会顺手装一个驱动这个驱动是整个工具链里唯一会深入到系统内核的部分也是绝大多数装完打不开抓包没反应问题的源头。把这节看完能省掉你至少两个晚上的折腾。2.1 版本怎么选老系统该怎么办下载渠道只有一个就是 Wireshark 官网的下载页面不要从任何第三方软件站去拿安装包那些地方打包过的东西没人敢保证里面加了什么。官网会同时提供稳定版和开发版日常使用一律选稳定版开发版是给追新协议和帮忙报 bug 的人用的功能上会激进一些稳定性没保障。版本号的选择取决于你的操作系统。4.x 系列是当前的主力版本界面基于 Qt 6过滤器引擎经过了重写速度和体验都有明显提升但它对系统版本有要求Windows 上基本需要 Win10 及以上。如果你还在用 Windows 7 或者更老的系统最后能跑的是 3.6 系列这个系列早就停止维护了只能用不要指望有新协议支持。至于网上还在被反复搜索的 2.6.6那是 2018 年前后的版本现在还有人找它多半是因为看的老教程或者要配合某个老设备。除非有硬性兼容要求否则不建议用这么老的版本安全修复和新协议解析全都没有。macOS 上的安装相对省心官网的 dmg 拖进应用程序目录就能用。第一次运行时系统会问你要不要授予抓包权限这个必须同意否则只能抓到自己的回环流量。Linux 上大部分发行版的仓库里就有装完之后默认普通用户是没有抓包权限的把当前用户加进 wireshark 用户组就能解决比每次都 sudo 要干净得多也不用担心 sudo 环境下图形界面起不来的问题。2.2 Npcap 驱动的几个选项勾错了会很难受Windows 安装过程中会弹出一个 Npcap 的安装向导这一步是整个安装流程里最需要动脑子的地方。Npcap 是抓包能力的来源它替换掉了老的 WinPcap只装 Wireshark 不装 Npcap软件能打开但一个包都抓不到。向导里有几个勾选项我的建议是这样Install Npcap in WinPcap API-compatible Mode如果你还要用一些依赖老 WinPcap 接口的工具比如某些老版本的扫描器、仿真软件这个必须勾上。只装 Wireshark 一个的话可以不勾但勾上一般也没什么副作用。Support raw 802.11 traffic只有你确实要抓无线帧、并且网卡和驱动支持监听模式的时候才勾。普通排查网络问题不需要勾了也不会让你的笔记本变身专业嗅探设备。Restrict Npcap drivers access to Administrators only这个选项看环境。个人电脑建议勾上能减少其他程序随意调用抓包接口的风险。但如果你的账号不是管理员勾了之后 Wireshark 就用不了了得配合以管理员身份运行来使用。Install USBPcap这个组件是用来抓 USB 总线流量的比如某些外设通信、蓝牙 HCI 数据。不需要的话可以不装需要的时候单独补装也可以。注意如果你之前装过老版本的 WinPcap 或者早期 Npcap升级前先去控制面板把它们卸载干净重启之后再装新版。两个驱动版本混在一起是导致抓不到包、蓝屏这类严重问题的常见原因。说到驱动有个现象值得单独提一句。个别机器在某些网络接入方式下会出现系统层面的异常追根溯源是驱动层和系统网络栈的交互问题。遇到这种极端情况第一件事是把 Npcap 升级到官网最新版本驱动层的修复通常都在新版本里第二是暂时卸掉 Npcap用系统自带的替代方案应急。这种问题比例很低但一旦碰上确实很头疼知道往哪个方向查就行。2.3 装完打不开、界面卡住、一抓就假死怎么办这几个症状我全都遇到过原因基本集中在三类。第一类是配置文件损坏。Wireshark 会把你所有的列设置、过滤器、配色规则存在用户目录下的一个配置文件夹里。如果软件升级过程中断、或者硬盘出过问题这个文件夹可能处于半损坏状态表现就是启动到一半卡死或者直接闪退。解决办法很粗暴把配置文件夹整个删掉或者改名备份重启软件它会重新生成一份干净的默认配置。Windows 上的位置在用户目录的 AppData 里macOS 和 Linux 在 home 目录下的隐藏文件夹中具体路径在软件的关于对话框里能看到。第二类是名称解析拖慢速度。Wireshark 默认会尝试把 IP 地址反查成域名、把 MAC 地址查成厂商名。这个功能在抓包量大的时候会疯狂发起 DNS 查询界面就卡住了。我的做法是默认全部关掉名称解析只在自己明确需要的时候打开某一项排查问题的过程中基本不需要域名显示。第三类是实时刷新吃满资源。抓包界面默认是边抓边刷新每秒都在重绘列表包一多就假死。长时间抓包的时候把实时更新数据包列表和自动滚动这两个开关关掉界面立刻轻松很多。再狠一点直接用 dumpcap 落盘根本不开图形界面。另外还有个小众但真实的原因某些显卡驱动和界面框架的硬件加速不兼容导致窗口渲染异常、按钮点不动。这种情况可以在启动参数里关掉硬件加速试试。如果装完之后网卡列表里只有一个回环或者干脆是空的先确认服务有没有正常启动再确认权限够不够这两步能解决大部分看不到网卡的问题。3. 抓包实操从零拿到第一份可用数据环境搞好之后抓包本身其实很快难的是抓得对、抓得少、抓得久。这三个词分别对应捕获过滤器、显示过滤器和环形缓冲区也是这一节的重点。3.1 抓包前的三件准备工作很多人一打开软件就点那个蓝色的鲨鱼鳍图标然后开始刷网页、复现问题抓了半天下来的文件里什么都有几百兆的东西无从下手。我的习惯是先做三件事。第一明确目标流量长什么样。是访问某个固定 IP 的服务还是某个域名的接口还是本机某个端口的通信如果连目标都说不清楚说明问题还没定位到网络层先别抓包。第二确认从哪块网卡出去。笔记本上有线、无线、虚拟网卡、容器网卡一大串选错了就是白抓。一个实用技巧是先看路由确定目标地址走的是哪块网卡再在 Wireshark 里选它。第三先设捕获过滤器。捕获过滤器是在驱动层生效的不满足条件的包根本不会被复制上来对系统资源的占用几乎为零这是唯一能真正减小文件体积的手段。提示显示过滤器不会减小内存占用它只是在显示层面过滤所有包都已经在内存里了。文件大了之后再写显示过滤器该卡还是卡。3.2 捕获过滤器在源头就把噪音掐掉捕获过滤器用的是 BPF 语法功能有限但胜在高效。它的表达能力只到传输层你没法用它过滤 HTTP 的请求方法或者 TLS 的握手类型那属于显示过滤器的活儿。常用的写法我整理成了一张表直接照着改就行目标写法说明只看某个 IPhost 10.0.0.5双向都抓只看某个方向src host 10.0.0.5只抓源地址是它的包指定端口tcp port 8080TCP 优先写port则包含 UDP排除某类流量not arp and not icmp排除噪音协议只看某个网段net 192.168.1.0/24子网写法多条件组合host 10.0.0.5 and tcp port 443用 and / or / not 组合排除广播多播not broadcast and not multicast局域网抓包必加能砍掉一大半噪音指定 MACether host 00:11:22:33:44:55排查二层问题时用这里有个坑要提醒port 443和tcp port 443看起来差不多但前者会把 UDP 443 也包含进来在某些环境里会混进无关流量。条件写得越精确后面分析越省事。另一个坑是别在捕获过滤器里用显示过滤器的语法比如写http.host xxx软件会直接报语法错误因为它根本不知道 http 是什么在驱动层看那只是一串字节。3.3 长时间抓包环形缓冲区是唯一正解抓一晚上明天再看这个需求非常常见但直接用图形界面挂着抓第二天早上大概率看到的是一个无响应窗口和一份几个 G 的文件。原因前面说过图形界面会把包读进内存并持续渲染包数量上去之后内存和 CPU 都扛不住。正确的做法是让软件只负责落盘用环形缓冲区控制文件总量。设置的位置在抓包选项的输出标签页里核心是两个参数单个文件多大、总共保留几个。单个文件大小我一般设 100MB 到 200MB。太大了打开慢太小了切换频繁每次切文件会丢几十毫秒的包。文件数量按总时长估算。比如预计抓 8 小时、平均速率 5MB/s 左右一小时就是 18G那保留几十个文件比较稳妥。宁可多留几个反正旧文件会自动删。设置好之后Wireshark 会按顺序生成一串文件写满一个就切下一个超出数量限制的最旧文件自动删除。这样既不会撑爆硬盘又能保证最近一段时间的完整数据都在。如果你不想开着图形界面命令行更省资源dumpcap -i 3 -b filesize:102400 -b files:30 -w /data/cap/trace.pcapng其中-i 3是网卡编号编号可以在dumpcap -D的输出里看-b filesize:102400表示单个文件 100MB-b files:30表示最多保留 30 个文件-w后面是输出路径。这条命令跑起来内存占用只有几十兆挂几天都没问题。之后想分析用 Wireshark 打开最新的那个文件就行需要看更早的话把前面的文件一起打开软件会自动按时间戳拼接。补充一个减小体积的思路如果只关心连接建立的过程、不关心内容可以把每个包只保留前面一小段。抓包选项里有个限制抓取长度的设置设成 96 或者 128 字节能覆盖到 TCP/IP 头和大部分控制信息体积能小一个数量级。分析握手、重传、时延这些问题完全够用。当然要看具体内容就不能这么干。3.4 蓝牙这类特殊介质的抓取思路蓝牙抓包是搜索量很高但坑最多的一类需求因为它跟普通的网络抓包完全不是一回事。蓝牙走的是主机控制器接口数据在应用处理器和蓝牙芯片之间传输并不经过网络协议栈所以你在网卡列表里无论如何也找不到它。可行度最高的路线是在 Android 设备上开启蓝牙日志收集。开发者选项里有一个专门的开关打开之后系统会把 HCI 层的数据记录到一个日志文件里复现问题之后把这个文件导出来用 Wireshark 直接打开就能看到完整的命令、事件和数据包。这个方法的优点是覆盖面全、不用额外硬件缺点是必须重新复现问题历史数据拿不到。Windows 上情况复杂一些因为现代蓝牙协议栈大多走的是厂商自己的驱动用 USB 抓包的方式不一定能截获到数据通路。真有硬性需求的话专业嗅探硬件是更可靠的选择它能同时监听多个信道并把跳频过程完整记录下来代价是价格不便宜。提示不管用哪种方式抓蓝牙抓之前一定要先清空旧日志、抓完立刻导出否则很容易拿到一份混杂着大量历史数据的文件分析时得先花时间切分。4. 显示过滤器与分析手法把海量报文压成结论文件拿到手之后真正的功夫在显示过滤器上。语法本身一两天就能背熟难的是知道该按什么顺序问问题。我的经验是先看全局统计再定位可疑流最后挖单包细节这个顺序能避免一上来就钻进细节里出不来。4.1 高频显示过滤器语法清单显示过滤器的表达能力比捕获过滤器强得多因为它拿到的是已经解析过的字段可以直接按协议字段过滤。下面这些是我日常用得最多的ip.addr 10.0.0.5 按 IP 过滤等同双向 tcp.port 8080 按端口过滤 http.request.method POST 只看 POST 请求 tls.handshake.type 1 只看 TLS 客户端握手 dns.qry.name contains example 域名包含关键字 tcp.flags.syn 1 tcp.flags.ack 0 只看握手第一步 tcp.analysis.retransmission 只看重传 tcp.analysis.zero_window 只看零窗口通告 tcp.stream eq 5 只看编号为 5 的流 frame.time_relative 10 只看 10 秒之后的包 ip.ttl 10 按 TTL 找可疑路由几个使用要点值得强调。逻辑运算符用、||、!或者对应的英文写法都可以但括号一定要加够运算符优先级有时候不符合直觉。contains是子串匹配matches是正则匹配后者性能差一些大数据量下慎用。最实用的一招是右键过滤在任意一个字段上点右键选择作为过滤器应用软件会自动生成对应的语法比手写快也不会出错。想反向过滤就选同时取反。学会这一招之后基本不需要专门背语法了。还有一类问题经常被忽略协议识别错误。有些自定义协议跑在标准端口上Wireshark 会按标准协议去解析结果满屏红黑报错。这时候要在分析菜单里用解码为功能手动指定某个端口按什么协议解析问题立刻解决。这个功能在排查工业协议、私有协议时是必备技能。4.2 跟随数据流把散包还原成一次完整对话看过一堆零散的包之后人脑会自动想把它们串起来这就是跟随数据流功能的价值。在任意一个包上右键选择跟随 TCP 流软件会把这条连接上所有的包按方向重新拼成两段文本客户端发的在一侧服务端回的在另一侧中间穿插着颜色标记。对于 HTTP、Redis 这类文本协议一眼就能看出业务逻辑对不对。它的原理是把 TCP 序号连续的载荷重新组装所以有个必须知道的限制如果中间有丢包、抓包起点晚了、或者抓包位置不对称只看到了一半的包重组出来的内容就是不完整的甚至会出现错位。遇到这种情况别急着怀疑应用有问题先确认你的抓包位置和时间点能不能覆盖完整的会话。UDP 因为没有序号和确认机制重组的结果只是按时间顺序拼接参考价值要打折扣。TLS 流更有意思如果没解密你看到的只是加密数据的长度和方向但即便如此请求发出去了、响应什么时候回来的这个时间关系还是清清楚楚排查时延问题足够用了。真要看到明文需要在浏览器启动时设置密钥日志文件的环境变量把会话密钥导出来给 Wireshark 用这是标准的调试手段。4.3 统计面板先看全局再抠细节打开一份陌生的大文件我第一件事不是写过滤器而是打开统计菜单里的协议分层。这个面板会把文件里所有流量按协议占比列出来正常情况下 TCP 应该占大头HTTP 或者 TLS 是主要内容。如果看到 ARP 或者广播协议占了很大比例说明网络里有泛洪问题如果 ICMP 异常多可能有设备在反复探测或者链路在抖动。这一步三十秒能帮你排除掉大量误判。第二个要看的是会话统计它按通信双方把流量排了个序。谁是流量冠军、哪些连接数量特别大、有没有一堆来自同一源地址的短连接一眼就能看出来。我处理过一次接口超时的问题就是在这个面板里发现某台机器在短时间内向同一个目标发起了上千次连接明显是连接池配置有问题导致的资源浪费。第三个是 IO 图表横轴是时间纵轴是吞吐量突起的尖峰和突然归零的空白区都是线索。图突然断掉说明那段时间没有流量可能是连接断了或者客户端卡住了持续的高位平线说明某个大文件在传输。可以给图表加多条线把不同的过滤器叠加在一起对比比如把重传和总流量画在同一张图上就能看出重传是不是跟流量高峰相关。4.4 可视化与专家信息让软件先帮你筛一遍专家信息面板是新手最容易忽略、实际价值最高的功能。它会自动扫描所有报文把重传、乱序、重复确认、零窗口、校验和错误这些异常标出来分成错误、警告、注意、对话四个级别。打开它基本上等于让软件先替你做了一轮初筛。我要提醒的是不要看到警告就以为是故障。重传在网络里是正常现象比例在合理范围内完全不影响业务乱序在负载均衡环境下也很常见。判断标准是看数量和密度偶发几次无所谓短时间内密集出现才有问题。我一般会先看错误和警告这两级的总数再挑数量最多的那一类点开跳到具体的包上去看上下文。流程图和 TCP 时序图是两个进阶工具。流程图能把一次会话里各方的交互顺序画出来适合分析涉及多个节点的调用链时序图以 TCP 序号为纵轴、时间为横轴能非常直观地看出丢包和重传——图上出现台阶或者下凹基本就是丢包的位置。吞吐量图则用来判断带宽是否被打满。这三个图配合专家信息一起看绝大多数网络层的问题都能定位到具体方向。5. 几个真实场景的拆解语法和面板讲完了接下来用三个不同领域的例子说明怎么把工具用起来。这三个场景的复杂度递增思路是通用的。5.1 接口偶发超时从时延分解找到真凶回到开头那个案例典型的排查路径是这样的。第一步先用显示过滤器把目标连接找出来按服务端 IP 加端口过滤然后用跟随数据流确认请求和响应确实成对出现。第二步打开统计里的 TCP 时序图重点看三块时间三次握手的耗时、请求发出到第一个响应字节的耗时、以及响应传输的耗时。这三段时间分别对应网络往返、服务端处理、数据传输哪一段长问题就在哪一段。那次的结果是握手动辄几百毫秒而服务端处理只用了十几毫秒。握手慢说明网络层有问题于是换了个过滤器专门看握手包发现 SYN 发出后要等两三次重传才能收到 SYN-ACK。再顺着重传包看下去注意到大包会被丢、小包正常最终锁定到路径上的 MTU 协商异常。整个排查过程不到两个小时而在此之前团队已经查了三天应用日志。这个案例的关键经验是时延问题一定要做时间分解不要笼统地说慢。Wireshark 里可以切换时间显示格式把相对时间改成以某个包为起点的时间配合手算几分钟就能把每一段耗时算清楚。5.2 把 RTP 流还原成能播的音频音视频类的问题很依赖抓包因为信令和媒体是分开的。一个典型的语音通话信令协议负责协商参数媒体走 RTP 传输而 RTP 本身不携带采样率、编码格式这些信息全靠信令里的会话描述提供。操作路径是这样的先在信令里找到协商出来的端口和编码格式通常是一对端口号加上编码名称。然后在电话菜单里打开 RTP 流列表软件会把同一个同步源的包聚合在一起显示。选中某条流点分析按钮可以看到丢包率、抖动、乱序这些质量指标这些数字直接反映了通话质量。想听实际的音频用保存载荷的功能把原始数据导出来音频一般是按原始采样格式存的需要用工具转成常见格式才能播放视频则是把 H.264 之类的码流存出来再封装进容器文件。如果软件没有自动识别出 RTP 流说明它不知道哪个端口是媒体端口。这时候回到解码为功能手动把对应的 UDP 端口指定为 RTP列表立刻就出来了。这个手动指定的操作在排查自定义端口的媒体流时几乎是必经步骤。5.3 工业协议 TRDP 的解析扩展在轨道交通和工业控制领域有一类协议是标准的解析器覆盖不到的比如列车通信网络里用的 TRDP。这类协议的特点是跑在 UDP 或 TCP 之上字段结构固定但属于专用规范通用的解析器只能把它显示成一堆裸字节。解决思路有两条。如果社区里已经有人写了对应的解析插件装到插件的目录里重启软件就能用效果跟内置协议一样能按字段名过滤、能画时序图。如果没有现成的可以自己写一个 Lua 解析脚本把协议文档里的字段定义翻译成脚本里的注册逻辑工作量其实不大一个下午能搞定一个基础版本。我做过一个类似的扩展最深的一点体会是先把字段边界搞清楚再动手写。工业协议的字节序、对齐方式、变长字段的处理跟互联网协议差别很大如果一开始就把字段偏移量算错了后面每个字段都是错的排查起来比从头写还费劲。写完一个字段就先拿真实报文验证一个字段比全部写完再调试效率高得多。6. 常见问题速查与避坑经验最后把日常被问到最多的问题整理成一张表再补充几条我踩过坑才总结出来的经验。遇到卡壳的时候先扫一眼表格能省掉很多搜索时间。6.1 高频问题速查表现象常见原因处理办法网卡列表为空驱动没装好或权限不足重装驱动用管理员身份运行检查服务状态抓不到任何包选错网卡或流量不经过本机确认路由走向确认抓包位置能看到目标流量界面卡死不响应实时刷新加上大流量或配置损坏关掉实时更新和自动滚动删配置文件重建抓到大量重传链路丢包、带宽饱和、设备性能不足看时序图和吞吐图定位丢包位置和时间点协议显示异常端口与协议不匹配或版本过旧用解码为手动指定升级到新版本文件打不开文件被截断或保存过程中程序崩溃找同序列的相邻文件检查是否有完整结尾抓一晚上文件几个G没有限制抓取长度和文件大小设环形缓冲区限制抓取长度用命令行落盘时间戳对不上各节点时钟不同步统一时间源分析时用相对时间而不是绝对时间6.2 我自己踩出来的几条经验关于过滤器最值得培养的习惯是从粗到细。我见过太多人一上来就写一个特别复杂的长过滤器结果要么语法错误要么条件太严什么都没匹配到然后就卡住了。正确做法是先按 IP 或者端口粗筛看看剩下多少包再逐步追加协议字段条件。每加一个条件都确认一下结果数量在合理下降而不是归零。关于列配置这是提升效率的隐藏技巧。默认的列只有序号、时间、源、目的、协议、长度、信息但很多时候真正需要看的字段不在里面。你可以右键任意字段选择作为列应用把它固定成新的一列。比如排查 TLS 问题的时候把握手类型、服务器名称指示加到列里一屏就能扫完所有握手比一条条点开快十倍。不同的排查场景可以存成不同的配置档切换场景的时候直接切档列和过滤器全部跟着变。关于文件管理一定要养成命名的习惯。抓包文件建议带上时间、位置、问题关键词比如0815-前台机器-接口超时。我经历过一次团队协作排查五个人抓了十几个文件丢在共享目录里名字全是默认的那串数字光是对齐哪份文件对应哪次复现就花了半天。另外把重要文件用命令行工具按大小或者时间切片再配合校验值存档需要回溯的时候会方便很多。关于抓包时机有个反直觉的点不要等出问题了才开始抓。很多偶发问题的窗口只有几百毫秒等你手动点开始早就错过了。正确做法是提前挂上持续抓包用环形缓冲区压着出问题之后按时间点去文件里捞。文件是自动滚动覆盖的不需要一直盯着也不担心占满硬盘。最后说一个心态上的经验。抓包分析最大的坑不是工具用得不好而是没有假设就开始看。漫无目的地翻几百兆报文看两个小时也看不出所以然。每次打开文件之前先在心里写下一句我怀疑问题是 X如果是 X那么报文里应该能看到 Y。然后就用过滤器去验证 Y 存在不存在。这个习惯一旦养成分析速度会有质的变化很多时候三五个过滤器就能给出答案剩下的时间都是用来确认和举证的。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进