2018年8月20日

Lua Support in Wireshark

wireshark 是網路封包解析工具,但如果是新的或是自己開發的 protocol,就必須要自行開發封包解析的 plugin,讓 wireshark 也能看得懂新的協定的封包。

wireshark 是以 C 開發的,所以可以用 C 語言開發 plugin,但還有另一個比較快速的方式,就是使用 lua script 開發,Lua 在 wireshark 可支援撰寫 dissectors, post-dissectors and taps。

dissector 就是封包解析的 plugin,雖然可以用 lua 快速開發 dissector,但是執行速度還是比 C 語言開發的 plugin 慢。不過如果要快速完成 dissector 開發,lua 還是一個好的選擇,畢竟不需要花時間 compile, debug C dissector。

post-dissectors 是在每一個 dissector 執行後,可以運作的 plugin,可用來增加 dissection tree,建立自訂的 filtering mechanism。

taps 是針對被 dissected 的封包,用來收集資訊的 plugin。

installation

由 wireshark 官網下載安裝套件安裝後,在 About Wireshark 選單中,可查閱 wireshark 的資訊。如果在中間有看到 "with Lua 5.2.4" 的字串,就表示這個 wireshark 有支援 lua。

另外,要查閱 Folders 頁籤,要注意 Personal Lua Plugins, Global Lua Plugins, Global Configuration 的路徑

Global Configuration: /Applications/Wireshark.app/Contents/Resources/share/wireshark

Personal Lua Plugins: /Users/charley/.local/lib/wireshark/plugins

Global Lua Plugins: /Applications/Wireshark.app/Contents/PlugIns/wireshark

安裝 plugin

有三種方式

  1. 放在 Personal Lua Plugins 目錄中
  2. 修改 init.lua,以 dofile() 載入 lua script
  3. 在啟動 wireshark 的 command line 中,加上 "-X lua_script:pcap_file.lua" 參數

如果已經做好了 plugin,可以直接放在 Personal Lua Plugins 目錄中,複製進去後,就可以在 About Wireshark -> Plugins 頁籤,看到那些 lua script。

第二種方式,先找到 init.lua 的存放位置,在這台機器上是放在 Global Configuration 目錄中。

編輯 init.lua,可看到最後面是 dofile(DATA_DIR.."console.lua")

# 備份 init.lua
cp /Applications/Wireshark.app/Contents/Resources/share/wireshark/init.lua /Applications/Wireshark.app/Contents/Resources/share/wireshark/init.lua.bak

vi /Applications/Wireshark.app/Contents/Resources/share/wireshark/init.lua

.....
dofile(DATA_DIR.."console.lua")
--dofile(DATA_DIR.."dtd_gen.lua")

要注意 init.lua 的最前面 disable_lua 必須要是 false

disable_lua = false

if disable_lua then
    return
end

在 init.lua 最後面加上

LUA_SCRIPT_PATH="/Users/charley/.wireshark/lua/"
dofile(LUA_SCRIPT_PATH.."hello.lua")

編輯 hello.lua vi /Users/charley/.wireshark/lua/hello.lua

-- hello.lua
print("hello world!")

以 command line wireshark 測試

$ tshark -x lua_script:hello.lua
hello world!
Capturing on 'FireWire'

References

使用 wireshark 的 lua script

Lua編寫Wireshark插件實戰

Lua

Chapter 10. Lua Support in Wireshark