diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-08-28 16:06:20 +0200 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-08-28 16:06:20 +0200 |
commit | cef0cbd29a903e023ad5730b98beceb40baa6bf0 (patch) | |
tree | 98248df29ef53756c3d0dab1ca48dcd7b35e5fba /wireshark/nifi.lua | |
parent | bab4ac11a0e5700f267405273b03436423bc5205 (diff) |
more WIP
Diffstat (limited to 'wireshark/nifi.lua')
-rw-r--r-- | wireshark/nifi.lua | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/wireshark/nifi.lua b/wireshark/nifi.lua deleted file mode 100644 index 94a563c..0000000 --- a/wireshark/nifi.lua +++ /dev/null @@ -1,57 +0,0 @@ -local p = Proto("nifi", "Ni-Fi header") -local dt = DissectorTable.new("nifi") - -p.fields.frame_type = ProtoField.uint16("nifi.type", "Frame type", base.DEC, { - [0] = "Normal", -- Used for actual messages, ack packets - [1] = "Announcement", -- TODO: send broadcast??? -}) -p.fields.original = ProtoField.bool("nifi.original", "Original") -- only 0 or 2 -p.fields.gameid = ProtoField.uint16("nifi.gid", "Game ID", base.HEX, { - [0xfffd] = "PictoChat (CMD)", - [0x7dcb] = "PictoChat (ACK)", - [0x5a5a] = "Mario Kart DS (CMD)", - [0x7c02] = "Mario Kart DS (ACK)", -}) -p.fields.magic = ProtoField.bytes("nifi.magic", "Magic") -p.fields.length = ProtoField.uint16("nifi.len", "Remaining message length") - -local melon_type_enum_field = Field.new("melon.type.enum") - -function p.init() - -- register nifi as a subdissector for melon - DissectorTable.get("melon"):add(0, p) -end - -function p.dissector(buffer, pinfo, tree) - local header_size = 12 - - local subtree = tree:add(p, buffer(0, header_size), string.format("%s: %d bytes", p.description, header_size)) - subtree:add_le(p.fields.frame_type, buffer(0x00, 2)) - subtree:add_le(p.fields.original, buffer(0x02, 2)) - local original = buffer(0x02, 2):le_uint() > 0 - - local melon_type = melon_type_enum_field()() - local gameid_buf = buffer(0x04, 4) - local gameid = 0 - if melon_type == 1 then -- CMD - gameid_buf = gameid_buf(2, 2) - elseif melon_type == 3 then -- ACK - gameid_buf = gameid_buf(0, 2) - end - gameid = gameid_buf():le_uint() - subtree:add_le(p.fields.gameid, gameid_buf) - - subtree:add_le(p.fields.magic, buffer(0x08, 2)) -- const 0x1401 - subtree:add_le(p.fields.length, buffer(0x0a, 2)) - local length = buffer(0x0a, 2):le_uint() - - -- pretty wireshark shit - pinfo.cols.protocol = p.name - pinfo.cols.info = string.format("GID %04x %s, %s", gameid, pinfo.cols.info, (original and "Original" or "Resend")) - - -- try to call subdissector for gameid - dt:try(gameid, buffer(header_size, length):tvb(), pinfo, tree) - - return header_size -end - |