我有一個建立在UDP上的協議,部分由Wireshark中的第三方dll解析。我現在想創建一個自定義解析器來應用於剩餘的「數據」字段。如何在使用Lua的Wireshark中剖析已解析的包中的字段?
是否有可能這樣做,我應該使用解剖器,後解剖員或聽衆或他們的組合來實現這一點?或者我必須將第三方解析器重新寫入一個叫我解析器的剩餘數據的解析器?
我有一個建立在UDP上的協議,部分由Wireshark中的第三方dll解析。我現在想創建一個自定義解析器來應用於剩餘的「數據」字段。如何在使用Lua的Wireshark中剖析已解析的包中的字段?
是否有可能這樣做,我應該使用解剖器,後解剖員或聽衆或他們的組合來實現這一點?或者我必須將第三方解析器重新寫入一個叫我解析器的剩餘數據的解析器?
正如John Zwinck所提到的,你可能確實想要像鏈式解剖器那樣的東西,你可以在Lua或C中直接管理它。爲此,你當然希望實現你的邏輯解析器。在Lua中,這樣的事情:
do
--TODO set up your extra "data" field
local tcp_table = DissectorTable.get("tcp.port")
local third_party_dissector tcp_table:get_dissector(PROTO_PORT)
function your_protocol.dissector(tvb, pinfo, tree)
--call the third party dissector
third_party_dissector:call(tvb, pinfo, tree)
--TODO do what you need with the data
end
--take over the port your protocol runs over
tcp_table_add(PROTO_PORT, your_protocol)
end
保持API在手,但請記住,也是在Wireshark的Lua的解剖真的只是爲原型;它們的效率低於基於C的解析器的效率,並且API往往滯後於C解剖API的幾個版本。
當我想要做這樣的事情時,我發現它令人驚訝地複雜和不愉快(相對於Lua解剖器開發總體而言)。這裏提到了「鏈式解剖器」:http://wiki.wireshark.org/Lua/Dissectors。從我讀過的東西(我從來沒有得到過我的工作,但我沒有太努力),在C中製作鏈式解剖器似乎比在Lua中更容易。不過,請嘗試按照該頁面上的示例進行操作,該示例非常感謝,並且有足夠的評論使其非常清晰。
是的,我也有同感。讓我想在Haskell中編寫一個數據包分析器... :)謝謝,錯過了那一個。不幸的是我無法讓它工作。可能是因爲我不得不使用真正舊版本的Wireshark(0.99.7)。 – ihatetoregister
你可能想看到Wireshark問答網站http://ask.wireshark.org/ – sylvanaar