先看最終效果

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>