Грешка на Wireshark Dissector в Lua: дървовиден елемент ProtoField/Protocol манипулатор е невалиден

Като цяло съм нов в Lua и това е първият ми опит да напиша дисектор на wireshark.
Искам да анализирам SSH без шифър чрез Lua скрипт. Пиша скрипт за откриване на дължината на пакета и дължината на подложката за първата стъпка.

Ето моят скрипт:

do
    local p_test = Proto("test","Test.");

    local f_packet_length = ProtoField.uint32("packet_length")
    local f_padding_length = ProtoField.uint8("padding_length")


    p_test.fields = {
        f_packet_length,
        f_padding_length
    }

    function p_test.dissector(buf,pkt,root)
        local offset = 0
        local buf_len = buf:len()

        local t = root:add(p_test, buf:range(offset))

        t:add(f_packet_length,buf:range(offset,4))
        offset = offset+4
        t:add(f_padding_length,buf:range(offset,1))
        offset = offset+1

    end

    local tcp_table = DissectorTable.get("tcp.port")

    tcp_table:add(22,p_test)
end

След като пусна кода през Evalutate Lua и приложих тестовия филтър, установявам, че има грешка в подробностите за пакета:

Lua Error: [string "do..."]:19: Tree item ProtoField/Protocol handle is invalid (ProtoField/Proto not registered?)

Ред 19 съответства на ред t:add(f_packet_length....

Може ли някой да помогне с обяснението на тази грешка?
Благодаря предварително.


person user3656207    schedule 11.08.2014    source източник


Отговори (1)


Вашият код по-горе ще работи добре, ако е в истински Lua скрипт за Wireshark... или като е във файл .lua в директорията на личните добавки, или като е зареден с превключвателя на командния ред "-X lua_script:<filename>".

Но не можете да регистрирате нов протокол в прозореца tools->evaluate, защото тогава е твърде късно да регистрирате нов протокол (или нови полета). За съжаление грешката, докладвана от Wireshark, не е ясна за това, защото работи наполовина, но всъщност не работи и не може да работи.

Проблемът е, че новата регистрация на протокол се случва на две фази вътрешно: първата фаза е, когато Lua скриптовете се зареждат и изпълняват, което добавя протокола и полетата към вътрешна временна таблица и след това, след като всички lua скриптове се заредят, втората фаза има нови протоколи и полета, преместени от временната таблица в техните окончателни таблици по време на изпълнение и регистрирани, след което wireshark завършва зареждането и виждате GUI. Тази втора фаза се случва веднъж и само веднъж, когато Wireshark стартира за първи път. Но стартирането на прозореца tools->evaluate се случва след всичко това, така че е твърде късно.

person hadriel    schedule 12.08.2014