эвристический диссектор wireshark декодирует как часть пакета - PullRequest
0 голосов
/ 04 апреля 2019

Я написал диссектор ixia lua. У меня такая же проблема с другим подобным диссектором.

Да, я знаю, что диссектор уже написан на c, но он не работает "из коробки", по крайней мере, не для моего следа - и я также попробовал обходной путь, предложенный для "Фиксированной длины трейлера Ethernet", до 19. Возможно не работает, потому что мой пакет туннелирован, поэтому у меня есть 2 уровня Ethernet.

Мне удалось разобрать трейлер ixia.

Моя проблема в том, что мой анализатор анализирует eth_trailer crc

С добавленным кодом 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")

ethernet trailer crc before ixia

В обычном пакете это выглядит следующим образом:

enter image description here

Вот полный упрощенный код, показывающий проблему:

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

...