Данные Wireshark как ASCII - PullRequest
       19

Данные Wireshark как ASCII

1 голос
/ 05 июня 2019

Я опрашиваю удаленный осциллограф, и ответ "почти" чистый ASCII:

image_packet

«Почти», потому что 4-байтовый заголовок 80 00 00 15 (15 - длина сообщения ASCII, в данном случае 21 байт) не позволяет мне декодировать полезную нагрузку как ASCII в столбце Данные (ни когда установить Custom/data.data или Custom/data.text):

image_column_appearance

Edit > Preferences > Protocols > Data уже установлен как Show data as text

Я хотел бы прочитать текст ASCII, как в Follow TCP Stream, где он правильно декодирован и недопустимые коды ASCII изменены на .:

enter image description here

Есть ли способ удалить первые 4 байта без написания диссектора? Я не знаю Lua и не знаю, как написать диссектор: 10.3. Пример: Dissector, написанный на Lua , намного выше моего понимания. Любой указатель на опубликованное решение, которое я могу легко адаптировать, приветствуется.

Спасибо

1 Ответ

1 голос
/ 06 июня 2019

После Учебное пособие MikaS (очень просто и хорошо сделано!) Я написал этот диссектор LUA:

    yokogawa_protocol = Proto("YokogawaWT3000",  "Yokogawa WT3000 Protocol")

    message_header0 = ProtoField.int32("yokogawa_protocol.message_header0", "messageHeader0", base.DEC)
    message_header1 = ProtoField.int32("yokogawa_protocol.message_header1", "messageHeader1", base.DEC)
    message_header2 = ProtoField.int32("yokogawa_protocol.message_header2", "messageHeader2", base.DEC)
    message_length = ProtoField.int32("yokogawa_protocol.message_length", "messageLength", base.DEC)
    message_ascii  = ProtoField.string("yokogawa_protocol.message_ascii", "messageAscii", base.ASCII)

    yokogawa_protocol.fields = { message_header0, message_header1, message_header2, message_length, message_ascii }

    function yokogawa_protocol.dissector(buffer, pinfo, tree)
      length = buffer:len()
      if length == 0 then return end

      pinfo.cols.protocol = yokogawa_protocol.name

      local subtree = tree:add(yokogawa_protocol, buffer(), "Yokogawa WT3000 Protocol Data")

      subtree:add(message_header0, buffer(0,1)) -- fixed h80
      subtree:add(message_header1, buffer(1,1)) -- fixed h00
      subtree:add(message_header2, buffer(2,1)) -- fixed h00
      subtree:add(message_length, buffer(3,1))  -- ascii length
      subtree:add(message_ascii, buffer(4, length-4)) -- ascii text
    end

    local tcp_port = DissectorTable.get("tcp.port")
    tcp_port:add(10001, yokogawa_protocol)

Щелкните правой кнопкой мыши на messageAscii, затем"Apply as Column", дайте мне посмотреть декодированное значение для каждого сообщения в новом столбце.

Спасибо всем

...