先看最终效果

wireshark是开源的,而且在Windows下安装时用的是64位,所以相应的库文件需要使用64位。
一个Lua插件的Dissector结构大致如下:
剩下的就是对Buffer的解析了。注意的几个坑点:
1、wireshark自带lua版本是5.2,安装目录下有lua52.dll;
2、wireshark自带zlib库文件,名字叫zlib1.dll;
在编写插件时,将编译生成好的*.dll文件放到wireshark安装目录下,在lua中直接require(“xx”)即可,如果报错,在系统的环境变量中添加 LUA_CPATH,值为dll所有目录位置。
注意要引用lua52.dll,配置附加库目录、附加包含目录。
我先下载了zlib的源码,版本为 1.2.11。使用cmake进行编译,之后将cmake生成的zconf.h文件复制到zlib-1.2.11目录下,然后配置lua-zlib工程。
同样配置附加包含目录、附加包含库的路径,最终生成lua_zlib.dll文件,然后将其改名为zlib.dll。复制到wireshark安装目录,lua中直接require(“zlib”)
使用Dependency Walker查看生成的dll是否正确
在解析消息的过程中,我使用了递归的方法来展开所有数据。
目前客户端 -> 服务器,服务器 –> 客户端的数据都可以正常解析出来。我定义了本机的ip,然后通过 pinfo.src 是否与本机 ip 相等来判断是否当前消息为客户端发给服务端的数据。
参考:
<a href="https://wiki.wireshark.org/Lua/Dissectors" target="_blank">https://wiki.wireshark.org/Lua/Dissectors</a>
<a href="https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Struct.html#lua_class_Struct" target="_blank">https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Struct.html#lua_class_Struct</a>
<a href="https://www.wireshark.org/docs/wsdg_html_chunked/index.html" target="_blank">https://www.wireshark.org/docs/wsdg_html_chunked/index.html</a>
<a href="https://www.wireshark.org/docs/wsdg_html_chunked/wsluarm_modules.html" target="_blank">https://www.wireshark.org/docs/wsdg_html_chunked/wsluarm_modules.html</a>
<a href="https://www.wireshark.org/docs/wsdg_html_chunked/wslua_tap_example.html" target="_blank">https://www.wireshark.org/docs/wsdg_html_chunked/wslua_tap_example.html</a>
<a href="https://wiki.wireshark.org/LuaAPI" target="_blank">https://wiki.wireshark.org/LuaAPI</a>
<a href="https://wiki.wireshark.org/LuaAPI/Pinfo" target="_blank">https://wiki.wireshark.org/LuaAPI/Pinfo</a>