使用lua編寫Wireshark(Ethereal)的dissector插件

使用lua編寫Wireshark(Ethereal)dissector插件

 

dissector插件可以用來對特定的協議內容進行分析展示,在分析自己實現的應用層協議時還是很有用的。dissector插件一般用C來實現,具體如何實現可以參考Wireshark代碼目錄下面的/epan/dissectors中的源代碼和plugins目錄下面的源代碼。 一些簡單的對性能要求不高的dissector插件也可以使用Lua來實現。Wireshark已經嵌入了對Lua的支持。下面就是一個簡單的例子: 

-- 定義協議,可以在wireshark中使用trivial過濾

trivial_proto = Proto("trivial","TRIVIAL","Trivial Protocol")

 

-- dissector函數

function trivial_proto.dissector(buffer,pinfo,tree)

   

    --pinfo的成員可以參考用戶手冊

    pinfo.cols.protocol = "TRIVIAL"

    pinfo.cols.info = "TRIVIAL data"

   

    local subtree = tree:add(trivial_proto,buffer(),"Trivial Protocol")

          

    --不對應任何數據

    subtree:add(buffer(0,0),"Message Header: ")

   

    --版本號對應於第一個字節

    subtree:add(buffer(0,1),"Version: " .. buffer(0,1):uint())

   

    --類型對應於第二個字節

    type = buffer(1,1):uint()

    type_str = "Unknown"

    if type == 1 then

        type_str = "REQUEST"

    elseif type == 2 then

        type_str = "RESPONSE"

    end

    subtree:add(buffer(1,1), "Type: " .. type_str)

 

    --從第三個字節開始是數據

    size = buffer:len()

    subtree:add(buffer(2,size-2), "Data: ")

      

end

 

tcp_table = DissectorTable.get("tcp.port")

--註冊到tcp8888端口

tcp_table:add(8888,trivial_proto)

插件編寫完成後保持爲test.lua文件,我們就可以抓包測試一下了。首先請確認你的Wireshark支持lua,如果Wireshark目錄下面有init.lua文件就說明支持Lua。其次需要啓動對Lua的支持,默認不啓動對Lua的支持。編輯init.lua文件,註釋掉“disable_lua = true;”這一行,然後在文件的最後添加一行dofile("test.lua"),這樣Wireshark啓動時就會自動調用test.lua。也可以在命令行指定需要執行的腳本文件, 比如“wireshark  -X lua_script:test.lua”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章