Не удается увидеть плагин, скомпилированный в пользовательском запуске wireshark? - PullRequest
7 голосов
/ 08 мая 2019

Я следую примеру foo, приведенному в документации по wireshark.Я могу построить плагин кода foo.Я использую версию Wireshark 3.0.1.В рабочей папке я обновил цель - PLUGIN_SRC_DIRS - plugins / epan / foo как раз перед gryphon.

Я вижу, что мой код создается из-за ошибки компиляции, которую я смог исправить.

Мой код foo находится в папке plugins / epan.Я использую пользовательский wireshark - sudo ./run/wireshark. Здесь удивительно, что я не вижу даже поля протокола грифона в работающем wireshark.Поэтому, чтобы проверить это, я набираю foo или gryphon в этом фильтре дисплея, и он становится красным, и он говорит, что foo не является ни протоколом, ни полем протокола.Я использую Ubuntu 16.04 LTS для его сборки.Сборка идет нормально.

Вот здесь package-foo.c

#include "config.h"
#include <epan/packet.h>
#include "packet-foo.h"


static int proto_foo = -1;

static int dissect_foo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, void *data _U_);


void
proto_register_foo(void)
{
    proto_foo = proto_register_protocol (
        "FOO Protocol", /* name       */
        "FOO",      /* short name */
        "foo"       /* abbrev     */
        );
}

void
proto_reg_handoff_foo(void)
{
    static dissector_handle_t foo_handle;

    foo_handle = create_dissector_handle(dissect_foo, proto_foo);
    dissector_add_uint("udp.port", FOO_PORT, foo_handle);
}

static int
dissect_foo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, void *data _U_)
{
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "FOO");
    /* Clear out stuff in the info column */
    col_clear(pinfo->cinfo,COL_INFO);

    return tvb_captured_length(tvb);
}

Вот это package-foo.h

#define FOO_PORT 1234

CMakeLists.txt здесьНа самом деле это копия грифона.Итак, мне интересно, если грифон не был распознан, это значит, что foo тоже не будет распознан.Таким образом, этот файл может быть источником проблемы.

include(WiresharkPlugin)

# Plugin name and version info (major minor micro extra)
set_module_info(foo 0 0 4 0)

set(DISSECTOR_SRC
    packet-foo.c
)

set(PLUGIN_FILES
    plugin.c
    ${DISSECTOR_SRC}
)

set_source_files_properties(
    ${PLUGIN_FILES}
    PROPERTIES
    COMPILE_FLAGS "${WERROR_COMMON_FLAGS}"
)

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

register_plugin_files(plugin.c
    plugin
    ${DISSECTOR_SRC}
)

add_plugin_library(foo epan)

target_link_libraries(foo epan)

install_plugin(foo epan)

file(GLOB DISSECTOR_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*.h")
CHECKAPI(
    NAME
      foo
    SWITCHES
      -g abort -g termoutput -build
    SOURCES
      ${DISSECTOR_SRC}
      ${DISSECTOR_HEADERS}
)

Plugin Folder

1 Ответ

2 голосов
/ 13 мая 2019

Простого изменения плагина недостаточно.Вам нужно изменить верхний make-файл так, чтобы foo действительно был установлен.

vim CMakeListsCustom.txt.example

Во-первых, раскомментируйте - номер строки 16

 plugins/epan/foo

Сваш foo живет в плагинах / epan / foo

Теперь переименуйте этот пример в

mv CMakeListsCustom.txt.example CMakeListsCustom.txt

vim CMakeLists.txt

Вставьте номер строки вокруг 1408 - plugins / epan /foo

После этого выполните make, а затем sudo make install

Вот рабочая копия -

https://github.com/joshis1/WiresharkDissectorFoo

...