2016-07-10 13 views
0

Ich habe Probleme beim Sezieren von 64-Bit-Hex und von dem, was ich lese den Weg dies zu tun ist mit ProtoField.uint64.Wireshark Dissektor Decodierung 64bit hex

Ich kann diese Entschlüsselung schön in Wireshark ohne Protofield sehen, obwohl es nicht funktioniert für uint64.

-- declare our protocol 
trivial_proto = Proto("triviala","trivial Protocol") 

-- create a function to dissect it 
function trivial_proto.dissector(buffer,pinfo,tree) 
    pinfo.cols.protocol = "TRIVIA" 
    local subtree = tree:add(trivial_proto,buffer(),"Trivia Protocol Data") 
    subtree:add(buffer(0,2),"Seq number: " .. buffer(0,2):uint()) 
    subtree:add(buffer(2,4),"Seq number: " .. buffer(2,4):uint()) 
    subtree:add(buffer(6,2),"no messages: " .. buffer(6,2):uint()) 
    --Doesnt work 
    --subtree:add(buffer(8,8),"no messages: " .. buffer(8,8):uint64()) 

end 
-- load the udp.port table 
udp_table = DissectorTable.get("udp.port") 
-- register our protocol to handle udp port 
udp_table:add(20004,trivial_proto) 
udp_table:add(20006,trivial_proto) 
udp_table:add(20021,trivial_proto) 

Wireshark dissecting msgs

Wenn ich versuche, genau das Gleiche, mit der gleichen pcap mit ProtoField, kann ich meinen Nachrichtentyp "TRIVIA" in wireshark aber nichts dekodiert in dem Baum

-- declare our protocol 
trivial_proto = Proto("triviala","Trivia Protocol") 

local F = trivial_proto.fields 

F.f_1 = ProtoField.uint8("triviala.sessnum","Session Number",base.HEX) 
F.f_2 = ProtoField.uint32("triviala.seqnum","Sequence Number",base.HEX) 
F.f_3 = ProtoField.uint8("triviala.nomsgs","Number Mesages",base.HEX) 
F.f_4 = ProtoField.uint64("triviala.time","Date Time",base.HEX) 


-- create a function to dissect it 
function trivial_proto.dissector(buffer,pinfo,tree) 
    pinfo.cols.protocol = "TRIVIA" 
    local subtree = tree:add(trivial_proto,buffer(),"Trivia Protocol Data") 
    subtree:add(F.f_1, buffer(0,2)) 
    subtree:add(F.f_2, buffer(2,4)) 
    subtree:add(F.f_3, buffer(6,2)) 
    --subtree:add(F.f_4, buffer(8,8)) 
end 
-- load the udp.port table 
udp_table = DissectorTable.get("udp.port") 
-- register our protocol to handle udp port 
udp_table:add(20004,trivial_proto) 
udp_table:add(20006,trivial_proto) 
udp_table:add(20021,trivial_proto) 
sehen

Wireshark not dissecting msgs

Bitte helfen!

Antwort

0

Sie müssen trivial_proto.fieldsF zuweisen, nicht umgekehrt.

Wenn Sie das fpm.lua Skript verweisen, die auf der Wireshark Lua/Examples Wiki-Seite verfügbar ist, werden Sie sehen, dass Sie so etwas wie tun müssen:

local F = 
{ 
    f_1 = ProtoField.uint8("triviala.sessnum","Session Number",base.HEX) 
    f_2 = ProtoField.uint32("triviala.seqnum","Sequence Number",base.HEX) 
    f_3 = ProtoField.uint8("triviala.nomsgs","Number Mesages",base.HEX) 
    f_4 = ProtoField.uint64("triviala.time","Date Time",base.HEX) 
} 

trivial_proto.fields = F 

... 

subtree:add(F.f_1, buffer(0,2)) 
subtree:add(F.f_2, buffer(2,4)) 
subtree:add(F.f_3, buffer(6,2))