本日誌主要是記錄學習wireshark插件開發的過程,以便之後查看,以及供像我同樣對wireshark插件開發不瞭解的朋友的參考。html
最近在學習ethercat協議,可是目前wireshark中的ethercat插件沒有對從站(ESC)的寄存器進行解析(從git log來看新版的會增長),因此須要增長寄存器解析這一部分。The Tao Of Fieldbus裏提供了一個有ESC寄存器解析功能的插件,不過不太符合個人需求,並且在我工做用的XP系統上不能用。XP只能裝1.10版的wireshark。git
找了一下寫wireshark解析插件的方法,其中有一種是C語言編寫的,好比生成ethercat.dll,而後放放wireshark的plugins目錄下,這種效率比較高可是編譯什麼的比較複雜,等之後再用這種方法吧。另外一種就是採用lua寫,簡單的也幾十行就能夠完成,好比用Lua語言編寫Wireshark dissector插件。segmentfault
首先在Wireshark安裝目錄C:Program FilesWireshark下創建ecatesc.lua。
而後在init.lua中添加dofile(DATA_DIR.."ecatesc.lua")
。ide
圖中能夠看到能夠經過按下Ctrl+Shift+L
來從新載入Lua插件,這樣就能夠看到代碼修改後的效果,不用每次修改後都重啓wireshark。函數
首先從console.lua中抄一段代碼到ecatesc.lua中,驗證lua能夠正常運行,就當是hello world吧。工具
do function segment_fault() browser_open_url("https://segmentfault.com") end register_menu("Lua/SegmentFault", segment_fault, MENU_TOOLS_UNSORTED) end
打開wireshark按下Ctrl+Shift+L
快捷鍵從新載入lua後能夠看到菜單 工具-lua 中多了一個SegmentFault,點擊會打開SegmentFault網站。學習
看了幾個例子好像都須要註冊到一個DissectorTable裏,若是隻能這樣的話,ethercat就不能這樣作了。網站
local udp_encap_table = DissectorTable.get("udp.port") udp_encap_table:add(1127,p_ScoreBoard)
還好,經過git拉下來的代碼編譯成功了,編譯出來的版本里有有關於ESC寄存器的解析。
嗯,既然編譯成功了,那我先研究一下C語言的版本吧。等我熟悉瞭解析插件開發的流程後再研究一下lua版本吧。ui
這個類型的文章應該放到日誌裏吧,放錯了,下一篇放日誌裏吧。lua
以前我一直覺得能夠只編譯一個插件,而不用把wireshark所有編譯了,不過研究了很久沒有成功,目前先所有編譯吧。
首先git clone一下wireshark的源代碼,而後按照Win32/64: Step-by-Step Guide裏面的步驟一步一步的作。編譯的過程當中產生了error C2220
的錯誤,warning產生的錯誤,而後在產生錯誤的文件裏面添加相似#pragma warning(disable: 4047)
有語句,終於編譯成功了。
而後把msbuild64\run\RelWithDebInfo\plugins
裏的ethercat.dll複製到我已經安裝的wireshark的plugins\2.0.4\
目錄裏面,可是會提示
沒法定位程序輸入點call_data_dissector於動態連接庫
不知道爲何,難道我編譯的是Debug版嗎,對這個還不太瞭解。
用Dependency Walker看了一下原來的ethercat.dll(2.0.4版)和新版的ethercat.dll(從git倉庫編譯的2016-06-19)發現原來的ethercat.dll沒有調用libwireshark.dll中的call_data_dissector。用DLL Export Viewer 看了一下原來的libwireshakr.dll中並無call_data_dissector這個函數,而新版的有。看來我是不能將新版本的dll放到原來的wireshark裏用了,更不用說用在XP版上了。仍是lua版的比較通用吧。不過我仍是要繼續看下去的。繼續研究下怎麼編寫wireshark的插件。
原版
新版