--[[
使用方法:
将脚本放在Wireshark根目录, 并修改根目录下的init.lua
在文件尾增加
dofile(DATA_DIR.."myProto.lua")
--]]
    
do
    --[[
    创建一个自定义协议myProtocol
    第一个参数是协议名称会体现在过滤器中
    第二个参数是协议的描述信息,无关紧要
    --]]
    local myProtocol = Proto("LocaPacket", "桢数据包")
    
    --协议端口号
    local hb_port = 9930

    --将字段添加到协议中
    local proto_foo = myProtocol.fields

    --协议字段, 顺序不重要, 只是定义各个字段的显示方式
    proto_foo.magic = ProtoField.bytes("Magic", "Magic", base.SPACE)
    proto_foo.magic2 = ProtoField.string("Magic2", "Magic2")
    proto_foo.data_len = ProtoField.uint16("DATA_LEN", "DataLen", base.HEX)
    proto_foo.BaseStationId = ProtoField.uint64("BaseStationId", "BaseStationId", base.HEX)
    proto_foo.TagId = ProtoField.uint64("TagId", "TagId", base.HEX)
    proto_foo.TimeStamp = ProtoField.uint64("TimeStamp", "TimeStamp", base.HEX)
    proto_foo.SignalLv = ProtoField.float("SignalLv", "SignalLv")
    
    --[[
    下面定义myProtocol解析器的主函数,这个函数由wireshark调用
    第一个参数是Tvb类型,表示的是需要此解析器解析的数据,如UDP协议的数据部分
    第二个参数是Pinfo类型,是协议解析树上的信息,即Packet List显示部分
    第三个参数是TreeItem类型,表示上一级解析树,即Packet Details显示部分
    --]]
    function myProtocol.dissector(buffer, pinfo, tree)
        --解析部分
        pinfo.cols.protocol:set("UDP")
        local len = buffer:len()
        local subtree = tree:add(myProtocol, buffer(0, len), "LocaFrame")
        local offset = 0
        subtree:add(proto_foo.magic, buffer(offset, 4))
        offset=offset+4
        subtree:add_le(proto_foo.data_len, buffer(offset, 2))
        offset=offset+4
        subtree:add_le(proto_foo.BaseStationId, buffer(offset, 8))
        offset=offset+8
        subtree:add_le(proto_foo.TagId, buffer(offset, 8))
        offset=offset+8
        offset=offset+4
        subtree:add_le(proto_foo.TimeStamp, buffer(offset, 8))
        offset=offset+8
        offset=offset+4
        
        subtree:add_le(proto_foo.Signal, buffer(offset, 4))
        offset=offset+4
        
    end

    --向wireshark注册解析器,具体哪个端口上处理解析
    local udpTable = DissectorTable.get("udp.port")
    udpTable:add(hb_port, myProtocol)
end

转载请注明转自: 听风 , 本文固定链接: WireShark 自定义协议解析脚本