国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

網絡數據封包嗅探程序源碼 采用vc++開發

[復制鏈接]
樓主
loop 發表于 2019-10-27 17:50:28 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
這個工具的第一個版本是2015年做的,因為工作中經常要在不同的終端PC上抓包分析網絡協議, 一直用的wireshark進行抓包分析,wireshark的安裝包比較大,每次裝起來太繁瑣,也不支持回環網絡封包的捕獲,于是就起意自己做一個自己的封包協議分析工具。于是就有了這個工具的第一個版本。然后一邊使用一邊豐富工具的功能,就有了現在的這個版本。

源碼下載: snifferview vc++源碼.zip (3.09 MB, 售價: 10 E幣)
已編譯的可執行程序: SnifferView.rar (687.18 KB)

網絡數據封包嗅探程序源碼 采用vc++開發 1.png


主要功能及特點:該工具不是一個demo,是一個穩定,切實可用,功能比較完善的網絡封包修改,分析工具,如果需要經常進行網絡封包的捕獲,分析,記錄可以使用這個工具。支持本地所有網卡的網絡封包嗅探捕獲,包括127地址的回環包。支持類似wireshark的封包過濾語句,方便靈活的對網絡封包進行過濾。支持tcp流追蹤功能,方便的跟蹤單個的tcp數據流。支持進程網絡狀態探測,可以方便的查看指定進程的網絡狀態。支持已捕獲網路數據的導入導出,可以方便的隨時dump已捕獲的網絡數據。工具小巧,綠色(1mb多,只有一個可執行文件),無任何依賴,啟動運行速度快。C++語言開發,vs2008集成工具開發工具編譯,用vs2008打開工程根目錄下的SnifferView.sln工程文件編譯即可。
工具功能截圖:
網絡數據封包嗅探程序源碼 采用vc++開發 468728_CA4UPZGX7T98SHM.png
網絡數據封包嗅探程序源碼 采用vc++開發 468728_83U3R3HA52BVU9Q.png
網絡數據封包嗅探程序源碼 采用vc++開發 468728_EXWHY2B3WPEFQPR.png
軟件架構
ComLib子工程:
基礎功能靜態庫,給各個子功能提供通用的基礎功能組件。
SnifferView子工程:
主功能模塊,實現主要的功能,包括網絡封包的嗅探,過濾語句編譯解析器實現,網絡協議的分析,數據流查看等等。
Dumper子工程:
異常捕獲處理模塊,捕獲未處理異常并生成異常dump和異常日志,用于分析異常原因。
SyntaxView子工程:
語法高亮控件,基于Scintilla改造而成,目前用于展示tcp數據流數據。

使用說明
本程序只有一個可執行程序,程序啟動后即開始封包嗅探,但這時由于沒有過濾語句,捕獲到的封包會有很多,可以在主界面的過濾規則框中輸入合適的過濾規則來捕獲感興趣的網絡封包。具體的過濾規則和wireshark的類型,又做了一些優化,主要的規則如下。

SnifferView過濾規則:
SnifferView的過濾語法舉例:
ip.addr==192.168.168.231   過濾ip源地址或者目標地址為192.168.168.231的網絡封包
icmp                       過濾icmp協議的封包
tcp.src==8345              過濾tcp源端口為8345的網絡封包
tcp.length>128             過濾長度大于128字節的tcp封包,這個長度刨除ip頭和tcp頭
tcp contains "GET"         過濾內容中包含GET字符串的tcp封包
tcp[4:n32]==0x12ff         過濾tcp用戶數據偏移4字節取一個32位數據大小為0x12ff的封包
tcp.flag.syn               過濾有syn標記的tcp封包
tcp[chars]=="GET"          過濾tcp用戶數據偏移O字節為GET的封包
http                       過濾http協議
http.get                   過濾http的get協議
http.post                  過濾http post協議
http.resp                  過濾http的返回包
http.url contains "img"    過濾http的url中包含img字符串的封包

過濾規則的關鍵字:
ip層:ip, ip.addr, ip.src, ip.dst, ip.length

icmp層:icmp
tcp層:tcp.port, tcp.src, tcp.dst, tcp.length,tcp.flag.syn|ack|fin|rst|psh|urg, tcp[a:b](a為偏移,b是具體的數據類型,沒有a的意思是偏移為0), tcp contains “aaa”(包含字符串aaa的tcp封包)

udp層:和tcp類似,不再贅述

應用層協議:
http協議:http, http.get, http.post, http.head, http.options, http.put, http.delete, http.tarce, http.url contains "aaa"(http的url包含aaa的封包)
過濾規則的數據類型(用于tcp[a:b]或者udp[a:b]):
n8(8位無符號整型),n16(16位無符號整型),n32(32位無符號整型),byte(同n8),bytes(byte列表),char(字符型),chars(字符串)

過濾規則的邏輯連接符:
>(大于), <(小于), >=(大于等于), <=(小于等于), ==(等于), !=(不等于), &(按位與)

各個過濾表達式可以用and(&&)或者or(||)進行連接,可以使用小括號 比如獲取長度大于128的GET包或者POST包:
tcp.length>128 and (tcp[chars]==”GET” or tcp[chars]== “POST”)

SnifferView語法相對wireshark的主要改進:
wireshark過濾封包內容的時候語法是這樣的tcp[a:b],a為偏移,b為匹配的長度,偏移是從tcp頭開始的,并且tcp頭還是變長的,并且只能按字節逐個匹配,用起來很不方便,我們通常關注的并不是tcp頭中的內容,而是用戶數據的內容,因此SnifferView過濾內容的時候偏移是從用戶數據開始的,程序自動計算tcp頭的長度,支持各種的數據類型的匹配,自動計算匹配的長度,如果匹配的字符串里有\n\r將自動換為回車和換行。
比如:
tcp[4:n16]==0x33ee             從用戶數據偏移4字節匹配一個16位整型數據,大小為0x33ee
tcp[5:chars]=="aaaa"            從用戶數據偏移5個字節匹配一個字符串aaaa

關于配置界面里的主機字節序和網絡字節序:
選主機字節序的意思是封包里的數據是以主機字節序的方式存儲的,選網絡字節序的意思是封包里的數據是以網絡字節序存儲的。
比如:
tcp[4:n32]==0x12345678
如果選的是主機字節序會從用戶數據偏移4字節的地方開始依次匹配0x78,0x56,0x34,0x12
如果選的是網絡字節序會從用戶數據偏移4字節的地方開始依次匹配0x12,0x34,0x56,0x78
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 01:10

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表