导出 Wireshark 解剖器

Exporting Wireshark Dissector

我已经构建了一个自定义 Wireshark 数据包解析器作为用 C 编写的插件。

如何编译导出,让别人不用重新制作源码就可以使用?
例如,如果有人通过二进制文件而不是从源代码构建 Wireshark,那么我怎样才能让他们可以使用我的解析器插件,因为他们可能无法构建来自源代码的解剖器(还要说明这是否可能)。

同样,如果我在 Lua 中编写了解析器,那么是否可以以这种方式导出它?

(我是编写解析器的新手,因此将不胜感激。)

基本上,如果您不希望他们必须自己编译 Wireshark,我认为您有 2 个选择:

  1. 构建一个包含您的解析器的安装程序并分发新的安装程序。
  2. 构建插件并分发插件,他们需要将其添加到现有安装中。

第一个选项确保包含您的解析器并与您在安装程序中包含的 Wireshark 版本兼容,但通常需要他们卸载当前版本的 Wireshark 并安装您的。也许这是不可取的?

第二个选项要求您为给定版本的 Wireshark 构建插件,只要他们已经安装了相同版本的 Wireshark,他们就不必卸载当前安装的 Wireshark 版本来安装您的版本.但是,不保证插件 API/ABI 与不同版本兼容,因此您需要为每个使用的 Wireshark 版本创建一个插件。

就我个人而言,我总是创建自己的安装程序,我组织内任何需要它提供的附加功能的人都可以安装它。我永远不必担心插件兼容性问题。我还发现创建 built-in 解析器与插件解析器相比要容易一些,需要修改和跟踪的开发文件要少得多。

请参阅 Wireshark Developer's Guide for more information, as well as the various README files in the Wireshark source tree, particularly the README.plugins file if you plan to build a plugin. You can also refer to the Wireshark buildbots 查看构建过程的每个步骤,包括安装程序创建步骤。这是一个很好的参考,尤其是当您在构建过程的任何特定步骤中遇到任何困难时。

在考虑编译和导出解析器时应该阅读的资源是:


编译解析器

假设您有从源代码构建的 Wireshark 而不是使用 sudo apt-get。

假设您的插件解析器名称是 "foo"(通常情况下, 是您的协议的简称,全部小写)


插件及其文件的目录

插件应该放在新的 plugins/foo 目录中 至少包含以下文件:

  • 作者
  • 复制中
  • 变更日志
  • CMakeLists.txt
  • Makefile.am
  • moduleinfo.h
  • plugin.rc.in

有关这些文件的详细信息,请参阅 README.plugins


现在跳回插件目录。

对于自定义扩展

转到插件目录并复制 Custom.m4.example 和 Custom.make.example 个文件到同名但没有“.example”的文件 后缀。现在你有两个自定义文件准备好用 姓名 "foo"。如果需要,请替换名称。

对于 CMake 构建,要么在 CMake 生成中传递自定义插件目录 步骤命令行:

CMake ... -DCUSTOM_PLUGIN_SRC_DIR="plugins/foo"

或者复制顶层文件CMakeListsCustom.txt.example到CMakeListsCustom.txt (也在顶级源目录中)并进行编辑,以便 CUSTOM_PLUGIN_SRC_DIR 是 set() 到你的插件的相对路径,例如

设置(CUSTOM_PLUGIN_SRC_DIR plugins/foo)


转到目录 Wireshark-2.4.X

运行 $ ./autogen.sh./configure 设置构建环境。

好消息是,如果您正在开发单个插件,那么您将 发现重新编译插件比重新编译解剖器快得多,并且 然后将其链接回 Wireshark。使用 "make -C plugins" 只编译 你的插件。

坏消息是 Wireshark 不会使用插件,除非插件 安装在它希望它们找到的地方之一。

处理这个问题的一种方法是设置一个环境变量 当 运行 Wireshark: WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1.


你的插件分布

要分发您的插件,您需要向用户提供您的解析器的二进制文件(解析器编译时生成的 .so 文件)

用户需要将这些文件放在他们的 Wireshark 安装个人插件文件夹中,然后重新启动 Wireshark。

要找到插件文件夹,打开 Wireshark 并转到帮助 -> 关于 -> 文件夹。如果个人插件文件夹中提到的路径不存在,则创建相同的路径。


分发 Lua 解剖器相当容易。

只需将 Lua 脚本复制粘贴到个人插件文件夹中,您的插件就可以使用了。