概述
目前主流的網路資料分析工具主要有兩類,一類是http協議分析工具,如fiddler,這類工具擅長對字串型別協議分析;另一類是原始網路資料包的監聽分析,如Wireshark,這類工具擅長分析網路底層行為,這兩類工具一類擅長字串協議分析,另一類擅長網路底層行為分析,但是上述兩類工具分析二進制流型別協議時,就顯得力不心了,TcpEngine (官網:http://www.tcpengine.cn/)補充上述兩類工具的空白,提供了二進制流協議分析的方法,
TcpEngine擅長分析Tcp長連接協議,在資料流協議出現資料錯誤時使用,比如使用了tcp|websocket協議的網路游戲出現資料錯誤時,使用本工具對游戲網路資料分析,查找資料錯誤原因,這款工具不但可以在發開環境中使用,也可以在非開發環境中使用,比如網路資料錯誤發生在測驗環境或用戶環境,可以使用本工具在發生錯誤環境中監聽拷貝網路資料,保存到檔案再交給技術開發人員慢慢分析,
目前只支持在win32平臺運行,工具分兩部分,應用軟體部分和系統內核WFP模塊,WFP(Windows Filtering Platform) 是windows推出的用于TCP/IP協議堆疊五層各層里面對資料包進行互動操作的基礎框架,這里用于監聽拷貝指定的網路資料,使用前需要安裝WFP,由于WFP內核模塊還沒有資料簽名,使用前需要按下面鏈接指導步驟重啟和設定系統http://www.xitongcheng.com/jiaocheng/win10_article_10547.html
界面
啟動界面如下圖所示,

運行界面如下圖所示,奇數行是原始的數字流,偶數行是對應的決議后的可讀資料,

使用方法
TcpEngine使用WFP截取應用層網路資料,WFP是內核模塊,進行數字簽名,殺毒軟體會直接報名,并且使用需要按http://www.xitongcheng.com/jiaocheng/win10_article_10547.html進行一些設定,WFP模塊TcpEngine官網已公開源代碼,你了可以下載重新編譯,以管理員身份運算TcpEngine,點擊主界面新建檔案,如下圖所示,

點擊開始,輸入需要監聽的網路地址(支持域名和真實IP地直)和埠,如下圖所示,

點擊“接收并決議”或“接收不決議”,把要監聽的網路資訊寫入WFP內核,當監聽的網路有資料流通時,就拷貝一分到TcpEngine中,如下圖所示,

本示例使用的是flamingo應用演示,收到的是加密后資料,我們需要對它解密,按TcpEngine規則實作了flamingo演算法,在TcpEngine官網有示例代碼,使用方法,1、先暫停;2、加入解密庫,如下圖所示,

再點擊重繪,得到解密后的資料,如下圖所示,

這時可以撰寫決議規則對原始資料進行決議,再“重繪并決議”,可以得到正常資料,如下圖所示,

決議規則
每個不同的應用定義了不同的Tcp協議,面對千變萬化的協議,TcpEngine提供的方案是半編程的決議規則,需要你根據自己的協議,撰寫決議規則來決議你的資料,決議規則借鑒了編程的變數,分支(if)和回圈(for),
比如我們的數字流協議定義如下圖所示,

那我們對應的決議規則如下所示,
int32 id;int32 msgLen;
if(0 < msgLen)
{
byte[msgLen] body;
}
如果我們的id=1000訊息的訊息體如下圖所示,
if(1000 == id) {
int32 loginId = split(body);
text[msgLen-4] = split(body);
}
完整的決議規則如下圖所示,

如果我們的訊息體是結構體陣列,那么我們可以用for運算式回圈決議,示例如下圖所示,

如果我們的訊息體是結構體陣列,那么我們可以用for運算式回圈決議,示例如下圖所示,

網路資料說明
當我們的網路資料出錯時,需要按我們自定義的協議規則決議網路資料成為我們可閱讀的格式,一般情況下,我們的網路數字流是按固定的格式連續組成二進制資料流,我們向您提供了半編程式的方法對這類網路資料決議,把不可閱讀的數字流決議成可閱讀的資料格式,
工具通過wfp內核模塊從系統內核拷貝指定網路資料,當我們的網路程式向網路發送或接收一段完整的資料時,會拷貝一份應用層的資料到工具,每一條資料會生成兩行資料,奇數行是原始資料,緊接偶數行是對應的決議資料,由原始資料行顏色標識資料型別,如下圖所示,

決議引數
在決議網路資料前,我們需要分別對發送和接收的資料設定好資料型別,發送和接收兩種型別都要設定,發送型別的設定只對發送資料有效,接收型別的設定只對接收資料有效,
設定引數有四種,分別是位元組序;字符編碼;網路協議;指定解碼庫(后續再說明),需要注意,引數設定必須全部小寫,
set endian = big; 設定位元組序,對基本數字型別有影響,如 四個位元組的int型等,目前主流的網路序都使用大端位元組序,也叫網路位元組序,支持的值有 big 大端位元組和little小端位元組序兩種,
set encoding = utf-8; 設定字串編碼,對字串資料型別有影響,當前只支持 utf-8和local(本地型別)兩種編碼格式,

資料型別
決議規則的功能是把連續無規則無法閱讀的資料流決議成規則的,可閱讀的資料格式,方法是把連續的位元組按變數的形式劃分到一個整體并顯示代表的值,如把連續的四個位元組劃分成整型,或如把多個位元組劃分成一個字串變數,工具支持的變數型別如下串列,
資料型別串列
char 字符型,一個位元組,顯示ASCII 字符,
byte 位元組型,一個位元組,以十六進制顯示,
int8 有符號整型,一個位元組,以十進制顯示,
uint8 無符號整型,一個位元組,以十進制顯示,
int16 有符號整型,兩個位元組,以十進制顯示,
uint16 無符號整型,兩個位元組,以十進制顯示,
int32 有符號整型,四個位元組,以十進制顯示,
uint32 無符號整型,四個位元組,以十進制顯示,
int64 有符號整型,八個位元組,以十進制顯示,
uint64 無符號整型,八個位元組,以十進制顯示,
float32 有符號浮點型,四個位元組,以十進制顯示,
float64 有符號浮點型,八個位元組,以十進制顯示,
string 字串型,可變長度,如果指定了長度,則按指定長度劃分位元組數,如果不指定長度,一直劃分到遇到零為止,如果剛好本行結束,則本資料型別不參與決議,
text 字串型,可變長度,如果指定了長度,則按指定長度劃分位元組數,如果不指定長度,一直劃分到遇到零為止,如果剛好本行結束,則使用下一行參與繼續決議,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461827.html
標籤:Java
