2016-07-10 2 views
0

У меня возникли проблемы с анализом 64-битного шестнадцатеричного кода и из того, что я читаю, для этого используется ProtoField.uint64.Декодирование декодера Wireshark 64 бит hex

Я вижу это декодирование красиво в Wireshark без protofield, хотя он не работает для 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

Когда я пытаюсь точно то же самое, с той же PCAP использованием ProtoField, я могу видеть мой тип сообщения «ПУСТЯКИ» в Wireshark, но ничего не декодируется в поддереве

-- 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) 

Wireshark not dissecting msgs

Пожалуйста, помогите!

ответ

0

Вам необходимо назначить trivial_proto.fields на номер F, а не наоборот.

Если вы обратитесь к fpm.lua скрипт, который доступен на вики-странице Wireshark Lua/Examples, вы увидите, что вам нужно сделать что-то вроде:

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)) 
Смежные вопросы