1. 程式人生 > >開源抓包工具PowerSniff(支援lua,c語言作為指令碼實時分析)

開源抓包工具PowerSniff(支援lua,c語言作為指令碼實時分析)

做這個程式的意圖是wireshark外掛編寫複雜(雖然也支援lua),而輕量級的工具如smartsniff,minisniff不支援外掛化資料分析,
各種工具用下來或多或少不順手。以前寫的外掛也都是手工+寫程式碼的方式分析資料,過程非常痛苦。
因而誕生了這個抓包後可lua指令碼分析的工具。希望對做網路資料分析的同學有幫助。

說明:
1.閉源免費。使用raw socket,lua 5.3.1,最大抓取60萬資料包,和wireshark/tcpdump檔案格式相容
2.在winxp-32和win10-64測試正常
3.3rd的trace工具是mbcs做的,win10支援的不好,以後有時間移植unicode再支援
4.示例中的監測qq號測試正常

5.下載地址:http://pan.baidu.com/s/1nt1n2jR
6.技術支援qq群466507719,開發版本即時更新到群共享。歡迎測試及功能建議

 


程式需要呼叫的lua介面,參考plugin/example1.lua
(1)init: 外掛初始化
(2)handle_data: 當收到一個數據包時呼叫這個函式,函式return "delete"也可以起到過濾作用
(3)handle_click:當單擊列表資料時呼叫這個函式
(4)handle_double: 當雙擊列表資料時呼叫這個函式

lua中增加的可以回撥的程式介面:
plugin_output_clear: 清空plugin output視窗

plugin_output: 輸出到plugin output視窗
plugin_summary: 輸出到listview最右邊的Plugin Summary項
trace: 輸出到三方工具,暫未實現
trace_raw: 輸出到三方工具,暫未實現

 


 

 


圖多殺貓
(1)程式大小隻有465KB,單獨一個可執行檔案PowerSniff.exe也可以執行,收集的庫可放到lib資料夾,外掛自動從plugin資料夾掃描

 

(2)功能介面

 

(3)外掛編輯,編譯,執行介面

 

 

 

(4)演示監測qq登入號碼

啟動程式,選單選擇“Option -> Plugin -> qq number analyse.lua”,start抓包,當qq登入後Plugin Summary會顯示qq號碼

 

 

 

 

分析qq號碼的指令碼:

 

-- qq號碼登入監視指令碼(不支援手機號碼登入,不支援webqq,只在pc上用qq2015測試通過)
-- 2015.9.14
require "base64"
require "tcp_ip"

function init()
    trace("plugin init:  ".._VERSION.."\n")
    trace("package path: "..package.path.."\n")
    trace("package path: "..package.cpath.."\n")
    --for k,v in pairs(_G) do
    --    trace(string.format("%s,%s\n", k, v))
    --end
end

-- protocol:    字串如tcp,udp,icmp
-- data:    二進位制資料
-- len_total:    總共資料長度
-- len_data:    有效資料長度(去除各種頭之後的資料)
function handle_data(protocol,data,len_total,len_data)
    if 54 == len_total then
        return "delete"        -- remove handshake
    end
    src_port = tcp_ip_get_src_port(data)
    dst_port = tcp_ip_get_dst_port(data)
    -- if 8000 != src_port && 8000 != dst_port then
    if (8000 ~= dst_port) or (len_data < 100) then
        return "delete"
    end
    if 2 ~= data:byte(43) then    -- 0x2是qq udp協議magic number
        return "delete"
    end
    if 8 ~= data:byte(46) then    -- 8和37是 0x8和0x25是協議型別,表示登入
        return "delete"
    end
    if 37 ~= data:byte(47) then
        return "delete"
    end
    -- 50, 51, 52, 53位元組是qq號(lua index從1開始而不是0)
    qq_number = data:byte(50) * 256 * 256 * 256 + data:byte(51) * 256 * 256 + data:byte(52) * 256 + data:byte(53)
    plugin_summary("qq_number is: " .. qq_number)
end

function handle_click(protocol,data,len_total,len_data)
end

function handle_double(protocol,data,len_total,len_data)
    handle_data(protocol,data,len_total,len_data)
end

  

github地址:https://github.com/wjx0912/PowerSniff

MIT lic