1. 为什么需要自定义Wireshark显示列
第一次用Wireshark抓包时,满屏密密麻麻的字段让人眼花缭乱。源地址、目标地址、协议类型这些关键信息被淹没在几十个默认显示的列中,而真正需要的字段可能根本没显示出来。这就是为什么我们需要掌握列显示的自定义技巧。
Wireshark默认的列显示布局是基于通用场景设计的,但实际工作中:
- 排查HTTP问题时只需要看请求方法、URI和状态码
- 分析DNS查询时重点关注查询类型和响应内容
- 调试TCP连接时更需要序列号和确认号字段
通过自定义显示列,我们可以:
- 隐藏无关字段减少干扰
- 添加专业分析需要的特定字段
- 按工作习惯优化信息密度
- 创建针对不同协议的分析模板
2. 列管理基础操作详解
2.1 添加新显示列
假设我们需要监控HTTP请求的User-Agent,操作步骤如下:
- 在任意数据包详情面板中,右键点击"User-Agent"字段
- 选择"Apply as Column"
- 新列会立即出现在最右侧
- 拖动列标题可以调整位置
专业提示:添加列前先过滤出目标协议(如输入"http"),这样能快速定位到相关字段
2.2 删除显示列
两种删除方式各有适用场景:
临时隐藏法:
- 右键列标题 → "Hide Column"
- 适合偶尔需要查看的列
- 可通过"Edit → Preferences → Columns"恢复
彻底删除法:
- "Edit → Preferences → Columns"
- 选中目标列点击"-"按钮
- 适用于确定不再需要的列
2.3 列属性深度配置
在"Preferences → Columns"界面可以进行高级设置:
| 参数项 | 说明 | 典型值示例 |
|---|---|---|
| Title | 列头显示文字 | HTTP Status |
| Type | 字段类型(影响排序方式) | Number/Dialog string |
| Field | 绑定的协议字段 | http.response.code |
| Display | 数值显示格式(16进制/十进制等) | Decimal |
| Occurrence | 当字段出现多次时指定显示哪个 | 0(表示第一个出现) |
3. 高阶列管理技巧
3.1 创建智能计算列
通过"Edit → Preferences → Columns → Add"可以创建计算列:
- 点击"+"新建列
- 在"Field"输入框中点击右侧表达式按钮
- 使用Wireshark显示过滤器语法编写表达式
- 示例1:计算TCP传输延迟
tcp.time_delta - 示例2:标记异常流量
frame.len > 1500 ? "Oversize" : "Normal"
- 示例1:计算TCP传输延迟
3.2 列配置的导入导出
团队协作时可以通过配置文件共享列布局:
-
导出配置:
- "Edit → Configuration Profiles → New"
- 勾选"Column formats"选项
- 生成配置文件(.zip格式)
-
导入配置:
- 将配置文件放入Wireshark配置目录
- 重启后通过"Edit → Configuration Profiles"加载
3.3 协议专用列模板
针对不同协议可以创建专用配置模板:
HTTP分析模板:
- 保留默认的No.、Time、Source、Destination
- 添加:
- http.request.method
- http.request.uri
- http.response.code
- http.content_length
DNS调试模板:
- 基础列同上
- 添加:
- dns.qry.name
- dns.qry.type
- dns.resp.addr
- dns.time
4. 实战问题排查案例
4.1 定位HTTP慢请求问题
场景:网站部分页面加载缓慢
-
创建专用列:
- http.time(请求处理时间)
- tcp.analysis.ack_rtt(网络延迟)
- http.content_length(响应大小)
-
排序规则:
- 主排序:http.time降序
- 次排序:tcp.analysis.ack_rtt降序
-
分析逻辑:
- 高http.time + 低ack_rtt → 服务端问题
- 高ack_rtt → 网络问题
- 大content_length → 考虑优化资源
4.2 分析异常DNS查询
场景:设备频繁发起异常DNS请求
-
关键列配置:
- dns.flags.response(区分请求/响应)
- dns.qry.name(查询域名)
- dns.qry.type(查询类型)
- dns.count.queries(查询次数)
-
过滤条件:
dns && !dns.flags.response -
异常特征识别:
- 非常见域名+高频率查询 → 可能中毒
- TXT/MX类型异常查询 → 可能信息泄露
5. 性能优化与使用技巧
5.1 列显示性能影响
测试数据(处理10万包文件):
| 列数量 | 内存占用 | 加载时间 | 滚动流畅度 |
|---|---|---|---|
| 5列 | 320MB | 8s | 流畅 |
| 15列 | 490MB | 15s | 轻微卡顿 |
| 30列 | 780MB | 28s | 明显迟滞 |
优化建议:
- 常规分析保持5-8个关键列
- 复杂分析时使用配置切换
- 避免添加计算密集型字段(如自定义Lua字段)
5.2 快捷键加速操作
Ctrl+Shift+Left/Right:快速调整列顺序Ctrl+Alt+Shift+Left/Right:调整列宽度- 双击列分隔线:自动调整列宽
Ctrl+点击列标题:添加次级排序
5.3 列配置备份策略
建议的备份方案:
- 主配置文件:
%APPDATA%\Wireshark\preferences - 列定义备份:
bash复制# Linux/macOS cp ~/.config/wireshark/columns ~/wireshark_backup/ # Windows xcopy %APPDATA%\Wireshark\columns %USERPROFILE%\backup\wireshark\ /y - 注册表备份(Windows):
reg复制reg export HKEY_CURRENT_USER\Software\Wireshark wireshark_settings.reg
6. 常见问题解决方案
6.1 字段无法添加为列
可能原因及解决:
| 现象 | 原因 | 解决方案 |
|---|---|---|
| 右键菜单无"Apply as Column" | 字段不支持直接显示 | 尝试在首选项手动添加 |
| 添加后显示 |
字段在当前包不存在 | 确保过滤出包含该字段的包 |
| 列标题显示字段名 | 未设置友好标题 | 在列设置中修改Title属性 |
6.2 自定义列排序异常
典型排序问题处理流程:
-
检查列类型:
- 数字字段设为Number类型
- 时间字段设为Delta/Absolute时间类型
-
验证字段取值:
tshark -r capture.pcap -T fields -e your.field | sort -u -
重置排序规则:
- 点击其他列再点回目标列
- 完全退出重启Wireshark
6.3 配置意外重置恢复
应急恢复步骤:
-
查找自动备份:
- Windows:
%APPDATA%\Wireshark\recent_common - macOS:
~/Library/Application Support/Wireshark/.recent_common
- Windows:
-
手动恢复步骤:
ini复制# 编辑preferences文件添加: gui.column.format: "No.,...,Abs Time,Source,Destination,Protocol,Length,Info" -
终极方案:
bash复制# 使用tshark重建配置 tshark -G column-formats > new_columns
7. 扩展应用场景
7.1 安全审计专用视图
入侵检测常用列配置:
- 基础五元组(源/目标IP+端口+协议)
- 关键特征字段:
- http.user_agent
- tls.handshake.extensions_server_name
- smb.command
- 威胁指标:
- frame.comment(自定义标记)
- ip.ttl(异常值检测)
- tcp.flags.str(异常标志组合)
7.2 网络性能分析模板
关键性能指标列:
- 时间维度:
- tcp.time_relative(流相对时间)
- tcp.analysis.ack_rtt(往返延迟)
- 传输效率:
- tcp.window_size
- tcp.analysis.bytes_in_flight
- 重传指标:
- tcp.analysis.retransmission
- tcp.analysis.fast_retransmission
7.3 物联网协议分析配置
MQTT专用列示例:
- mqtt.conflag.cleanstart
- mqtt.hdrflags.qos
- mqtt.topic
- mqtt.msg_len
CoAP关键字段:
- coap.type
- coap.code
- coap.opt.uri_path
- coap.payload