1. 程式人生 > 其它 >TCP協議分析工具TcpEngine V1.2.0使用教程

TCP協議分析工具TcpEngine V1.2.0使用教程

概述

  目前主流的網路資料分析工具主要有兩類,一類是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 字串型,可變長度,如果指定了長度,則按指定長度劃分位元組數,如果不指定長度,一直劃分到遇到零為止,如果剛好本行結束,則使用下一行參與繼續解析。