轉載開源抓包工具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號碼的腳本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
-- 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 license