在wireshark里添加新的dissector遇到的问题及解决方法

在Wireshark中尝试添加新的dissector时遇到编译问题。具体表现为新增的packet-xx.c未能被注册到register.c中,经排查发现是由于automake未正确执行导致Makefile.in未更新。通过重新安装automake并执行automake命令解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在wireshark里添加新的dissector遇到了这样的问题,添加了packet-xx.c,在Makefile.common中也添加了Includes,但是编译却不能将添加的函数注册的register.c中去,即使remove掉了register.c也不起作用。

后来发现编译过程有下面的warning:

make[3]: Entering directory `/root/Perforce/wireshark-1.4.4/epan/dissectors'
 cd ../.. && /bin/bash /root/Perforce/wireshark-1.4.4/missing --run automake-1.9 --gnu  epan/dissectors/Makefile
/root/Perforce/wireshark-1.4.4/missing: line 52: automake-1.9: command not found
WARNING: `automake-1.9' is missing on your system.  You should only need it if
         you modified `Makefile.am', `acinclude.m4' or `configure.in'.
         You might want to install the `Automake' and `Perl' packages.
         Grab them from any GNU archive site.
 cd ../.. && /bin/bash ./config.status epan/dissectors/Makefile depfiles
config.status: creating epan/dissectors/Makefile
config.status: executing depfiles commands
make[3]: Leaving directory `/root/Perforce/wireshark-1.4.4/epan/dissectors'
make[3]: Entering directory `/root/Perforce/wireshark-1.4.4/epan/dissectors'
Making register.c with python

也就是说automake没有被执行。这导致了Makefile.common更改后没有更新Makefile.in。打开Makefile.in果然没有发现新加的packet-xx.c文件。

于是重新安装automake,并在wireshark-1.4.4目录执行automake,问题解决。

### Wireshark 中自定义协议解析配置方法 Wireshark 是一款功能强大的网络数据包捕获工具,支持通过 Lua 插件扩展来实现自定义协议解析。以下是有关如何在 Wireshark 中定义和解析自定义协议的方法。 #### 1. 安装并启用 Lua 支持 为了使用 Lua 编写的插件,需确认安装的 Wireshark 版本已内置 Lua 支持。可以通过以下方式验证: - 打开 Wireshark 后进入 `帮助 -> 关于` 页面。 - 查看 “编译器信息” 和 “运行时信息”,确保其中列出了 Lua 的版本号[^2]。 如果未找到 Lua 相关条目,则需要重新下载带有 Lua 功能的安装包,并按照官方文档说明完成安装过程。 #### 2. 创建 Lua 脚本文件 Lua 脚本通常保存为 `.lua` 文件格式,放置到指定目录下以便加载。默认情况下,脚本应位于用户的个人资料路径下的 `AppData\Roaming\Wireshark\init.lua` 或者全局共享位置如 `%ProgramFiles%\Wireshark\plugins\<version>` 下面[^1]。 下面是一个简单的例子展示如何创建一个新的协议 dissector: ```lua -- 定义新协议名称及其缩写形式 local myproto = Proto("myproto", "My Custom Protocol") -- 添加字段描述符用于显示特定部分的数据含义 local f_field1 = ProtoField.uint8("myproto.field1", "Field One", base.DEC) local f_field2 = ProtoField.stringz("myproto.field2", "Field Two") myproto.fields = {f_field1, f_field2} function myproto.dissector(buffer, pinfo, tree) -- 设置当前帧的信息标签 pinfo.cols.protocol:set("MYPROTO") local subtree = tree:add(myproto, buffer(), "MyProto Data") -- 提取第一个字节作为无符号整数类型处理 local field1_value = buffer(0, 1):uint() subtree:add(f_field1, buffer(0, 1)) -- 假设第二个字段是从第2个字节开始直到遇到零终止字符为止字符串表示法 local str_len = select_string_length(buffer, 1) -- 用户自行实现函数计算长度逻辑 if (str_len > 0 and str_len <= buffer:len()-1 ) then subtree:add(f_field2, buffer(1,str_len)) end end -- 注册解码器关联端口号或者其他条件触发机制 dissector_table.get("tcp.port"):add(9999, myproto) ``` 此代码片段展示了基本框架结构以及一些核心概念的应用实例,比如定义新的协议对象、声明字段列表并通过回调函数实际操作原始二进制流提取感兴趣的部分加以解释呈现给用户界面。 #### 3. 加载与测试 Lua 插件 将编写好的 lua 文件存放到适当的位置之后重启 wireshark 应用程序使其生效。接着可以尝试发送符合预期格式的有效负载经过目标端口监听等待观察效果是否正常工作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值