本章中的类与方法允许Lua脚本为Wireshark对象创建新的协议;
Proto 协议对象可以有 Pref 偏好设置,可在详细信息视图树中显示的可筛选值的 ProtoField 字段、用于解析新协议的方法等;
可以通过 DissectorTable 将解析方法 (dissection function) 与现有的协议树挂钩,这样,新协议的解析方法就可以被该协议调用,而新的解析器(dissector)本身可以通过检索和调用 Dissector 对象来调用其他已存在的协议解析器;
Proto dissector也可以作为后置解析器(post-dissector),在每个数据帧解析结束时使用,或则作为启发式解析器(heuristic dissector)使用;
11.6.1. Dissector
解析器的一个引用, 用于针对一个数据包或该数据包的一部分调用解析器;
11.6.1.1. Dissector.get(name)
通过名称获取一个解析器;
-
参数
-
name
该解析器的名称;
-
-
返回值
- 如果通过名称检索到了该解析器,则返回其的一个引用,否则返回
nil;
- 如果通过名称检索到了该解析器,则返回其的一个引用,否则返回
11.6.1.2. Dissector.list()
返回一个包含所有已注册 Dissector 名称的 Lua 数组;
ps:该操作开销巨大,应仅用于错误检测;
-
返回值
- 一个含有已注册解析器名称的数组表;
11.6.1.3. dissector:call(tvb, pinfo, tree)
针对给定的数据包或该数据包的一部分调用一个解析器;
-
参数
-
tvb
待解析的缓冲区(即报文内容 );
-
pinfo
该数据包的信息
-
tree
要添加协议项的协议树;
-
-
返回值
-
已解析字节数;
ps: 一些解析器总是返回传入缓冲区的字节数,敬请留意;
-
11.6.1.4. dissector:__call(tvb, pinfo, tree)
针对给定的数据包或该数据包的一部分调用一个解析器;
-
参数
-
tvb
待解析的缓冲区(即报文内容 );
-
pinfo
该数据包的信息
-
tree
要添加协议项的协议树;
-
11.6.1.5. dissector:__tostring()
获取该 Dissector 的 协议短名称;
-
返回值
- 表示该协议短名称的字符串;
11.6.2. DissectorTable
一个具体协议所含有的子解析器(subdissector)表(例如, TCP 的子解析器 http, smtp, sip 就被添加到了表 "tcp.port" 中);
在表中添加更多的解析器, 那样他们就可以出现在“解码为...”( “Decode As…” )对话框中;
11.6.2.1. DissectorTable.new(tablename, [uiname], [type], [base], [proto])
新建一个 DissectorTable 给你的解析器使用;
-
参数
-
tablename
该表的简短名称;
应使用小写字母、点、下划线(e.g., "ansi_map.tele_id" or "udp.port");
-
uiname (可选)
在用户界面中显示的表名称;
默认是 tablename 的值, 但是也可以赋予任何字符串值;
-
type (可选)
ftypes.UINT8,ftypes.UINT16,ftypes.UINT24,ftypes.UINT32, 或者ftypes.STRING.;默认是
ftypes.UINT32; -
base (可选)
base.NONE,base.DEC,base.HEX,base.OCT,base.DEC_HEX,或者base.HEX_DEC;默认是
base.DEC; -
proto (可选)
使用这个
dissector table的 Proto 对象;
-
-
返回值
- 新创建的
dissector table;
- 新创建的
11.6.2.2. DissectorTable.list()
获取一个包含所有 DissectorTable 名称的Lua数组表 - 即, 你可以在 DissectorTable.get() 的第一个参数中使用得到的名称字符串;
ps:该操作开销巨大,应仅在错误检测时使用;
-
返回值
- 包含已注册 DissectorTable 名称的数组表;
11.6.2.3. DissectorTable.heuristic_list()
获取一个包含所有启发式解析器名称的Lua数组表 - 即, 你可以在 Proto:register_heuristic() 的第一个参数中使用得到的名称字符串;
ps:该操作开销巨大,应仅在错误检测时使用;
-
返回值
- 包含已注册启发式解析器(heuristic dissector)名称的数组表;
11.6.3.4. Pref.string(label, default, descr)
创建一个字符串型偏好给 Proto.prefs Lua表;
-
参数
-
label
该偏好的标签 (偏好设置输入的右值文本) ;
-
default
要设置的偏好在Lua中的默认值;
-
descr
对于该偏好的描述;
-
11.6.3.5. Pref.enum(label, default, descr, enum, radio)
创建一个枚举型偏好给 Proto.prefs Lua表;
11.6.3.6. 示例:
local OUTPUT_OFF = 0
local OUTPUT_DEBUG = 1
local OUTPUT_INFO = 2
local OUTPUT_WARN = 3
local OUTPUT_ERROR = 4
local output_tab = {
{ 1, "Off" , OUTPUT_OFF },
{ 2, "Debug" , OUTPUT_DEBUG },
{ 3, "Information" , OUTPUT_INFO },
{ 4, "Warning" , OUTPUT_WARN },
{ 5, "Error" , OUTPUT_ERROR },
}
-- Create enum preference that shows as Combo Box under
-- Foo Protocol's preferences
proto_foo.prefs.outputlevel = Pref.enum(
"Output Level", -- label
OUTPUT_INFO, -- default value
"Verbosity of log output", -- description
output_tab, -- enum table
false -- show as combo box
)
-- Then, we can query the value of the selected preference.
-- This line prints "Output Level: 3" assuming the selected
-- output level is _INFO.
debug( "Output Level: " .. proto_foo.prefs.outputlevel )
-
参数
-
label
该偏好的标签 (偏好设置输入的右值文本) ;
-
default
要设置的偏好在Lua中的默认值;
-
descr
对于该偏好的描述;
-
enum
一个 Lua 的枚举表;
-
radio
Radio button (true) or Combobox (false);
-
11.6.3.7. Pref.range(label, default, descr, max)
创建一个数值区间型偏好给 Proto.prefs Lua表;
-
参数
-
label
该偏好的标签 (偏好设置输入的右值文本) ;
-
default
要设置的偏好在Lua中的默认值;
-
descr
对于该偏好的描述;
-
max
最大值;
-
11.6.3.8. Pref.statictext(label, descr)
创建一个静态文本字符串偏好给 Proto.prefs Lua表;
-
参数
-
label
静态文本;
-
descr
静态文本描述;
-
11.6.4. Prefs
该协议的偏好设置表;
11.6.4.1. prefs:__newindex(name, pref)
新建一个偏好;
-
参数
-
name
该偏好的缩略名;
-
pref
一个有效但是还未赋值的 Pref 对象;
-
-
可能出现的错误
- Unknown Pref type
11.6.4.2. prefs:__index(name)
获取一个偏好设置的值;
11.6.4.3. 示例
-- print the value of Foo's preference named "bar"
debug( "bar = " .. proto_foo.prefs.bar )
-
参数
-
name
该偏好的缩略名;
-
-
返回值
- 该偏好的当前值;
-
可能出现的错误
- Unknown Pref type
11.6.5. Proto
Wireshark中的一个新协议;
这些协议(Protocols) 有好几种用途, 最为主要的一个就是用来解析某个协议,此外它们也可以作为一个用于注册偏好的仿真(dummy) 而用于其它目的;
11.6.5.1. Proto.new(name, desc)
新建一个 Proto 对象;
-
参数
-
name
该协议的名称;
-
desc
关于该协议的一个较长文本描述 (通常是小写);
-
-
返回值
- 一个新建的 Proto 对象;
11.6.5.2. proto:__call(name, desc)
创建一个Proto 对象;
-
参数
-
name
该协议的名称;
-
desc
关于该协议的一个较长文本描述 (通常是小写);
-
-
返回值
- 一个新建的 Proto 对象;
11.6.5.3. proto:register_heuristic(listname, func)
为该 Proto 协议注册一个给定启发式表名(heuristic list name)的启发式解析器方法( heuristic dissector function );
在之后调用该方法时,传入的 func 需要被给定以下参数:
- 一个 Tvb 对象;
- 一个 Pinfo 对象;
- 一个 TreeItem 对象;
如果有效载荷(payload)适用于该方法,则该方法必须返回 true,否则返回false;
该方法应尽可能多地进行验证,以确保有效载荷是为它准备的,然后在该有效载荷是为它准备的情况下才对数据包进行解析(包括设置TreeItem信息等),然后再返回Ture或者False;
从 1.99.1 版本开始,该方法也接受一个 Dissector 对象作为第二个参数, 以允许对一段 function proto.dissector(…) 对象的Lua 代码的重用 。在这种情况下,该 Dissector必须返回一个表示消耗/解析(consumed/parsed)字节数的 Lua 数字: 如果返回0,它将被视为启发式解析的False返回;如果返回一个正数或负数,那么它将被视为启发式的True返回,意味着该数据包正是为这个协议准备的,然后将不再尝试其他启发式解析器;
-
参数
-
listname
该函数的启发式列表名称(e.g., "udp" or "infiniband.payload");
-
func
一个将被调用来进行启发式解析的Lua方法;
-
11.6.5.4. proto.dissector
模式:仅用于检索与赋值(Mode: Retrieve or assign);
该协议的解析器,一个你定义的方法;
之后调用该方法时,以下参数需要被指定:
- 一个 Tvb 对象;
- 一个 Pinfo 对象;
- 一个 TreeItem 对象;
11.6.5.5. proto.prefs
模式:仅用于检索(Mode: Retrieve only);
该解析器的偏好设置;
11.6.5.6. proto.prefs_changed
模式:仅用于赋值(Mode: Assign only);
该解析器的偏好更改例行程序( preferences changed routine), 一个由你定义的Lua方法;
11.6.5.7. proto.init
模式:仅用于赋值(Mode: Assign only);
该解析器的初始化例行程序,一个由你定义的Lua方法;
调用 init 方法不需要传入任何参数;
11.6.5.8. proto.name
模式:仅用于检索(Mode: Retrieve only);
赋予该解析器的名称;
11.6.5.9. proto.description
模式:仅用于检索(Mode: Retrieve only);
赋予对该解析器的描述;
11.6.5.10. proto.fields
模式:仅用于检索与赋值(Mode: Retrieve or assign);
该解析器的 ProtoField 的Lua 表;
11.6.5.11. proto.experts
模式:仅用于检索与赋值(Mode: Retrieve or assign);
该 Proto 的专家信息Lua表;
11.6.6. ProtoExpert
一个协议的专家信息域,在要向解析树中添加项时使用;
11.6.6.1. ProtoExpert.new(abbr, text, group, severity)
新建一个 ProtoExpert 对象,用于协议的专家级信息通知;
-
参数
-
abbr
Filter name of the expert info field (the string that is used in filters).
-
text
该专家域的默认文本;
-
group
专家组(Expert group)类型,可以是:
expert.group.CHECKSUM,expert.group.SEQUENCE,expert.group.RESPONSE_CODE,expert.group.REQUEST_CODE,expert.group.UNDECODED,expert.group.REASSEMBLE,expert.group.MALFORMED,expert.group.DEBUG,expert.group.PROTOCOL,expert.group.SECURITY,expert.group.COMMENTS_GROUP,expert.group.DECRYPTION,expert.group.ASSUMPTIONorexpert.group.DEPRECATED. -
severity
专家程度(Expert severity) 类型,可以是:
expert.severity.COMMENT,expert.severity.CHAT,expert.severity.NOTE,expert.severity.WARN, orexpert.severity.ERROR.
-
-
返回值
- 一个新建的 ProtoExpert 对象;
11.6.6.2. protoexpert:__tostring()
返回一个 ProtoExpert 对象调试信息的字符串;
11.6.7. ProtoField
一个协议字段(Protocol field)(当需要向解析树中添加项时使用);
11.6.7.1. ProtoField.new(name, abbr, type, [valuestring], [base], [mask], [descr])
新建一个ProtoField 对象,给一个协议字段使用;
-
参数
-
name
该字段的实际名称 (将出现在解析树中的字符串);
-
abbr
该字段的过滤名称 (在过滤器中使用的字符串);
-
type
字段类型(Field Type),可以是:
ftypes.BOOLEAN,ftypes.CHAR,ftypes.UINT8,ftypes.UINT16,ftypes.UINT24,ftypes.UINT32,ftypes.UINT64,ftypes.INT8,ftypes.INT16,ftypes.INT24,ftypes.INT32,ftypes.INT64,ftypes.FLOAT,ftypes.DOUBLE,ftypes.ABSOLUTE_TIME,ftypes.RELATIVE_TIME,ftypes.STRING,ftypes.STRINGZ,ftypes.UINT_STRING,ftypes.ETHER,ftypes.BYTES,ftypes.UINT_BYTES,ftypes.IPv4,ftypes.IPv6,ftypes.IPXNET,ftypes.FRAMENUM,ftypes.PCRE,ftypes.GUID,ftypes.OID,ftypes.PROTOCOL,ftypes.REL_OID,ftypes.SYSTEM_ID,ftypes.EUI64orftypes.NONE. -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值相对应的文本的表;如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表;如果字段类型是ftypes.FRAMENUM,则是frametype.NONE、frametype.REQUEST、frametype.RESPONSE、frametype.ACK或frametype.DUP_ACK中的一个。 -
base (可选)
表示方式,可以是:
base.NONE,base.DEC,base.HEX,base.OCT,base.DEC_HEX,base.HEX_DEC,base.UNIT_STRINGorbase.RANGE_STRING. -
mask (可选)
该字段的的位掩码;
-
descr (可选)
对该字段的描述;
-
-
返回值
- 一个新建的 ProtoField 对象;
11.6.7.2. ProtoField.char(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个8比特的 ASCII 字符 ProtoField;
-
参数
-
abbr
该字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
`base.NONE,base.HEX,base.OCTorbase.RANGE_STRING. -
valuestring (可选)
一个包含与数值相对应的文本的表格,如果 base 是
base.RANGE_STRING,则是一个包含与数值相对应的范围字符串值的表格({min, max, "string"}); -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.3. ProtoField.uint8(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个8比特的无符号整型 ProtoField(即, a byte);
-
参数
-
abbr
该字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.HEXorbase.OCT,base.DEC_HEX,base.HEX_DEC,base.UNIT_STRINGorbase.RANGE_STRING. -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.4. ProtoField.uint16(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个16比特的无符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.HEX,base.OCT,base.DEC_HEX,base.HEX_DEC,base.UNIT_STRINGorbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.5. ProtoField.uint24(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个24比特的无符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.HEX,base.OCT,base.DEC_HEX,base.HEX_DEC,base.UNIT_STRING, orbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.6. ProtoField.uint32(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个32比特的无符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.HEX,base.OCT,base.DEC_HEX,base.HEX_DEC,base.UNIT_STRINGorbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.7. ProtoField.uint64(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个64比特的无符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.HEX,base.OCT,base.DEC_HEX,base.HEX_DEC,base.UNIT_STRINGorbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.8. ProtoField.int8(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个8比特的带符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.UNIT_STRING, orbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.9. ProtoField.int16(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个16比特的带符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.UNIT_STRING, orbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.10. ProtoField.int24(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个24比特的带符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.UNIT_STRING, orbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.11. ProtoField.int32(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个32比特的带符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.UNIT_STRING, orbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.12. ProtoField.int64(abbr, [name], [base], [valuestring], [mask], [desc])
创建一个64比特的带符号整型 ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.DEC,base.UNIT_STRING, orbase.RANGE_STRING; -
valuestring (可选)
如果 base 是
base.RANGE_STRING,则是一个包含与数值对应的文本的表,或者是一个包含与数值对应的范围字符串的表({min, max, "string"}),如果 base 是base.UNIT_STRING,则是一个包含数值的单位名称的表; -
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.13. ProtoField.framenum(abbr, [name], [base], [frametype], [mask], [desc])
为帧号创建一个 ProtoField(用于帧之间的超链接);
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
对于 framenum 来说只能是
base.NONE; -
frametype (可选)
可以是:
frametype.NONE,frametype.REQUEST,frametype.RESPONSE,frametype.ACKorframetype.DUP_ACK; -
mask (可选)
该字段的整型掩码,对于 framenum 只能是0;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.14. ProtoField.bool(abbr, [name], [display], [valuestring], [mask], [desc])
创建一个布尔型的True/False 的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
display (可选)
父位域的宽度是多少(NULL-value使用
base.NONE); -
valuestring (可选)
一个包含与数值对应的文本的表;
-
mask (可选)
该字段的整型掩码;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.15. ProtoField.absolute_time(abbr, [name], [base], [desc])
创建一个 Time_t 结构值的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
base (可选)
可以是:
base.LOCAL,base.UTCorbase.DOY_UTC; -
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.16. ProtoField.relative_time(abbr, [name], [desc])
创建一个 Time_t 结构值的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.17. ProtoField.float(abbr, [name], [valuestring], [desc])
创建一个浮点数型的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
valuestring (可选)
一个包含与数值对应的文本的表;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.18. ProtoField.double(abbr, [name], [valuestring], [desc])
创建一个双精度浮点数型的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
valuestring (可选)
一个包含与数值对应的文本的表;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.19. ProtoField.string(abbr, [name], [display], [desc])
创建一个字符串值型的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
display (可选)
可以是:
base.ASCII或base.UNICODE; -
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.20. ProtoField.stringz(abbr, [name], [display], [desc])
创建一个以零结尾的字符串值的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
display (可选)
可以是:
base.ASCII或base.UNICODE; -
valuestring (可选)
一个包含与数值对应的文本的表;
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.21. ProtoField.bytes(abbr, [name], [display], [desc])
为任意数量的字节创建一个ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
display (可选)
可以是:
base.NONE,base.DOT,base.DASH,base.COLONorbase.SPACE; -
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.22. ProtoField.ubytes(abbr, [name], [display], [desc])
为任意数量的无符号字节创建一个ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
display (可选)
可以是:
base.NONE,base.DOT,base.DASH,base.COLONorbase.SPACE; -
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.23. ProtoField.none(abbr, [name], [desc])
创建一个无结构类型的ProtoField;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
display (可选)
可以是:
base.NONE,base.DOT,base.DASH,base.COLONorbase.SPACE; -
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.24. ProtoField.ipv4(abbr, [name], [desc])
创建一个 IPv4地址的 ProtoField (4字节);
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.25. ProtoField.ipv6(abbr, [name], [desc])
创建一个 IPv6地址的 ProtoField (16字节);
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.26. ProtoField.ether(abbr, [name], [desc])
创建一个以太网地址的 ProtoField (6字节);
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.27. ProtoField.guid(abbr, [name], [desc])
为一个全球唯一识别码(Globally Unique IDentifier,GUID)创建一个 ProtoField ;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.28. ProtoField.oid(abbr, [name], [desc])
为一个 ASN.1 Organizational IDentified (OID) 创建一个 ProtoField ;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.29. ProtoField.protocol(abbr, [name], [desc])
为某个子协议创建一个 ProtoField ;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.30. ProtoField.rel_oid(abbr, [name], [desc])
为一个 ASN.1 Relative-OID 创建一个 ProtoField ;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.31. ProtoField.systemid(abbr, [name], [desc])
为一个 OSI System ID 创建一个 ProtoField ;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.32. ProtoField.eui64(abbr, [name], [desc])
为一个 EUI64 创建一个 ProtoField ;
-
参数
-
abbr
字段的缩略名(在过滤器中使用的字符串);
-
name(可选)
该字段的实际名称 (将出现在解析树中的字符串);
-
desc (可选)
对该字段的描述;
-
-
返回值
- 一个 ProtoField 对象,将被添加到设置为 Proto.fields 属性的表中;
11.6.7.33. protofield:__tostring()
返回一个 protofield 的字符串信息 (为调试使用);
11.6.8. Global Functions
11.6.8.1. register_postdissector(proto, [allfields])
让一个 Proto 协议 (带解析方法) 成为一个后置解析器(post-dissector).;
它将在每一个数据帧都被解析后调用;
-
参数
-
proto
要用作后置解析器的协议;
-
allfields(可选)
是否生成所有字段;
ps: 这很影响性能 (默认false)
-
11.6.8.2. dissect_tcp_pdus(tvb, tree, min_header_size, get_len_func, dissect_func, [desegment])
使TCP层为TCP数据段(segment)中的每个PDU调用给定的 Lua方法, 其长度由给定的 get_len_func 方法返回;
这个方法对于基于TCP的协议很有用 ,这些协议要么是固定长度的, 要么有一个最小部分(minimum portion),里面编码了一个表示长度的字段,可以用来识别协议的全长;
对于这样的协议,他们的协议解析器方法可以调用 dissect_tcp_pdus() 方法来更加方便的解析他们协议的消息 (即, 他们的协议数据单元 (PDU));
这个方法不能用于PDU长度没有被固定的最小部分限定的协议,例如HTTP或Telnet;
-
参数
-
tvb
解析PDU的缓存区 ;
-
tree
解析PDU的缓存区 ;
-
min_header_size
PDU中定长部分的字节数(The number of bytes in the fixed-length part of the PDU);
-
get_len_func
一个将被每个 PDU 调用来决定整个 PDU 长度的 Lua 方法;
被调用的方法将被赋予:
(1) 整个 Tvb 的 Tvb 对象(可能被重新组装)
(2) Pinfo 对象
(3) 一个表偏移量的数字,是该 PDU 第一个字节的索引(即,它的第一个头部字节)
-
dissect_func
一个将被每个 PDU 调用来解析 PDU 的 Lua 方法;
被调用的方法将被赋予:
(1) PDU 的 Tvb 对象(可能被重新组装)
(2) Pinfo 对象
(3) TreeItem 对象
这个Lua函数必须返回一个读取/处理的字节数的Lua数字,通常是Tvb:len();
-
desegment (可选)
是否按照 TCP 数据段的边界将 PDUs 重新组装起来(默认为true);
-