wireshark解析自定义协议


lua脚本

wireshark插件有代码固定的格式

do
    -- 定义协议
    local PROTO = Proto('proto', 'Proto')

    -- 定义协议字段
    local field = ProtoField.char("field", "proto field", base.NONE)

    -- 协议绑定字段
    PROTO.fields = {
        field,
    }

    -- 获取源数据
    local data_dis = Dissector.get("data")

    -- 协议解剖函数
    local function proto_dissector(buf, pinfo, root)
        -- 自定义协议dissector
    end

    -- 让wireshark调用的解剖函数
    function PROTO.dissector(buf, pinfo, root)
        if proto_dissector(buf, pinfo, root) then
            -- 自定义解剖函数执行成功
        else
            -- 自定义解剖函数执行失败,让其他底层协议解剖
            data_dis:call(buf, pinfo, root)
        end
    end

    -- 监听端口
    local listen_port = {
        8000,
    }

    -- 获取tcp.port的解剖器
    local dissectors = DissectorTable.get('tcp.port')
    for _, port in ipairs(listen_port) do
        -- 将自定义协议绑定到指定端口的解剖器
        dissectors:add(port, PROTO)
    end
end

实践

参考https://github.com/jzwinck/redis-wireshark
自己实现了一个wireshark-redis

参考文献


文章作者: djaigo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 djaigo !
评论
  目录