Как я могу сохранить и сохранить настройки протокола диссектора wireshark Lua, когда я закрываю wireshark?

Итак, я написал то, что могу назвать только Потрясающим диссектором. Это не делает многого, но значительно повышает эффективность моей работы.

Моя единственная проблема заключается в том, что я выставил несколько настроек, и они не будут сохраняться при закрытии/запуске wireshark.

I.E. :

Условие: скрипт Lua должен находиться в каталоге плагинов...

  1. Откройте wireshark, выберите Правка > Настройки > Протокол > http.queryparameters...
  2. Установите для параметра Param1 значение «aaa», нажмите «ОК». (Это повлияет на диссекцию должным образом.)
  3. Закройте wireshark, запустите снова, значение снова будет другим.

Мой диссектор:

-- Written by Eitam Doodai
-- trivial postdissector example
-- declare some Fields to be read
full_uri_from_request = Field.new("http.request.full_uri")

-- declare our (pseudo) protocol
http_query_params_proto = Proto("http.query_parameters","HTTP Query Parameters Postdissector")

-- create the fields for our "protocol"
query_param1 = ProtoField.string("http.query_parameters.param1","PARAM1")
query_param2 = ProtoField.string("http.query_parameters.param2","PARAM2")
query_param3 = ProtoField.string("http.query_parameters.param3","PARAM3")

-- add the field to the protocol
http_query_params_proto.fields = {query_param1}
http_query_params_proto.fields = {query_param2}
http_query_params_proto.fields = {query_param3}

-- Add prefs
local p1 = http_query_params_proto.prefs
p1.value1 = Pref.string ("Param1 Value", "123", "Param key to extract")
p1.value2 = Pref.string ("Param2 Value", "456", "Param key to extract")
p1.value3 = Pref.string ("Param3 Value", "789", "Param key to extract")

-- create a function to "postdissect" each frame
function http_query_params_proto.dissector(buffer,pinfo,tree)
        -- obtain the current values the protocol fields
        local full_uri_value = full_uri_from_request()
        if full_uri_value then
                local value = tostring(full_uri_value)
                local subtree = tree:add(http_query_params_proto,"Query Param1")
                local subtree = tree:add(http_query_params_proto,"Query Param2")
                local subtree = tree:add(http_query_params_proto,"Query Param3")
                _, _, query_param1_str = string.find(value,p1.value1 .. "=([^&]+)")
                _, _, query_param2_str = string.find(value,p1.value2 .. "=([^&]+)")
                _, _, query_param3_str = string.find(value,p1.value3 .. "=([^&]+)")
                if query_param1_str then
                        subtree:add(query_param1,query_param1_str)
                end

                if query_param2_str then
                        subtree:add(query_param2,query_param2_str)
                end
                if query_param3_str then
                        subtree:add(query_param3,query_param3_str)
                end
        end
end

-- register our protocol as a postdissector
register_postdissector(http_query_params_proto)

person eitama    schedule 06.03.2014    source источник


Ответы (1)


Если у вас открыта консоль и вы запускаете wireshark из командной строки, после того, как вы измените один из параметров http.query_parameters.param, сохраните его, закроете wireshark и перезапустите его, вы увидите что-то вроде:

...preferences line 1829: No such preference "http.query_parameters.value2" (applying your preferences once should remove this warning)

И это проблема: wireshark распечатывает это для настроек, которые он находит в сохраненном файле настроек, которые он не понимает/не знает.

Изменить: НЕ открывайте ошибку по этому поводу. Проблема в том, что вы использовали уже существующее имя протокола с настройками: "http". Другими словами, поскольку вы в основном называете настройки http.query..., wireshark считает, что они должны принадлежать протокольному модулю http, но настоящий модуль http ничего об этом не знает, поэтому wireshark печатает эту ошибку. в следующий раз, когда он попытается прочитать файл настроек.

Короче говоря: измените имя вашего Proto и полей и т. Д., Чтобы не конфликтовать с реальным именем протокола.

person hadriel    schedule 08.03.2014
comment
Драгоценный, Даже после того, как я задал вопрос, я продолжал пытаться и был готов сдаться - Вы действительно помогли мне. (Я знаю, что этот комментарий бесполезен на уровне SO, но как человек я склонен.) - person eitama; 08.03.2014