wireshark lua插件不按端口解析,解析任何字段

# 常规通用lua插件写法

-- 初始化插件
local myproto = Proto("myproto", "My Protocol")

-- 创建字段对象
local fields = myproto.fields
local field1 = fields.field1
local field2 = fields.field2

-- 解析函数
function myproto.dissector(buffer, pinfo, tree)
    -- 创建协议树节点
    local subtree = tree:add(myproto, buffer())

    -- 解析字段值
    local value1 = buffer(0, 2):uint()
    local value2 = buffer(2, 2):uint()

    -- 在协议树节点上添加字段
    subtree:add(field1, buffer(0, 2)):append_text(" (Value 1: " .. value1 .. ")")
    subtree:add(field2, buffer(2, 2)):append_text(" (Value 2: " .. value2 .. ")")
end

-- 注册插件
local tcp_port = DissectorTable.get("tcp.port")
tcp_port:add(1234, myproto)

以上定义一个名为myproto的解剖器(Dissector),并且将myprot注册到解剖器表(DissectorTable)中,通过端口进行关联,但是如果协议不指定端口的时候,解析起来就需要手动指定协议,比较麻烦。

# 以下是获取所有frame字节buffer的lua插件写法

-- 自定义协议
my_udppayload=Proto("my_udp_payload","my_udp_payload")
function my_udppayload.dissector(buffer, pkt, tree)
    -- 这里的buffer是整个frame的字节
    local data = tostring(buffer:bytes())
    -- 搜索字节序列
    -- 定位http协议的get方法
    local get_pattern = "474554"  -- 搜索get 16进制编码474554
    local start_pos, end_pos = string.find(data, get_pattern)
    -- 通过字节搜索,定位http协议结尾的\r\n\r\n
    local http_end="0D0A0D0A"
    local start_pos1, end_pos1 = string.find(data, http_end)
    -- 如果找到了字节序列
    if start_pos ~=  nil then
        if start_pos1 ~= nil then
            netflow_start=tonumber(end_pos1, 10)/2
            print(netflow_start)
            
            print(buffer:len())
            if (netflow_start+86)==buffer:len() then
                -- 自定义解析器,定位到你想要解析的位置
                my_plugin.dissector(buffer(netflow_start,82):tvb(),pkt,tree)
            end
        end
    
    end
end

-- 注册插件 不需要绑定传输层端口
register_postdissector(my_udppayload)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值