4. Wireshark基础操作:过滤规则、着色规则、追踪流、统计工具的使用
说实话,很多刚入行的兄弟拿到Wireshark,第一反应就是——满屏花花绿绿的包,看都看晕了。我当年也是这样,抓了个空口信令包,盯着屏幕发呆,完全不知道从哪下手。
其实Wireshark没那么玄乎。你只要掌握四个核心技能:过滤、着色、追踪、统计,就能从一堆乱码里快速找到你要的东西。今天我就把这四板斧掰开揉碎讲给你听。
核心观点:Wireshark不是用来“看”所有包的,而是用来“找”你关心的包的。过滤和着色就是你的眼睛,追踪流和统计工具就是你的手。
4.1 过滤规则:从海量数据中精准捞针
Wireshark的过滤分两种:捕获过滤器和显示过滤器。很多人搞混,我简单说下区别。
| 类型 | 作用时机 | 语法 | 典型场景 |
|---|---|---|---|
| 捕获过滤器 | 抓包之前 | BPF(Berkeley Packet Filter) | 只抓S1-MME接口信令 |
| 显示过滤器 | 抓包之后 | Wireshark专有语法 | 从全量包中筛选特定消息 |
捕获过滤器说白了就是“先筛再抓”。比如我只想看S1接口的GTP-C信令,可以这样写:
host 192.168.1.100 and port 2123
这样Wireshark就只抓这个IP和端口的数据,其他包直接丢弃。好处是节省磁盘和内存,坏处是——万一你漏了条件,就得重新抓。我吃过这个亏,有一次只抓了GTP-C,结果发现问题是GTP-U的,只好重来。
显示过滤器才是日常用得最多的。它是在已经抓到的包里做二次筛选。常用的LTE相关过滤表达式:
s1ap—— 只看S1AP消息nas-eps—— 只看NAS层消息gtp—— 只看GTP协议s1ap.ProcedureCode == 0—— 只看Attach流程nas-eps.emm.type == 0x41—— 只看Attach Requestip.addr == 10.10.10.1—— 只看某个IP的流量
小技巧:你可以在过滤栏输入 s1ap 后按回车,然后右键点击某个字段,选择“作为过滤器应用” → “选中”。Wireshark会自动帮你生成精确的过滤表达式。我刚开始学的时候全靠这个功能,省了不少事。
4.2 着色规则:一眼看出异常
Wireshark默认会给不同协议上色。比如TCP SYN包是红色,HTTP是绿色,DNS是蓝色。但说实话,默认配色对LTE抓包来说不太够用。
我个人习惯自定义一套LTE专属着色规则。怎么配?
- 菜单栏:视图 → 着色规则
- 点击“新建”,输入名称和过滤条件
- 选择前景色和背景色
- 点击“确定”保存
我常用的LTE着色规则:
| 规则名称 | 过滤表达式 | 颜色 | 用途 |
|---|---|---|---|
| S1AP_Setup | s1ap.ProcedureCode == 1 |
蓝色 | S1建立流程 |
| Attach | s1ap.ProcedureCode == 0 |
绿色 | 附着流程 |
| Detach | s1ap.ProcedureCode == 2 |
红色 | 去附着流程 |
| Handover | s1ap.ProcedureCode == 13 |
橙色 | 切换流程 |
| NAS_Error | nas-eps.emm.cause |
紫色 | NAS层拒绝/错误 |
注意:着色规则只改变显示颜色,不影响数据本身。我曾经见过有人把着色规则导出后忘了,换台电脑抓包发现颜色不对,还以为数据丢了。其实只是规则没导入而已。
4.3 追踪流:还原完整对话
单个包看是零散的,但一个信令流程往往是多个包的交互。追踪流功能可以把这些包串起来,还原成完整的对话。
操作很简单:
- 选中任意一个包
- 右键 → 追踪流 → TCP流/UDP流
- Wireshark会弹出一个新窗口,显示完整的对话内容
在LTE抓包里,我常用追踪流来看:
- SCTP流:S1AP和NGAP都是跑在SCTP上的,追踪SCTP流可以看到完整的信令交互
- GTP-C流:核心网信令,比如Create Session Request/Response
- HTTP流:如果抓了SGW/PGW的接口,有时候能看到HTTP2的流量
举个例子。有一次我排查一个UE附着失败的问题,单个包看都是正常的,但用追踪流一看——发现MME发了Attach Accept后,UE没有回Attach Complete,而是回了一个Attach Reject。问题一下就定位了:UE侧拒绝了网络侧的附着。
进阶用法:追踪流窗口支持“查找”功能(Ctrl+F),可以快速搜索关键字。比如在S1AP流里搜“Cause”,就能找到所有失败原因。
4.4 统计工具:用数据说话
统计工具是Wireshark里容易被忽视但非常强大的功能。它能把抓到的包变成图表和数字,让你一眼看出整体情况。
常用的统计功能:
| 统计项 | 菜单位置 | LTE场景用途 |
|---|---|---|
| IO Graph | 统计 → IO Graph | 看某个接口的流量趋势,比如S1接口突发流量 |
| 协议分层 | 统计 → 协议分层 | 看各协议占比,判断是否有异常协议 |
| 对话 | 统计 → 对话 | 看哪些IP之间通信最频繁 |
| 端点 | 统计 → 端点 | 看所有参与通信的IP和端口 |
| 流图 | 统计 → 流图 | 可视化信令交互流程 |
IO Graph是我用得最多的。比如你怀疑某个时间段S1接口有拥塞,可以这样操作:
- 过滤出S1AP流量:
s1ap - 打开IO Graph(统计 → IO Graph)
- 设置X轴为时间,Y轴为包数/秒
- 看曲线是否有尖峰或异常波动
有一次我排查一个基站频繁断连的问题,用IO Graph一看,发现每天凌晨3点都有一个流量尖峰。后来查出来是那个基站的定时任务在批量上报测量报告,导致SCTP链路拥塞。没有IO Graph,这种规律性问题很难发现。
我的建议:每次抓完包,先花30秒看下统计工具。IO Graph看趋势,协议分层看分布,对话看热点。这30秒往往能帮你省下后面半小时的排查时间。
4.5 实战:用过滤+着色+统计定位一次Attach失败
光说不练假把式。我拿一个真实案例串一遍。
场景:用户反馈手机无法附着到LTE网络。抓了S1-MME接口的包。
第一步:过滤
输入 s1ap.ProcedureCode == 0,只看Attach流程。发现确实有Attach Request和Attach Reject。
第二步:着色
给Attach Reject包设置红色着色规则。一眼就能看到红色包出现在哪个位置。
第三步:追踪流
选中Attach Reject包,右键追踪SCTP流。看到MME回复的Cause值是 #15 - No suitable cells in tracking area。
第四步:统计
打开IO Graph,过滤 s1ap.ProcedureCode == 0,发现Attach Request在短时间内重复发送了5次,每次间隔3秒。说明UE在反复尝试附着。
结论:TAI(Tracking Area Identity)配置有问题,UE所在的TA不在MME允许的列表里。调整MME的TAI配置后问题解决。
避坑指南:我曾经遇到一个情况,过滤条件写错了,把 s1ap.ProcedureCode == 0 写成了 s1ap.ProcedureCode = 0(单等号)。Wireshark不会报错,但也不会匹配任何包。所以写过滤条件时一定要用双等号 ==。
好了,这四板斧你学会了吗?过滤让你精准定位,着色让你一目了然,追踪流让你看清全貌,统计工具让你把握全局。下次抓包的时候,别光盯着屏幕发呆,试试这些操作。你会发现,Wireshark其实挺听话的。