#lua #wireshark #wireshark-dissector
#lua #wireshark #wireshark-разделитель
Вопрос:
Я написал разделитель ixia lua. У меня такая же проблема с другим подобным разделителем.
Да, я знаю, что диссектор уже написан на c, но он не работает «из коробки», по крайней мере, не для моей трассировки — и я также попробовал обходной путь, предложенный для «Фиксированной длины трейлера ethernet» до 19. Возможно, не сработало, потому что мой пакет туннелирован, поэтому у меня есть 2 уровня ethernet.
Мне удалось проанализировать трейлер ixia.
Моя проблема в том, что crc eth_trailer анализируется моим разделителем
С добавленным кодом crc теперь отображается перед уровнем ixia, вместо этого под деревом уровня ethernet. Есть ли возможность отобразить crc на уровне ethernet, как для пакета без ixia?
if offset_ixia == 4 then
local subtree = tree:add(ixia_trailer_proto, buffer(0,offset_ixia),"eth.trailer")
end
local subtree = tree:add(ixia_trailer_proto, buffer(offset_ixia,length-offset_ixia),"Ixia trailer")
В обычном пакете это выглядит следующим образом:
Вот полный упрощенный код, показывающий проблему:
ixia_trailer_proto = Proto("ixia_trailer","Ixia-lua Trailer")
-- Header fields
source = ProtoField.uint8("ixia_trailer_proto.source" , "Source" , base.HEX)
ixia_trailer_proto.fields = {source}
offset_ixia = 0
-- create a function to dissect it
local function is_ixia_trailer(buffer,pinfo,tree)
local length = buffer:len()
--eth ip
if length < 15 then return false end
if length == 15 then
type_offset = 11
elseif length == 19 then -- 15 crc size
type_offset = 15
offset_ixia = 4
end
local type = buffer( type_offset , 2):uint()
if type == 0xaf12 then
ixia_trailer_proto.dissector(buffer, pinfo, tree)
return true
end
return false
end
function ixia_trailer_proto.dissector(buffer, pinfo, tree)
length = buffer:len()
if offset_ixia == 4 then
local subtree = tree:add(ixia_trailer_proto, buffer(0,offset_ixia),"eth.trailer")
end
local subtree = tree:add(ixia_trailer_proto, buffer(offset_ixia,length-offset_ixia),"Ixia trailer")
subtree:add(source, buffer(offset_ixia 0,1))
end
ixia_trailer_proto:register_heuristic("eth.trailer", is_ixia_trailer)
Вот пример файла pcap с трейлером https://transfernow.net/019rp7t214kv
Комментарии:
1. Можете ли вы предоставить общий доступ к файлу захвата где-нибудь?
2. Единственный способ, который я могу придумать, чтобы сделать эту работу надежной, — запросить новый тип заголовка канального уровня, который выглядит как фрейм Ethernet, но с дополнительными фиксированными 15 байтами в конце для трейлера Ixia. См tcpdump.org/linktypes.html . Явный тип канального уровня мог бы позволить передавать все, кроме последних 15 байт, в диссектор Ethernet, чтобы он должным образом анализировал FCS, а затем после этого конечные 15 байт могли бы передаваться в диссектор Ixia trailer. Я не знаю, может быть, есть другой способ выполнить то, что вам нужно, но я могу придумать что угодно.