Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

Mate/Reference

本页是 MATE 配置语法的参考页,用来查 Attribute/Value Pair、AVPL 匹配规则,以及 Pdu、Gop、Gog、Settings、Debug、Include 等配置块的具体子句。

先读这页能解决什么

需求应读章节注意点
判断一个 AVP 条件为什么匹配或不匹配属性值对、属性/值对列表(AVPL)配置中的 AVP 可能带运算符;运行时提取出的 AVP 通常只是名称和值。
写 Pdu、Gop、Gog 配置块配置 AVPLPdu 负责从帧中提取字段;Gop 负责把 Pdu 分组;Gog 负责把 Gop 再关联起来。
调整匹配、合并或改写属性AVPL 之间的操作、TransformsMatch、Merge、Transform 的作用层级不同,不要混作同一种过滤语法。
排查 MATE 输出或加载配置调试内容、Action=Include调试级别会影响输出量;Include 只说明配置包含方式。

易混点

  • MATE 的 AVP 名称和值都是字符串;它们可以用于 Wireshark 显示过滤器,但不等同于协议字段别名。
  • Pdu、Gop、Gog 是 MATE 的三层关联对象,不是网络协议层级。
  • 本页是参考页,偏向逐项解释语法;如果需要按工作流程理解 MATE,先读 Mate/Manual 会更顺。
  • 历史边界:本文保留 2020 年从 Wireshark Wiki 导入的参考内容。原文中关于部分语法仍待更新的状态没有被改写;遇到版本差异时,应以当前 Wireshark 实际行为和官方文档为准。

章节导航

章节内容
属性值对AVP 的名称、值、运算符,以及各类 AVP 运算符示例。
属性/值对列表(AVPL)Loose、Every、Strict Match,AVPL Merge,以及 Transform 的基础规则。
配置 AVPLPdu、Gop、Gog、Settings、Debug、Include 等配置动作和子句。

属性值对

MATE 几乎在所有地方都使用 AVP:既用于保存它从帧的树中提取的数据,也用于保存配置元素。

这些“对”(实际上是元组)由名称、值以及在配置 AVP 的情况下的运算符组成。名称和值都是字符串。带有非 = 运算符的 AVP 只在配置中使用,并在分析阶段用于匹配 Pdus、GoPs 和 GoGs 的 AVP。

名称

名称是一个字符串,用于引用一类 AVP。除非两个属性的名称完全相同,否则它们不会匹配。首字母大写的名称保留给关键字使用(如果你愿意,也可以把它们用于自己的元素,但我认为通常不是这种情况)。MATE 属性名可以像 dissector 提供的协议字段名一样用于 Wireshark 的显示过滤器,但它们并不只是对协议字段的引用(或别名)。

值是一个字符串。它要么在配置中设置(对于配置 AVP),要么由 MATE 在从 dissection tree 中提取感兴趣字段和/或后续操作这些字段时设置。从字段提取的值使用与它们在过滤器字符串中相同的表示形式。

运算符

目前只定义了匹配运算符(计划(重新)添加 transform 属性,但在此之前还需要解决一些内部问题)。匹配操作始终在两个操作数之间执行:配置中声明的某个 AVP 的值,以及从数据包数据中提取的某个 AVP(或多个同名 AVP)的值(称为“数据 AVP”)。不能将数据 AVP 彼此匹配。

已定义的匹配运算符包括:

Equal= 测试相等性,也就是说:要么值字符串完全相同,要么匹配失败。

Not Equal! 仅当值字符串不相等时才匹配。

One Of{} 如果列出的某个值字符串等于数据 AVP 的字符串,则匹配。花括号内列表的各个条目使用 | 字符分隔。

Starts With^ 如果配置值字符串匹配数据 AVP 值字符串的开头字符,则匹配

Ends WIth$ 如果配置值字符串匹配数据 AVP 值字符串的结尾字符,则匹配

Contains~ 如果配置值字符串匹配数据 AVP 值字符串中的一个子串,则匹配

Lower Than< 如果数据 AVP 的值字符串在语义上低于配置值字符串,则匹配

Higher Than> 如果数据 AVP 的值字符串在语义上高于配置值字符串,则匹配

Exists?(可以省略)如果 AVP 名称匹配,则无论值字符串是什么都会匹配

Equal AVP 运算符

此运算符测试运算符和操作数 AVP 的值是否相等。

示例

attrib=aaa 匹配 attrib=aaa

attrib=aaa 不匹配 attrib=bbb

Not equal AVP 运算符

如果两个 AVP 的值字符串不相等,此运算符会匹配。

示例

attrib=aaa 匹配 attrib!bbb

attrib=aaa 不匹配 attrib!aaa

"One of" AVP 运算符

如果数据 AVP 值等于 "one of" AVP 中列出的某个值,则 "one of" 运算符会匹配。

示例

attrib=1 匹配 attrib

attrib=2 匹配 attrib

attrib=4 不匹配 attrib

"Starts with" AVP 运算符

如果数据 AVP 值的开头字符与配置 AVP 值相同,则 "starts with" 运算符会匹配。

示例

attrib=abcd 匹配 attrib^abc

attrib=abc 匹配 attrib^abc

attrib=ab 不匹配 attrib^abc

attrib=abcd 不匹配 attrib^bcd

attrib=abc 不匹配 attrib^abcd

"Ends with" 运算符

如果数据 AVP 值的最后若干字节等于配置 AVP 值,则 ends with 运算符会匹配。

示例

attrib=wxyz 匹配 attrib$xyz

attrib=yz 不匹配 attrib$xyz

attrib=abc...wxyz 不匹配 attrib$abc

Contains 运算符

如果数据 AVP 值包含与配置 AVP 值相同的字符串,则 "contains" 运算符会匹配。

示例

attrib=abcde 匹配 attrib~bcd

attrib=abcde 匹配 attrib~abc

attrib=abcde 匹配 attrib~cde

attrib=abcde 不匹配 attrib~xyz

"Lower than" 运算符

如果数据 AVP 值在语义上低于配置 AVP 值,则 "lower than" 运算符会匹配。

示例

attrib=abc 匹配 attrib<bcd

attrib=1 匹配 attrib<2

但请注意:attrib=10 不匹配 attrib<9

attrib=bcd 不匹配 attrib<abc

attrib=bcd 不匹配 attrib<bcd

BUGS

它应该检查这些值是否为数字,并按数值进行比较

"Higher than" 运算符

如果数据 AVP 值在语义上高于配置 AVP 值,则 "higher than" 运算符会匹配。

示例

attrib=bcd 匹配 attrib>abc

attrib=3 匹配 attrib>2

但请注意:attrib=9 不匹配 attrib>10

attrib=abc 不匹配 attrib>bcd

attrib=abc 不匹配 attrib>abc

BUGS

它应该检查这些值是否为数字,并按数值进行比较

Exists 运算符

只要两个操作数具有相同名称,exists 运算符总是会匹配。

示例

attrib=abc 匹配 attrib?

attrib=abc 匹配 attrib(这只是前一个示例的另一种写法)

显然 attrib=abc 不匹配 other_attrib?

属性/值对列表(AVPL)

Pdus、GoPs 和 GoGs 使用一个 AVPL 来包含追踪信息。AVPL 是一个未排序的 AVP 集合,可以与其他 AVPL 进行匹配。

AVPL 之间的操作

可以在 AVPL 之间执行三种类型的匹配操作。Pdu/GoP/GoG 的 AVPL 始终是操作数之一;AVPL 运算符(匹配类型)和第二个操作数 AVPL 始终来自配置。

请注意,可以为配置 AVPL 中的每个 AVP 指定不同的 AVP 匹配运算符。

AVPL 匹配操作会返回一个结果 AVPL。在 Transforms 中,结果 AVPL 可以被另一个 AVPL 替换。替换意味着现有数据 AVP 会被丢弃,而配置中的替换 AVPL 会被 Merge 到 Pdu/GoP/GoG 的数据 AVPL 中。

Loose Match:如果两个操作数 AVPL 中至少有一个 AVP 匹配,则匹配成功。如果匹配成功,它会返回一个结果 AVPL,其中包含数据 AVPL 中与配置 AVP 匹配的所有 AVP。

"Every" Match:如果配置 AVPL 中没有任何 AVP 在数据 AVPL 中匹配失败,则匹配成功,即使并非所有配置 AVP 都有匹配项。如果匹配成功,它会返回一个结果 AVPL,其中包含数据 AVPL 中与配置 AVPL 中某个 AVP 匹配的所有 AVP。

Strict Match:当且仅当配置 AVPL 中的每个 AVP 在数据 AVPL 中至少有一个匹配项时,才匹配成功。如果匹配成功,它会返回一个结果 AVPL,其中包含数据 AVPL 中那些匹配的 AVP。

Loose Match

如果至少一个数据 AVP 匹配至少一个配置 AVP,则 AVPL 之间的 loose match 成功。其结果 AVPL 包含所有匹配的数据 AVP。

Loose match 用于针对 Pdu 的 AVPL 的 Extra 操作,以便将结果合并到 Gop 的 AVPL;也用于针对 Gop 的 AVPL,以便将结果合并到 Gog 的 AVPL。它们也可以用于 Criteria 和 Transforms。

⚠️ 截至当前版本(2.0.1),Loose Match 并未按此处描述的方式工作,请参见 Bug 12184。该 bug 实际影响的只有在 Transforms 和 Criteria 中的使用。

Loose Match 示例

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Loose (attr_a?, attr_c?) ==> (attr_a=aaa, attr_c=xxx)

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Loose (attr_a?, attr_c=ccc) ==> (attr_a=aaa)

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Loose (attr_a=xxx; attr_c=ccc) ==> No Match!

Every Match

如果配置中的 AVP 只要在数据 AVPL 中有对应项就没有任何匹配失败,则 AVPL 之间的 "every" match 成功。其结果 AVPL 包含所有匹配的数据 AVP。

这些只能用于 Criteria 和 Transforms。

⚠️ 截至当前版本(2.0.1),Every Match 并未按此处描述的方式工作,请参见 Bug 12184

"Every" Match 示例

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Every (attr_a?, attr_c?) ==> (attr_a=aaa, attr_c=xxx)

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Every (attr_a?, attr_c?, attr_d=ddd) ==> (attr_a=aaa, attr_c=xxx)

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Every (attr_a?, attr_c=ccc) ==> No Match!

(attr_a=aaa; attr_b=bbb; attr_c=xxx) Match Every (attr_a=xxx, attr_c=ccc) ==> No Match!

Strict Match

当且仅当配置 AVPL 中的每个 AVP 在数据 AVPL 中至少有一个对应项,并且没有任何 AVP 匹配失败时,AVPL 之间的 Strict match 成功。结果 AVPL 包含所有匹配的数据 AVP。

这些用于 Gop key(key AVPL)和 Pdu AVPL 之间。它们也可以用于 Criteria 和 Transforms。

示例

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Strict (attr_a?, attr_c=xxx) ==> (attr_a=aaa, attr_c=xxx)

(attr_a=aaa, attr_b=bbb, attr_c=xxx, attr_c=yyy) Match Strict (attr_a?, attr_c?) ==> (attr_a=aaa, attr_c=xxx, attr_c=yyy)

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Strict (attr_a?, attr_c=ccc) ==> No Match!

(attr_a=aaa, attr_b=bbb, attr_c=xxx) Match Strict (attr_a?, attr_c?, attr_d?) ==> No Match!

AVPL Merge

  • 一个 AVPL 可以被合并到另一个 AVPL 中。这会把前者中所有尚不存在于后者中的 AVP 添加到后者。
  • 此操作会在以下情况执行 key match 的结果与 Gop 或 Gog 的 AVPL 之间,

Extra match 的结果与 Gop 或 Gog 的 AVPL 之间,

Transform match 的结果与 Pdu/Gop 的 AVPL 之间。如果 Match 子句指定的操作为 Replace,则在将 modify_avpl 合并进去之前,会先从该项的 AVPL 中移除匹配结果 AVPL。

示例

(attr_a=aaa, attr_b=bbb) Merge (attr_a=aaa, attr_c=xxx) 前者变为 (attr_a=aaa, attr_b=bbb, attr_c=xxx)

(attr_a=aaa, attr_b=bbb) Merge (attr_a=aaa, attr_a=xxx) 前者变为 (attr_a=aaa, attr_a=xxx, attr_b=bbb)

(attr_a=aaa, attr_b=bbb) Merge (attr_c=xxx, attr_d=ddd) 前者变为 (attr_a=aaa, attr_b=bbb, attr_c=xxx, attr_d=ddd)

Transforms

Transform 是一系列 Match 规则,后面可选地跟随一条说明,说明如何使用额外的 AVPL 修改匹配结果。这种修改可以是 Insert(merge)或 Replace。语法如下:

text
 Transform name { Match [Strict|Every|Loose] match_avpl [[Insert|Replace] modify_avpl] ; // may occur multiple times, at least once };

有关 Transforms 示例,请查看 Manual 页面。

TODO:把示例迁移到这里?

Transform 内部的 Match 规则列表按从上到下处理;一旦某条 Match 规则成功,或所有规则都尝试失败,处理就会结束。

Transforms 可以作为辅助工具,在某个项继续被处理之前操作该项的 AVPL。项声明可以包含一个 Transform 子句,用于指示一个此前声明的 Transforms 列表。无论单个 transform 成功还是失败,该列表始终会按给定顺序完整执行,也就是从左到右。

在 MATE 配置文件中,Transform 必须在声明任何使用它的项之前声明。

配置 AVPL

Pdu 的配置动作

以下配置 AVPL 处理 PDU 创建和数据提取。

Pdu 声明块头

在抓包的每个帧中,MATE 会按照其配置中声明出现的顺序查找源 proto_name 的 PDU,并会从该帧中创建它能够创建的每一种类型的 Pdu,除非明确指示某种 Pdu 类型是该帧中最后要查找的类型。如果对给定类型这样指示,MATE 会提取它在该帧中找到的该类型以及此前声明类型的所有 Pdu,但不会提取后续声明的类型。

Pdu 的完整声明如下所示;各个子句的强制顺序如图所示。

text
 Pdu name Proto proto_name Transport proto1[/proto2/proto3[/...]]] { Payload proto; //optional, no default value Extract attribute From proto.field ; //may occur multiple times, at least once Transform (transform1[, transform2[, ...]]); //optional Criteria [{Accept|Reject}] [{Strict|Every|Loose} match_avpl]; DropUnassigned {true|false}; //optional, default=false DiscardPduData {true|false}; //optional, default=false LastExtracted {true|false}; //optional, default=false };

Pdu 名称

名称是 Pdu 声明的必需属性。它可以任意选择,但每个名称在 MATE 配置中只能使用一次,不论它用于哪一类项。该名称用于区分不同类型的 Pdus、Gops 和 Gogs。该名称也会作为 MATE 创建的、与此类 Pdu 相关的可过滤字段名的一部分。

不过,多个 Pdu 声明可以共享同一个名称。在这种情况下,只要每个源 PDU 匹配它们的 Proto、Transport 和 Payload 子句,它们都会从该源 PDU 创建出来,而它们声明的主体可以彼此完全不同。结合 Accept(或 Reject)子句,当需要根据其他源字段的内容(或仅仅是存在性)从不同源字段集合构建 Pdu 的 AVPL 时,此功能很有用。

Proto 和 Transport 子句

帧中协议 proto_name PDU 的每个实例都会生成一个 Pdu,其中包含从 proto_name 范围内和/或 Transport 列表指定的底层协议范围内字段提取的 AVP。这是 Pdu 声明的必需属性。proto_name 是 Wireshark 显示过滤器中使用的协议名称。

Pdu 的 Proto,以及由 / 分隔的协议 Transport 列表,会告诉 MATE 帧中的哪些字段可以进入 Pdu 的 AVPL。为了让 MATE 从帧的协议树中提取一个属性,该字段在帧的十六进制显示中所代表的区域必须位于 Proto 或其相关 Transports 的区域内。Transports 会按照给定顺序,从协议区域向后移动来选择。

Proto http Transport tcp/ip 的行为符合你的预期——它选择当前 http 范围之前最近的 tcp 范围,以及该 tcp 范围之前最近的 ip 范围。如果在最近的 ip 范围之前还有另一个 ip 范围(例如在 IP 隧道情况下),那个范围不会被选中。Transport tcp/ip/ip 从“逻辑上”应当也选择封装 IP 头,但目前还不能工作。

一旦我们选择了 Proto 和 Transport 范围,MATE 就会获取属于这些范围的协议字段,而这些字段的提取是在该 Pdu 类型的 Extract 子句中声明的。Transport 列表也是必需的;如果你实际上不想使用任何传输协议,请使用 Transport mate。(这在 0.10.9 之前不能工作。)

Payload 子句

除了 Pdu 的 Proto 及其 Transport 协议之外,还有一个 Payload 属性,用于告诉 MATE 应从 Proto 的哪些 payload 范围中提取帧字段到 Pdu 中。为了从帧的树中提取一个属性,该字段在十六进制显示中高亮的区域必须位于 Proto 相关 payload 的区域内。Payloads 会按照给定顺序,从协议区域向前移动来选择。Proto http Transport tcp/ip Payload mmse 会选择当前 http 范围之后的第一个 mmse 范围。一旦我们选择了 Payload 范围,MATE 就会获取属于这些范围的协议字段,而这些字段的提取是在该 Pdu 类型的 Extract 子句中声明的。

Extract 子句

每个 Extract 子句都会告诉 MATE 要将哪个协议字段值提取为 AVP 值,以及要使用什么字符串作为 AVP 名称。协议字段通过 Wireshark 显示过滤器中使用的名称来引用。如果帧中有多个这样的协议字段,则满足上述条件的每个实例都会被提取到自己的 AVP 中。AVP 名称可以任意选择,但为了在分析后续阶段匹配原本来自不同 Pdu 的值(例如 DNS 查询中的 hostname 和 HTTP GET 请求中的 hostname),必须为它们分配相同的 AVP 名称,并且 dissector 必须以相同格式提供字段值(但情况并不总是如此)。

Transform 子句

Transform 子句指定一个此前声明的 Transforms 列表,在所有协议字段都被提取到 Pdu 的 AVPL 后对其执行。该列表始终从左到右完整执行。相反,每个单独 Transform 内的 Match 子句列表只执行到第一个匹配成功为止。

Criteria 子句

此子句告诉 MATE 是否将该 Pdu 用于分析。它指定一个 match AVPL、一个 AVPL 匹配类型(Strict、Every 或 Loose),以及在匹配成功时要执行的动作(Accept 或 Reject)。一旦每个属性都被提取并且可能的 transform 列表已被执行,如果存在 Criteria 子句,则会将 Pdu 的 AVPL 与 match AVPL 进行匹配;如果匹配成功,则执行指定动作,即接受或拒绝该 Pdu。如果省略相应关键字,默认行为分别为 Strict 和 Accept。因此,如果省略该子句,则接受所有 Pdu。

DropUnassigned 子句

如果设置为 TRUE,当 MATE 无法将 Pdu 分配给 Gop 时,会销毁该 Pdu。如果设置为 FALSE(未给出时的默认值),MATE 会保留它们。

DiscardPduData 子句

如果设置为 TRUE,MATE 会在分析 Pdu 的 AVPL 并最终从中提取一些 AVP 到 Gop 的 AVPL 后删除该 Pdu 的 AVPL。这对于节省内存很有用(MATE 会使用大量内存)。如果设置为 FALSE(未给出时的默认值),MATE 会保留 Pdu 属性。

LastExtracted 子句

如果设置为 FALSE(未给出时的默认值),MATE 会继续在该帧中查找其他类型的 Pdu。如果设置为 TRUE,它不会尝试从当前帧创建其他类型的 Pdu,但仍会继续尝试当前类型。

Gop 的配置动作

Gop 声明块头

声明一个 Gop 类型及其预匹配候选 key。

text
 Gop name On pduname Match key { Start match_avpl; // optional Stop match_avpl; // optional Extra match_avpl; // optional Transform transform_list; // optional Expiration time; // optional IdleTimeout time; // optional Lifetime time; // optional DropUnassigned [TRUE|FALSE]; //optional ShowTree [NoTree|PduTree|FrameTree|BasicTree]; //optional ShowTimes [TRUE|FALSE]; //optional, default TRUE };

Gop 名称

名称是 Gop 声明的必需属性。它可以任意选择,但每个名称在 MATE 配置中只能使用一次,不论它用于哪一类项。该名称用于区分不同类型的 Pdus、Gops 和 Gogs。该名称也会作为 MATE 创建的、与此类 Gop 相关的可过滤字段名的一部分。

On 子句

此类型的 Gop 应当分组的 Pdus 名称。这是必需项。

Match 子句

定义哪些 AVP 组成 Gop 的 AVPL 的 key 部分(Gop 的 key AVPL,或简称 Gop 的 key)。所有匹配活动 Gop 的 key AVPL 的 Pdu 都会被分配给该 Gop;如果某个 Pdu 包含其属性名列在 Gop 的 key AVPL 中的 AVP,但它们不严格匹配任何活动 Gop 的 key AVPL,则会创建一个新的 Gop(除非给出了 Start 子句)。当 Gop 被创建时,其 key AVPL 的元素会从创建它的 Pdu 复制而来。

Start 子句

如果给出,它会告诉 MATE:除了匹配 Gop 的 key 之外,Pdu 的 AVPL 还必须匹配什么 match_avpl 才能启动一个 Gop。如果未给出,任何 AVPL 匹配 Gop 的 Key AVPL 的 Pdu 都会作为 Gop 的开始。与 match_avpl 匹配的 Pdu AVP 不会自动复制到 Gop 的 AVPL 中。

Stop 子句

如果给出,它会告诉 MATE:除了匹配 Gop 的 key 之外,Pdu 的 AVPL 还必须匹配什么 match_avpl 才能停止一个 Gop。如果省略,Gop 会被“自动停止”——也就是说,Gop 在创建后立即被标记为已停止。与 match_avpl 匹配的 Pdu AVP 不会自动复制到 Gop 的 AVPL 中。

Extra 子句

如果给出,会告诉 MATE 除了 Gop 的 key 之外,还要将 Pdu 的 AVPL 中哪些 AVP 复制到 Gop 的 AVPL 中。

Transform 子句

Transform 子句指定一个此前声明的 Transforms 列表,在由 key AVPL 和 Extra 子句的 match_avpl 指定的、来自每个新 Pdu 的 AVP 被合并到 Gop 的 AVPL 之后,对该 AVPL 执行。该列表始终从左到右完整执行。相反,每个单独 Transform 内的 Match 子句列表只执行到第一个匹配成功为止。

Expiration 子句

Gop 被 Stopped 后的一个(浮点)秒数,在此期间,进一步匹配已 Stopped Gop 的 key 但不匹配 Start 条件的 Pdu 仍会被分配给该 Gop。默认值零的实际含义是无穷大,因为它会禁用此计时器,因此所有匹配已 Stopped Gop 的 key 的 Pdu 都会被分配给该 Gop,除非它们匹配 Start 条件。

IdleTimeout 子句

从分配给该 Gop 的最后一个 Pdu 起经过的一个(浮点)秒数,超过该时间后该 Gop 将被视为已释放。默认值零的实际含义是无穷大,因为它会禁用此计时器,因此即使没有 Pdu 到达,该 Gop 也不会被释放——除非 Lifetime 计时器过期。

Lifetime 子句

Gop Start 后的一个(浮点)秒数,超过该时间后,无论其他情况如何,该 Gop 都会被视为已释放。默认值零的实际含义是无穷大。

DropUnassigned 子句

是否丢弃尚未分配给任何 Gog 的 Gop。如果为 TRUE,Gop 会在创建后立即被丢弃。如果为 FALSE(默认值),未分配的 Gop 会被保留。将其设置为 TRUE 有助于节省内存并加快过滤速度。

TreeMode 子句

控制 Gop 的 Pdus 子树显示:

NoTree:完全抑制树的显示

PduTree:显示树,并按 Pdu Id 显示 Pdus

FrameTree:显示树,并按 Pdus 所在的帧号显示 Pdus

BasicTree:需要研究

ShowTimes 子句

是否显示 Gop 的 times 子树。如果为 TRUE(默认值),带有计时器的子树会添加到 Gop 的树中。如果为 FALSE,则抑制该子树。

Gog 的配置动作

Gop 声明块头

声明一个 Gog 类型及其预匹配候选 key。

text
 Gog name { Member gopname (key); // mandatory, at least one Extra match_avpl; // optional Transform transform_list; // optional Expiration time; // optional, default 2.0 GopTree [NoTree|PduTree|FrameTree|BasicTree]; // optional ShowTimes [TRUE|FALSE]; // optional, default TRUE };

Gop 名称

名称是 Gog 声明的必需属性。它可以任意选择,但每个名称在 MATE 配置中只能使用一次,不论它用于哪一类项。该名称用于区分不同类型的 Pdus、Gops 和 Gogs。该名称也会作为 MATE 创建的、与此类 Gop 相关的可过滤字段名的一部分。

Member 子句

为每个 Gop 类型 gopname 单独定义 Gog 的 key AVPL。所有 gopname 类型的 Gop,只要其 key AVPL 匹配某个活动 Gog 的相应 key AVPL,都会被分配给该 Gog;如果某个 Gop 包含其属性名列在 Gog 相应 key AVPL 中的 AVP,但它们不严格匹配任何活动 Gog 的 key AVPL,则会创建一个新的 Gog。当 Gog 被创建时,其 key AVPL 的元素会从创建它的 Gop 复制而来。

虽然 key AVPL 是针对每个 Member gopname 分别指定的,但在大多数情况下它们是相同的,因为 Gog 的真正目的就是把由不同类型 Pdu 组成的 Gop 分组在一起。

Extra 子句

如果给出,会告诉 MATE 除了 Gog 的 key 之外,还要从任一 Gop 的 AVPL 中复制哪些 AVP 到 Gog 的 AVPL 中。

Expiration 子句

在分配给某个 Gog 的所有 Gop 都释放后的一个(浮点)秒数,在此期间,匹配任一 session key 的新 Gop 仍应分配给现有 Gog,而不是创建新的 Gog。其值可以从 0.0 到无穷大。默认值为 2.0 秒。

Transform 子句

Transform 子句指定一个此前声明的 Transforms 列表,在由 key AVPL 和 Extra 子句的 match_avpl 指定的、来自每个新 Gop 的 AVP 被合并到 Gog 的 AVPL 之后,对该 AVPL 执行。该列表始终从左到右完整执行。相反,每个单独 Transform 内的 Match 子句列表只执行到第一个匹配成功为止。

TreeMode 子句

控制 Gog 的 Gops 子树显示:

NoTree:完全抑制树的显示

BasicTree:需要研究

FullTree:需要研究

ShowTimes 子句

是否显示 Gog 的 times 子树。如果为 TRUE(默认值),带有计时器的子树会添加到 Gog 的树中。如果为 FALSE,则抑制该子树。

Settings 配置 AVPL

Settings 配置元素用于向 MATE 传递各种运行参数。可能的参数包括

GogExpiration

在分配给某个 gog 的所有 gop 都释放后经过多少秒,匹配任一 session key 的新 gop 应创建新的 gog,而不是分配给先前的 gog。其值可以从 0.0 到无穷大。默认值为 2.0 秒。

DiscardPduData

每个 Pdu 的 AVPL 在处理完成后是否应被删除(节省内存)。它可以是 TRUE 或 FALSE。默认值为 TRUE。如果你的配置不工作,将它设置为 FALSE 可以让你少些头痛。

DiscardUnassignedPdu

如果 Pdu 未分配给任何 Gop,是否应删除。它可以是 TRUE 或 FALSE。默认值为 FALSE。如果未分配的 Pdu 没有用处,将其设置为 TRUE 可节省内存。

DiscardUnassignedGop

如果 GoP 未分配给任何 session,是否应删除。它可以是 TRUE 或 FALSE。默认值为 FALSE。将其设置为 TRUE 可节省内存。

ShowPduTree
ShowGopTimes

调试内容

以下设置用于调试 MATE 及其配置。所有级别都是从 0(只打印错误)到 9(用垃圾信息淹没我)的整数,默认值为 0。

Debug 声明块头

text
 Debug { Filename "path/name"; //optional, no default value Level [0-9]; //optional, generic debug level Pdu Level [0-9]; //optional, specific debug level for Pdu handling Gop Level [0-9]; //optional, specific debug level for Gop handling Gog Level [0-9]; //optional, specific debug level for Gog handling };

Filename 子句

path/name 是要写入调试输出的文件的完整路径。不存在的文件会被创建;每次打开抓包文件时,已有文件都会被覆盖。如果缺少该语句,调试消息会写入控制台,这意味着它们在 Windows 上不可见。

Level 子句

设置通用调试消息的调试级别。它是从 0(只打印错误)到 9(用垃圾信息淹没我)的整数。

Pdu Level 子句

设置关于 Pdu 创建的消息的调试级别。它是从 0(只打印错误)到 9(用垃圾信息淹没我)的整数。

Gop Level 子句

设置关于 Pdu 分析(即它们如何归入 GoPs)的消息的调试级别。它是从 0(只打印错误)到 9(用垃圾信息淹没我)的整数。

Gog Level 子句

设置关于 GoP 分析(即它们如何归入 GoGs)的消息的调试级别。它是从 0(只打印错误)到 9(用垃圾信息淹没我)的整数。

Settings 示例

Action=Settings; SessionExpiration=3.5; DiscardPduData=FALSE;

Action=Include

会将一个文件包含到配置中。

text
 Action=Include; {Filename=filename;|Lib=libname;}

Filename

要包含的文件的 filename。如果它不以 / 开头,则会在当前路径中查找该文件。

Lib

要包含的 lib 配置的名称。会在 wiresharks_dir/matelib 中查找 libname.mate。

Include 示例

Action=Include; Filename=rtsp.mate; 这会将名为 "rtsp.mate" 的文件包含到当前配置中。

Imported from https://wiki.wireshark.org/Mate/Reference on 2020-08-11 23:16:35 UTC

相关 Wireshark Wiki 页面

网络分析技术档案