Wireshark Dissector: IP Dissector не распознает мой протокол

Я разрабатываю диссектор / протокол как надстройку над сетевым уровнем, чтобы диссектор IP анализировал все IP-заголовки и смотрел на поле «протокол», чтобы передать полезную нагрузку моему протоколу.
скажем номер протокола составляет «254».

Что нужно сделать, чтобы IP-диссектор передавал полезные данные моему протоколу?

РЕДАКТИРОВАТЬ:

мой файл packet-temp.c содержит:

#include "config.h"

#include <epan/packet.h>


#define IP_PROTO_TEMP 254
static int proto_temp = -1;


static void dissect_temp(tvbuff_t *tvb, packet_info *pinfo, proto_tree     *tree)
{
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "TEMP");
    /* Clear out stuff in the info column */
    col_clear(pinfo->cinfo, COL_INFO);
 }

 void proto_register_temp(void)
 {
     proto_temp = proto_register_protocol (
               "TEMP Protocol", /* name       */
               "TEMP",      /* short name */
               "temp"       /* abbrev     */
               );
  }



 void proto_reg_handoff_temp(void)
{
     static dissector_handle_t temp_handle;

     temp_handle = create_dissector_handle(dissect_temp, proto_temp);
     dissector_add_uint("ip.proto", IP_PROTO_TEMP , temp_handle);
}

у меня этот файл находится в папке> C: \ Development \ wirehark \ plugins \ temp, так как я пишу его как плагин.

Спасибо.


person Sammee Sharma    schedule 05.06.2015    source источник


Ответы (1)


Ваш диссектор должен зарегистрировать себя в таблице диссектора "ip.proto" с ключом 254, то есть что-то вроде:

proto_my_protocol = proto_register_protocol("My Protocol", "MYP", "myp");
my_handle = new_create_dissector_handle(dissect_my_protocol, proto_my_protocol);
dissector_add_uint("ip.proto", 254, my_handle);

(вы, вероятно, уже делаете что-то из вышеперечисленного, например, вызов proto_register_protocol()). Если ваш диссектор не является протоколом «нового стиля», принимая дополнительный аргумент «данные» и возвращая int, используйте create_dissector_handle() вместо new_create_dissector_handle().

person Community    schedule 05.06.2015
comment
Спасибо за ответ @GuyHarris. Так и не смог прописать протокол. Я видел файл ipproto.c, но не мог видеть номер своего протокола (254) в нем. Поскольку я пишу свой диссектор как плагин, это не влияет, верно? - person Sammee Sharma; 06.06.2015
comment
сэр, я приложил к вопросу файл packet-temp.c. пожалуйста, взгляните на это и подскажите, где я ошибаюсь? благодаря. - person Sammee Sharma; 06.06.2015
comment
Вы ошибаетесь, полагая, что ip.proto пишется как ip.port. :-) Исправьте эту ошибку, т.е. используйте dissector_add_uint("ip.proto", IP_PROTO_TEMP , temp_handle);, а не dissector_add_uint("ip.port", IP_PROTO_TEMP , temp_handle);. - person ; 06.06.2015
comment
Я видел файл ipproto.c, но не мог видеть номер своего протокола (254) в нем. Этого не должно быть; Wireshark позволяет добавлять, например, новые протоколы, работающие поверх IP без необходимости изменять сам исходный код Wireshark. - person ; 06.06.2015
comment
сэр, @GuyHarris, с этой модификацией я вижу этот номер протокола в (wirehark - ›Internals -› Dissector table - ›Integer tables -› ip.proto), но его нет в файле ipproto.c. его не должно быть там? - person Sammee Sharma; 07.06.2015
comment
Как я уже сказал, этого не должно быть. Все, что это добавление, - это изменить способ отображения диссекторами IPv4 и IPv6 поля заголовка протокола / следующего. - person ; 07.06.2015