概述

  目前主流的网络数据分析工具主要有两类,一类是http协议分析工具,如fiddler,这类工具擅长对字符串类型协议分析;另一类是原始网络数据包的监听分析,如Wireshark,这类工具擅长分析网络底层行为。这两类工具一类擅长字符串协议分析,另一类擅长网络底层行为分析,但是上述两类工具分析二进制流类型协议时,就显得力不心了,TcpEngine (官网:http://www.tcpengine.cn/)补充上述两类工具的空白,提供了二进制流协议分析的方法。

  TcpEngine擅长分析数据流协议,适合在数据流协议出现数据错误时使用,比如使用了tcp|websocket协议的网络游戏出现数据错误时,使用本工具对游戏网络数据分析,查找数据错误原因。这款工具不但可以在发开环境中使用,也可以在非开发环境中使用,比如网络数据错误发生在测试环境或用户环境,可以使用本工具在发生错误环境中监听拷贝网络数据,保存到文件再交给技术开发人员慢慢分析。 

目前只支持在win32平台运行,工具分两部分,应用软件部分和系统内核WFP模块,WFP(Windows Filtering Platform) 是windows推出的用于TCP/IP协议栈五层各层里面对数据包进行交互操作的基础框架,这里用于监听拷贝指定的网络数据。使用前需要安装WFP,由于WFP内核模块还没有数据签名,使用前需要按下面链接指导步骤重启和设置系统http://www.xitongcheng.com/jiaocheng/win10_article_10547.html

  二进制流协议是由我们根据业务需求自定义且没有统一固定格式的网络通信协议,这种特性决定了协议格式是多种多样的,面对多变的协议,解析工具必须提供灵活多变的解析方法,灵活多变就决定了解析方法使用难度会相应的增加。

初识解析规则

  面对这些特点,TcpEngine提供的解析方案是提供类似于编程的解析方法,让您根据自己的协议格式编写对应的解析规则,比如一个典型的协议是:固定的消息头 + 可变的消息体。  

  • 消息头 = 两个字节的指令id  + 四个字节消息长度,消息长度值等消息头长度加上消息体长度。
  • 消息体长度 = 由消息头的四个字节消息长度 -  6指定。如下图所示。

  

  初步对应的解析规则如下。

  int16 msgId;    // 消息id

  int32 msgLen;   // 消息长度,值是消息体长度 + 消息头长度

  byte[msgLen-6] msgBody;  // 消息体长度 = msgLen - 6

  如果我们全部的消息都是这样固定的格式,那么可以通过死循环来使用同样的格式解析所有消息,对应的解析规则如下。

  while(1 == 1){

    int16 msgId;   // 消息id

    int32 msgLen;   // 消息长度,值是消息体长度 + 消息头长度

    byte[msgLen-6] msgBody; // 消息体长度 = msgLen - 6

  }

  如果我们前3个消息是上述格式,后续所有消息是另外如下格式。

  

  对应的解析规则如下。

int32 loop = 3;

while(loop > 0){ // 循环三次

loop--;

int16 msgId; // 消息id

int32 msgLen; // 消息长度,值是消息体长度 + 消息头长度

byte[msgLen-6] msgBody;  // 消息体长度 = msgLen - 6;

}

while(1 == 1){ // 死循环解析后续所有消息

int16 msgId; // 消息id

int32 msgLen; // 消息长度,值是消息体长度 + 消息头长度

int16 msgKey; // 消息key

byte[msgLen-8] msgBody; // 消息体长度 = msgLen - 8;

}

初识解析消息体

  我们以上述举例开始三条消息举例,如果msgId=1000的消息体前一个字节是用户名长度 + 字符串用户名 + 两个字节密码长度 + 字符串密码,如下图所示。

  

  对应解析规则如下。

int32 loop = 3;

while(loop > 0){

loop--;

int16 msgId;

int32 msgLen;

byte[msgLen-6] msgBody;

if(1000 == msgId) {

int8 userNameLen = msgBody.split(); // 用户名长度

text[userNameLen] userName = msgBody.split(); // 用户名

int16 pwdLen = msgBody.split(); // 密码长度

text[pwdLen] = msgBody.split(); // 如不对变量再引用,可定义匿名变量

}

}

while(1 == 1){

int16 msgId;

int32 msgLen;

int16 msgKey;

byte[msgLen-8] msgBody;

}

  如果我们的还有一个消息是1001,按如下方式解析。

int32 loop = 3;

while(loop > 0){

loop--;

int16 msgId;

int32 msgLen;

byte[msgLen-6] msgBody;

if(1000 == msgId) {

int8 userNameLen = msgBody.split(); // 用户名长度

text[nameLen] userName = msgBody.split(); // 用户名

int16 pwdLen = msgBody.split(); // 密码长度

text[pwdLen] = msgBody.split(); // 对变量没有再使用,可不指定变量名

}

if(1001 == msgId) {

// 解析规则列表....

}

  // 更多的解析规则....

}

参数设置

  通信数据都以某种数据格式在网络中传输,因此在解析数据前,先要指定数据是以哪种格式在传输,TcpEngine支持三种网络参数,以指定按哪种格式解析原始网络数据,分别是:字节序;字符串编码;网络传输协议。

  • 字节序:不了解的请自行网上搜索,这个参数影响多字节的数值类型,如int32,设置指令如下。

set endian = big; // 大端,目前主流,也叫网络字节序

set endian = little; // 小端

  • 字符串编码:设置字符串数据编码,这个参数影响字符串数据类型,设置指令如下。

set encoding = utf-8;

set encoding = local; // 使用系统当前默认编码

  • 网络传输协议:暂只支持tcp原始协议和websocket协议,这个参数设置工具以哪种协议识别网络数据,设置指令如下。

set protocol = tcp; // 指定原始tcp传输方式

set protocol = websocket; // 指定websocket传输方式

set protocol = auto;  // 让工具根据数据特征自动先择

数据类型

char 字符型,一个字节,显示ASCII 字符。

byte 字节型,一个字节,以十六进制显示。

int8 有符号整型,一个字节,以十进制显示。

int16 有符号整型,两个字节,以十进制显示。

int32 有符号整型,四个字节,以十进制显示。

int64 有符号整型,八个字节,以十进制显示。

float32 有符号浮点型,四个字节,以十进制显示。

float64 有符号浮点型,八个字节,以十进制显示。

text 字符串型,可变长度,如果指定了长度,则按指定长度划分字节数,如果不指定长度,遇到零就停止划分,如果没有遇零,遇到一行结束就停止划分(建议使用这个字符串类型)。

string 字符串型,可变长度,如果指定了长度,则按指定长度划分字节数,如果不指定长度,一直划分到遇到零为(建议少用可不用这个类型)。

运行TcpEngine

  TcpEngine擅长解析二进流网络协议,为了监听拷贝指定网络数据,采用了微软的WFP内核模块实现,使用前需要在系统安装WFP内核模块。因为WFP内核模块未数据签名(模块源代码可在官网下载),需要先按本链接http://www.xitongcheng.com/jiaocheng/win10_article_10547.html。指导重启电脑,然后再以管理员权限运行工具。如果工具未安装WFP,在“系统设置”中安装,工具启动正常如下图所示。

  

监听拷贝网络数据

  TcpEngine支持先监听拷贝网络数据再分析,也可以边监听网络数据,边分析,当前版本只支持通过ipv4地址和端口的方式监听指定网络数据,执行“新建”功能,生成一个解析规则文件,如下图所示。

  

    点击“开始”,弹出配置监听网络数据端口,填入我们想监听的网络地址和端口,我们以监听分析百度举例, 百度的IP地址是14.215.177.38(IP地址可能会变),把14.215.177.38:80如下图所示填写,并点击“接收不解析”按钮。

  

  在浏览器访问http://14.215.177.38/,如下图所示是工具监听到的网络数据,未解析将以二进制显示。

  

初识解析过程

  网站传输的http协议有文本和二进制流数据(图片,声音等),使用TcpEngine初步解析http协议,我们以上述接收的http网络数据为例,按下列步骤编写最简单的解析规则。处理http协议并不是TcpEngine擅长领域,这里只为简单入门演示。

  • 设置好参数,发送数据和接收数据都要设置,如下图所示。

  • 编写解析规则,解析规则执行过程跟过程语言执行顺序类似,按顺序顺序执行网络数据,编写好解析规则并执行“刷新”,保存解析规则到文件后,并执行解析刷新,解析结果如下图所示,因为没有编写解析规则,还是以二进制数据显示。

  • 以字符串解析发送和接收的网络数据,字符串变量是text和string,这里使用text,以字符串解析网络数据写法如下。

  text tt;  // 以字符串数据类型解析网络数据

  把所有数据都以字符串解析如下。

while(1 == 1){

  text tt;  // 以字符串数据类型解析网络数据

  }

  执行解析规则结果如下图所示。

  

网络数据流分析工具TcpEngine V1.0.0教程-1的更多相关文章

  1. 网络性能测试工具iperf详细使用图文教程

      Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性. Iperf可以报告带宽,延迟抖动和数据包丢失.利用Iper ...

  2. 网络性能测试工具iperf详细使用图文教程【转载】

    原文:http://blog.163.com/hlz_2599/blog/static/142378474201341341339314/ 参考:http://man.linuxde.net/iper ...

  3. 网络性能测试工具iperf详细使用图文教程(转)

    Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性.Iperf可以报告带宽,延迟抖动和数据包丢失.利用Iperf这一 ...

  4. 【Linux】网络性能测试工具iperf详细使用图文教程【转】

    参考链接:https://www.cnblogs.com/yingsong/p/5682080.html Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量. Iperf可以测 ...

  5. TCP协议调试工具TcpEngine V1.3.0使用教程

    简介   这里说的TCP协议调试定义是在开发长连接TCP协议应用时,为了验证代码流程或查找bug,需要与对端交互数据过来,当需要时可以暂停发送:单条发送:跳过发送:正常发送:发送时修改数据等.   T ...

  6. Iperf3网络性能测试工具详解教程

    Iperf3网络性能测试工具详解教程 小M 2020年4月17日 运维 本文下载链接 [学习笔记]Iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保 ...

  7. 【山外笔记-工具框架】iperf3网络性能测试工具详解教程

    [山外笔记-工具框架]iperf3网络性能测试工具详解教程   本文下载链接 [学习笔记]iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性 ...

  8. 【学习笔记】Iperf3网络性能测试工具

    [学习笔记]Iperf3网络性能测试工具 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高. ...

  9. iperf——网络性能测试工具

    一.前言 工作中遇到需要测试Linux服务器网卡占用率的场景,查阅资料后,发现iperf是一款合适的网络测速工具. 下面讲解一下如何使用iperf做网络性能测试. 二.基础知识 先补充一些基础知识: ...

  10. Windows环境下Android Studio v1.0安装教程

    Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...

随机推荐

  1. 论文阅读:A new approach solve the multi-product multi-period inventory lot sizing with supplier selection problem

    论文:A new approach solve the multi-product multi-period inventory lot sizing with supplier selection ...

  2. #树上差分 or 01-Trie#洛谷 6623 [省选联考 2020 A 卷] 树

    题目 分析(01trie) 考虑用trie做需要满足什么操作:加入某个数.01-Trie的合并.全局加一. 主要是全局加一比较难做,考虑改变的地方就是 \(X*2^T+2^T-1\). 把01-Tri ...

  3. #模型转换#[ARC126C] Maximize GCD

    题目 有 \(n\) 个数,最多 \(k\) 次让所选择的数加一,求 \(n\) 个数的GCD的最大值 \(n,a_i\leq 3*10^5,k\leq 10^{18}\) 分析 设答案为 \(d\) ...

  4. #虚树,树形dp#CF613D Kingdom and its Cities

    洛谷题面 Codeforces 分析 若两个重要城市为一条边的两个顶点显然无解 否则考虑建一棵虚树,设\(dp[x]\)表示以\(x\)为根的子树最少需要摧毁的城市数, 令\(Siz[x]\)表示\( ...

  5. 深究可见性,原子性,有序性的解决方案之volatile源码解析

    上节java内存模型(jmm)概念初探大致了解了由于cpu的快速发展,导致的越来越复杂的内存模型诞生,java内存模型相当于是底层内存模型的映射(实际并不是一一映射,但可以借鉴理解),也是衍生出并发三 ...

  6. 【直播预告】HarmonyOS极客松赋能直播第四期:HarmonyOS开发经验分享

  7. sql 语句系列(分割ip)[八百章之第十四章]

    前言 单独列出的章节.因为用处比较多. mysql select SUBSTRING_INDEX(SUBSTRING_INDEX("192.168.1.1",".&quo ...

  8. 重新点亮linux 命令树————权限的修改[十]

    前言 简单介绍一下文件的权限修改. 正文 chmod 修改文件.目录的权限 chmod u+x /tmp/testfile chmod u-x /tmp/testfile u 表示用户 g 表示组 o ...

  9. 力扣81(java&python)-搜索旋转排序数组 II(中等)

    题目: 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 ...

  10. 如何将传统 Web 框架迁移部署到 Serverless 架构?

    简介: 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式. 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式. ...