跳到主要内容

Packet Tap 定义

Packet Tap 定义文件是 wireshark/ 目录下的 YAML 文件,每个文件描述一个数据包探针。文件 ID 的推导规则与脚本相同:去掉扩展名,将 / 替换为 .

完整示例

id: example.packet.trace
direction:
- send
- receive
matcher:
type: packet-name
value: PacketPlayOutChat
tracking: true
parse: true
intercept: false
rewrite:
type: field-set
field: b
value: monoceros
route:
type: script
value: debug.packet.trace

字段说明

字段类型默认值说明
idString从文件路径推导Tap 的唯一标识
directionString / List监听方向:send(服务端发往客户端)、receive(客户端发往服务端),可以是单个值或列表
matcherObject数据包匹配器,决定哪些数据包会被此 Tap 捕获
filtersList过滤器列表,对匹配到的数据包做进一步筛选
trackingBooleanfalse是否启用会话级追踪记录,开启后会在玩家会话中记录匹配的数据包信息
parseBooleanfalse是否解析数据包内容。开启后可以在脚本中读取数据包字段
interceptBooleanfalse是否允许拦截(取消)数据包。需要全局 allow-intercept: true 才会生效
rewriteObject数据包重写规则。需要全局 allow-rewrite: true 才会生效
routeObject路由目标,将匹配的数据包转发到脚本、动作或处理器

direction

监听方向可以写成单个值或列表:

# 只监听发送
direction: send

# 同时监听收发
direction:
- send
- receive

matcher

匹配器决定哪些数据包会被 Tap 捕获,由 typevalue 两个字段组成:

matcher:
type: packet-name
value: PacketPlayOutChat

filters

过滤器是一个列表,每个过滤器同样由 typevalue 组成。只有通过所有过滤器的数据包才会继续处理:

filters:
- type: packet-name
value: PacketPlayOutChat

rewrite

重写规则定义了如何修改数据包内容。type 决定重写方式,其余字段根据类型不同而变化:

rewrite:
type: field-set
field: b
value: monoceros
注意

重写是双重门控的 —— Tap 定义中配置了 rewrite 还不够,config.yml 中的 wireshark.allow-rewrite 也必须设为 true,重写才会实际执行。

route

路由目标决定匹配的数据包被转发到哪里处理:

# 路由到脚本
route:
type: script
value: debug.packet.trace

# 路由到动作
route:
type: action
value: my.action.id

安全机制

拦截和重写都采用双重门控设计,两个开关必须同时开启才会生效:

功能Tap 定义字段全局配置字段
拦截intercept: truewireshark.allow-intercept: true
重写rewrite: { ... }wireshark.allow-rewrite: true

这样设计是为了防止误操作 —— 即使某个 Tap 文件中写了拦截或重写配置,只要全局开关没开,就不会产生任何影响。