基于Ostinato框架的ESP协议流量产生器的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Ostinato框架的ESP协议流量产生器的设计与实现Ostinato是一个开源的、跨平台的网络包和流量生成器与分析器,它提供了一个友好的图形化界面,使得网络专业人士、研究人员和爱好者能够方便地生成定制的网络流量以进行测试、调试或性能评估。

Ostinato允许用户精确地创建并发送各种类型的数据包,包括TCP、UDP、ICMP等常见协议,以及自定义的填充数据。

这使得用户能够模拟复杂的网络场景,进行深入的测试和分析。

通过图形用户界面(GUI),使得操作直观且易于理解。

即使对于新手来说,也能够快速上手并进行网络流量的生成和分析。

一,Ostinato架构
Ostinato 分为控制器和代理( drone agent ),控制器负责给
代理发送指令,流量的生成与捕获工作则有代理完成。

图1
如图1,控制器可以是ostinato 的客户端,也可以是自己开发的api脚本。

ostinato 系统结构共分为五个大类
(1)控制器类
主要实现功能是实现在指定网络接口增加对stream流的增、删、改查。

主要负责把各个协议(ip、arp、icmp、 tcp、 udp)的ui文件中设计的小部件加载到控制器类的主窗口中。

(2)图形界面类
图形界面类通过继承AbstractProtocolConfigForm类并定制与具体协议相关的界面元素和逻辑,为用户提供了一个友好的操作界面。

(3)协议封装类
协议封装类在软件架构中扮演着至关重要的角色,它负责将不同的通信协议
进行封装,使得上层应用能够以一种统一、标准化的方式与各种协议进行交互。

在实现协议封装类时,使用Protocol Buffers可以极大地提高开发效率和数据
处理的性能。

(4)代理类
代理在整个测试流程中发挥着至关重要的作用,它承担着所有繁重的流量生
成和捕获任务。

(5)远程过程调用服务类
远程过程调用服务在 Ostinato 框架的控制器与代理之间起到了指令传输、数据报告、分布式测试协调、同步与控制以及解耦与扩展性等重要作用,为自动化网络测试提供了高效、可靠和灵活的通信机制。

Ostinato 四种工作模式:
默认模式¶
控制器和代理在同一台电脑运行,ostinato安装后执行ostinato命令会同时打开客户端gui和drone 两个程序,gui可以设置协议参数,发送指令到drone 代理,最后有drone生成流量,如下图2.
一个控器多个代理
一个控制器可以连接到多个代理,一对多模式主要应用在一个代理没有足够多的端口为测试设备生产流量。

多个控制器连接到一个代理
这种连接方式适合代理服务器有很多端口,并且不同的控制器向不同的被测设备发送流量。

跨平台使用
ostinato是可以跨平台使用的,由于控制器和代理可以运行在不同的操作系统上,所以可以使用运行在linux系统上的控制器去访问windows server上的代理。

如图5
二,协议实现开发流程
相关协议类
ostinato 新增加协议只需要在三个类中增代码即可
1,协议类:在协议类中根据esp协议结构增加相关字段,实现协议数据的读取与存储
2,窗体类:在窗体类中,可以根据需要设计协议的窗口,协议的配置小部件继承自AbstractProtocolConfigForm类。

AbstractProtocolConfigForm类定义了协议小部件的接口。

在窗体类中提供了两个关键方法 loadWidget(),和storeWidget()loadWidget()方法,可以在方法内设置加载窗体时的控件值。

storeWidget()方法,实时保存在窗体上修改的值。

在两个方法内可以使用proto->fieldData从新增加的ipsecesp协议类接口中获取字段的值,使用proto->setFieldData从新增加的ipsecesp协议类接口存储字段值。

3,pdml协议类:pdml协议的目的是在导入PCAP文件时解码协议字段。

PCAP是网络抓包软件wireshark、tcpdump等在网络上抓取的网络数据包存储的数据文件,PCAP文件中的每个数据包都需要“解码”,才能解析数据中的协议和协议字段,原理跟Wireshark一样,ostinato使用了tshark(wireshark的终端版本)来解码PCAP文件并生成PDML文件。

PDML是解码数据包、协议和协议字段的XML表示。

4,协议缓冲区
协议缓冲区全称Protocol Buffers(简称 Protobuf)是 Google 公司开发的一种对数据进行序列化的协议。

它独立于语言,独立于平台。

一旦使用Protobuf 的特定语法在 .proto 中定义了数据结构,就可以利用 Protocol buffers 的代码生成工具生成相关的代码。

这样就可以在不修改其它代码的情况下更新数据,大大减少了手动编写序列化和反序列化代码的工作量。

Protobuf 的序列化速度非常快,Protobuf 被设计用于高效地处理结构化数据——它的序列化速度比 XML 快很多,更有于在网络传输或存储数据时节省带宽和存储空间,。

三,协议实现
1,协议开发流程
Ostinato提供了一个编写协议构建器的框架,首先分析IpsecESP 协议结构,在.proto增加文件中增加协议号与协议字段,使用protoc
编译生成c++文件,然后再编写IpsecESP协议的实现文件和设计窗口类。

2, IpsecESP协议的实现过程
(1) IpsecESP协议的实现以隧道模式为例,复制common目录下的sample*.* 文件,重命名为ipsecesp*.* 在ipsecesp*.*中搜索并替换smaple (2)打开ipsecsspconfig.ui文件设计ipsecesp协议窗体。

(3)编辑protocol.proto 文件在枚举类enum k中增加协议号,协议号100-199是ostinato保留使用,200-500为协议所用可以跟协议所在网络层按100分段为几个级别这里把ipsecesp协议同ip4、ip6放到了一个级别里协议号设置为308
(4)编辑ipsecesp.proto文件在此文件中增加协议字段消息类型。

使用protoc编译生成对应的c++源码包含在ipsecesp.cpp协议中
(5)ipsecesp协议的封装
在ipsecesp.h的头文件中实现ipv4的协议头结构体共隧道模式使用
// IPv4头部结构
定义IpsecEspProtocol协议,从IpsecEspProtocol协议继承并实现一些读取和保存协议字段用的虚函数。

在类的定义中还要创建一个枚举成员,枚举类型的值是以协议字段命名,用来索引读取、存储协议字段值。

在IpsecEspProtocol协议中几个重要的重新实现的虚函数,与控制器ui界面实现数据的交互,如
fildFlags函数:ui界面的查询协议字段的标志,UI界面可以根据这些标志来动态地调整其显示。

fieldData函数:个函数返回每个字段的数据。

UI界面可以调用这个函数来获取特定字段的当前值,并在界面上显示。

这样,用户就可以查看协议字段的实时状态或数据。

setFieldData函数:这个函数用于存储协议字段的数据。

当用户在UI界面上修改某个字段的值时,UI界面可以调用这个函数来更新协议状态。

这样,协议的实现就可以根据新的字段值来构建或处理数据包。

除了这几个虚拟函数还要实现 AES、DES加密函数,实现esp协议的加密,关于AES和DES加密函数的实现,是调用OpenSSL库中的相关函数来完成加密和解密过程。

(6)在完成ipsecesp.cpp这个协议类实现后还需要在
(7)设置ipsecesp协议的界面(UI),并在common/protocolwidgetfactory.cpp 类中注册
(8)解码类的实现也要在common/pdmlreader.cpp中进行注册
最后编译安装完成后的界面如图:。

相关文档
最新文档