Mininet中.pcap数据集的流量重放——基于tcpreplay

前言

很多论文的SDN实验中通常用到公用数据集作为背景流量,而这些数据集通常由tcpdump、wireshark等抓包生成,格式为.pcap。

本文介绍在SDN模拟环境mininet中重放.pcap数据集的方法。

数据

本文中采用的数据集为tcpreplay的示例数据集bigFlows系列:Sample Captures

该数据集的详细信息:

This is a capture of real network traffic on a busy private network’s access point to the Internet. 
The capture is much larger and has a smaller average packet size than the previous capture. 
It also has many more flows and different applications. 
If the large size of this file isn’t a problem, you may want to select it for your tests.

Size:	368 MB 
Packets:	791615 
Flows:	40686
Average packet size:	449 bytes 
Duration:	5 minutes 
Number Applications:	132

目前为止博主测试了很多其他的公用数据集,但是出于一些原因无法使用,下面也将它们列出:

WIDE系列:MAWI Working Group Traffic Archive

IMC系列:Data Set for IMC 2010 Data Center Measurement

这两个数据集的.pcap出于保护隐私,去掉了所有的负载,也就是data字段,抓取的时候是以包头部快照的形式进行,因此在重写数据包时可能存在数据包过短报错的问题,问题大概是:

Fatal Error: Error rewriting packets: From tcpedit.c:tcpedit_packet() line 172:
Packet length 60 is to short to contain a layer 52 byte IP header for DLT 0x0001

这个该问题的解决请参考我的另一篇博客:

python scapy填充公共pcap数据集负载实现流量重放_裕东方的博客-CSDN博客_python tcpreplay

对于匿名数据集,请确保负载已经正常填充,再用tcpreplay、tcprewrite修改、重放,否则一定会出现包损坏问题,无法重放!!

以及:

CAIDA Anonymized Internet Traces系列:The CAIDA Anonymized Internet Traces Dataset (April 2008 - January 2019) - CAIDA

这个数据集不可用的原因是国外出口限制,已经难以申请到。

工具

首先使用tcprewrite改写数据集,使用tcpreplay进行.pcap格式的重放,安装参考:tcpreplay的安装使用_zhaomax的博客-CSDN博客_tcpreplay

tcpreplay是一种pcap包的重放工具, 它可以将用ethreal, wireshark工具抓下来的包原样或经过任意修改后重放回去. 它允许你对报文做任意的修改,指定重放报文的速度等。

tcpreplay本身包含了几个辅助工具(tcpprep、tcprewrite、tcpreplay和tcpbridge)

其中: tcpprep 是简单的说就是划分哪些包是client的, 哪些是server的, 一会发包的时候client的包从一个网卡发, server的包可能从另一个网卡发。即区分pcap数据包的流向,即区分出客户端和服务器。
       tcprewrite 修改报文头部,即MAC地址、IP地址和PORT等。
       tcpreplay 回放pcap文件中的数据包。

方法

1、准备好下载好的.pcap文件,本文是bigFlows.pcap

2、重写bigFlows.pcap的源和目的地址。通常而言,如果mininet拓扑中只有一台host作为背景流量发生者,那么需要修改整个pcap的源IP为该host的IP,且修改整个pcap的目的IP为接收者的IP,命令如下:

(如果需要改mac地址,则选项为“--enet-smac、--enet-dmac”,类似操作)

tcprewrite --infile=bigFlows.pcap --outfile=test.pcap --srcipmap=0.0.0.0/0:10.0.0.11 --dstipmap=0.0.0.0/0:10.0.0.13

//指定输出文件名称,这里是test.pcap
//10.0.0.11和13为重写的源和目的,根据自己的mininet拓扑配置决定

3、使用tcprewrite重新计算校验和,命令如下:

tcprewrite --infile=test.pcap --outfile=test1.pcap --fixcsum

以上的两步可以合并为一条tcprewrite命令,即将所有的选项和参数合并输入,如下:

tcprewrite --infile=XXX.pcap --outfile=XX.pcap --enet-smac=00:00:00:00:00:01 --enet-dmac=00:00:00:00:00:04 --srcipmap=0.0.0.0/0:10.0.0.11 --dstipmap=0.0.0.0/0:10.0.0.13 --fixcsum

// MAC、IP源和目的地址由自己的拓扑决定
// 本处仅为一个示例

4、xterm打开mininet的host终端

5、在终端上运行tcpreplay进行数据包重放,命令示例为:

tcpreplay -i h1-eth0 -x 1.0 -K 文件路径/test1.pcap

//-i选项制定发包的网卡,在host上用ifconfig查看
//-x选项是倍速播放,这里的1.0是按照原速度播放
//-K是将pcap预加载到内存中,提高速度,如果需要重放很多个pcap,不建议使用该选项(内存占用过大)

tcpreplay -i h1-eth0 -p 300 -K 文件路径/test1.pcap

//除了-x倍速,还可以通过-p调节发包速度
//-p是每秒多少包的意思,这里是300pkt/s

注意事项

部分数据集的数据包第二层(物理层)的结构会多出一个4字节的IEEE 802.1q:VLAN连接介质访问控制层。

此时使用tcprewrite,需要增加选项“--enet-vlan”。

目前已发现上述的IMC-10数据集存在该字段。使用该数据集时应注意。

参考资料

官方文档:tcprewritetcpreplay

腾讯云:Linux下Pcap包重放工具Tcpreplay的简单使用 - 云+社区 - 腾讯云

pcap - Generate dataset traffic in mininet - Stack Overflow

pcap - Can't use CAIDA Dataset with tcpreplay to simulate network traffic in network - Stack Overflow

mininet - use tcpreplay for real trace internet dataset - Stack Overflow

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值