如何在Wireshark中向字段添加过滤器

时间:2017-02-08 08:13:17

标签: lua wireshark lua-table wireshark-dissector

我正在尝试在Wireshak中为字段添加过滤器 我的解剖器名称是:“basic”。
它有3个字段 - field1,field2,field3 每个字段都可以有一个字符串值 我希望在Wireshark上我能够按特定字段过滤,例如:basic.field1。 (就像你寻找 tcp.len 一样)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您必须声明字段,将它们分配给协议并在适当时将它们添加到树中。目前有两种不同类型的字符串由Lua支持,类型为ftypes.STRING,用于已知固定长度的字符串,类型为ftypes.STRINGZ,这是一个NULL(零)终止字符串,所以你如何声明字段将取决于它们中的哪两种类型。

不幸的是,尽管documentation列出了ftypes.UINT_STRING作为受支持的类型,但它并不是wslua_proto_field.c的源代码中所见。当字符串前面的长度字段指示字符串的长度(以字节为单位)时,此类型的字符串适用。无论如何,它目前不适用于基于Lua的解剖器。

因此,举例来说,假设您的协议使用UDP / 33333作为其传输和端口号,其3个字段由上述3种类型的字符串组成,即:

  • field1:一个12字节的固定长度字符串。
  • field2:任意长度的以NULL结尾的字符串。
  • field3:以big-endian(网络)字节顺序开头的2字节长度字段的计数字符串。

鉴于这些假设,以下内容将剖析数据包:

-- Protocol
local p_basic = Proto("basic", "Basic Protocol")

-- Fields
local f_basic_field1 = ProtoField.string("basic.field1", "Field1")
local f_basic_field2 = ProtoField.stringz("basic.field2", "Field2")
local f_basic_field3 = ProtoField.string("basic.field3", "Field3")

p_basic.fields = { f_basic_field1, f_basic_field2, f_basic_field3 }

-- Dissection
function p_basic.dissector(buf, pinfo, tree)
    local basic_tree = tree:add(p_basic, buf(0,-1))

    pinfo.cols.protocol:set("BASIC")

    basic_tree:add(f_basic_field1, buf(0, 12))

    local strz = buf(12):stringz()
    local field2_len = string.len(strz) + 1
    basic_tree:add(f_basic_field2, buf(12, field2_len))

    local field3_len = buf:range(12 + field2_len, 2):uint()
    basic_tree:add(f_basic_field3, buf(12 + field2_len + 2, field3_len))
end

-- Registration
local udp_table = DissectorTable.get("udp.port")
udp_table:add(33333, p_basic)

如果要对此进行测试,请先将上述lua代码保存到个人插件目录(通过Help -> About Wireshark -> Folders -> Personal Plugins找到)中的basic.lua等文件中。然后,您可以使用以下十六进制字节来测试它:

0000  00 0e b6 00 00 02 00 0e b6 00 00 01 08 00 45 00
0010  00 37 00 00 40 00 40 11 b5 ea c0 00 02 65 c0 00
0020  02 66 82 35 82 35 00 23 22 32 48 65 6c 6c 6f 20
0030  77 6f 72 6c 64 21 48 69 20 74 68 65 72 65 00 00
0040  04 42 79 65 21

将这些字节保存到文本文件中,例如basic.txt。启动Wireshark并通过File -> Import from Hex Dump... -> Filename:basic.txt -> OK导入文件。你应该看到3个字段被解析为"基本协议" 的一部分。

有关Lua解剖器的进一步帮助,您可能需要参考以下一项或多项: