pktgen: http://dpdk.org/browse/apps/pktgen-dpdk/refs/

git clone git://dpdk.org/apps/pktgen-dpdk

pktgen doc:http://pktgen-dpdk.readthedocs.io/en/latest/

OS:Linux D128 3.10.0-693.el7.x86_64

OS2: Linux D129 3.10.0-327.el7.x86_64

dpdk: dpdk-stable-18.02.1/

pktgen: pktgen-3.5.0/

为了让彼此兼容,选了官网上最新的两个版本。

可以用:

lua脚本

或 seq命令

指定包序列,但是不能指定seq,ack等,所以还是无法模拟一个tcp握手过程。

http://pktgen-dpdk.readthedocs.io/en/latest/commands.html#runtime-options-and-commands

http://pktgen-dpdk.readthedocs.io/en/latest/lua.html#lua

tcpreplay:

http://tcpreplay.appneta.com/wiki/overview.html

可以用netmap驱动做高流量。

-----------------------------------  update @ 20180602 ---------------------

Pktgen Ver: 3.5.1 (DPDK 18.05.0-rc6)

不指定core和端口map时,不好用

[root@D129 pktgen]# ./app/x86_64-native-linuxapp-gcc/pktgen -l1,, --master-lcore  -- -m 2.0

查看seq:

Pktgen:/> page seq

加载seq,lua脚本

Pktgen:/> script /root/tong.lua

可以看见如下更新:

/                  <Sequence Page>  Copyright (c) <->, Intel Corporation
Port: , Sequence Count: of GTPu
Seq: Dst MAC Src MAC Dst IP Src IP Port S/D Protocol:VLAN CoS ToS Size TEID
* : ::::: ::::: 1.1.1.1 0.0.0.0/ / IPv4/TCP:
* : ::::: ::::: 2.2.2.2 0.0.0.0/ / IPv4/TCP:

tong.lua

[root@D129 ~]# cat tong.lua
-- Lua uses '--' as comment to end of line read the
-- manual for more comment options.
local seq_table_0 = { -- entries can be in any order
["eth_dst_addr"] = "0011:4455:6677",
["eth_src_addr"] = "0011:1234:5678",
["ip_dst_addr"] = "1.1.1.1",
["ip_src_addr"] = "2.2.2.2", -- the is the size of the mask value
["sport"] = , -- Standard port numbers
["dport"] = , -- Standard port numbers
["ethType"] = "ipv4", -- ipv4|ipv6|vlan
["ipProto"] = "tcp", -- udp|tcp|icmp
["vlanid"] = , -- -
["pktSize"] = , -- -
["teid"] = ,
["cos"] = ,
["tos"] =
};
pktgen.seqTable(, "", seq_table_0 ); local seq_table_1 = { -- entries can be in any order
["eth_dst_addr"] = "0011:1234:5678",
["eth_src_addr"] = "0011:4455:6677",
["ip_dst_addr"] = "2.2.2.2",
["ip_src_addr"] = "1.1.1.1", -- the is the size of the mask value
["sport"] = , -- Standard port numbers
["dport"] = , -- Standard port numbers
["ethType"] = "ipv4", -- ipv4|ipv6|vlan
["ipProto"] = "tcp", -- udp|tcp|icmp
["vlanid"] = , -- -
["pktSize"] = , -- -
["teid"] = ,
["cos"] = ,
["tos"] =
};
pktgen.seqTable(, "", seq_table_1 ); pktgen.set("", "seq_cnt", );

发包:

Pktgen:/> page main
Pktgen:/> start

正常情况下,能正常的发出了包。

::57.233082 IP 0.0.0.0. > 1.1.1.1.: Flags [.], seq :, ack , win , length : HTTP
::57.233088 IP 0.0.0.0. > 1.1.1.1.: Flags [.], seq :, ack , win , length : HTTP
::57.233094 IP 0.0.0.0. > 1.1.1.1.: Flags [.], seq :, ack , win , length : HTTP
::57.233100 IP 0.0.0.0. > 2.2.2.2.: Flags [.], seq :, ack , win , length : HTTP

目的IP,与预期不符。

--------------------- update @ 20180603 ----------------------

配置方法二:

创建文件cfg/tong.cfg

[root@D129 pktgen]# cat cfg/tong.cfg
setup = { 'devices' : ['00:04.0'],
'opts' : ['-b igb_uio']
} run = {
'app_name': 'pktgen',
'app_path': [
'./app/%(target)s/%(app_name)s',
'%(sdk)s/%(target)s/app/%(app_name)s',
],
'dpdk' : (
'-l 1,2',
'--master-lcore 1',
'-w 00:04.0'
),
'app' : (
'-T',
'-m 2.0',
'-f workspace/tong.lua'
),
}

使用 脚本启动:

[root@D129 pktgen]# ./tools/dpdk-run.py tong

--------------------  update @ 2018-08-23 --------------

dpdk: git::v18.08

pktgen: git::vpktgen-3.5.2

1.  make dpdk

2. make pktgen

3. run:

[root@T9 pktgen-dpdk.git]# ./tools/run.py tong

4. 使用pcap

修改配置文件:

[root@T9 pktgen-dpdk.git]# cat cfg/tong.cfg
setup = { 'devices' : ['00:04.0'],
'opts' : ['-b igb_uio']
} run = {
'app_name': 'pktgen',
'app_path': [
'./app/%(target)s/%(app_name)s',
'%(sdk)s/%(target)s/app/%(app_name)s',
],
'dpdk' : (
'-l 1,2',
'--master-lcore 1',
'-w 00:04.0'
),
'app' : (
'-T',
'-m 2.0',
'-f tong.lua'
# '-s 0:/root/80-client.pcap'
),
'misc': (
'-f', 'themes/black-yellow2.theme'
)
}

这个时候,就可以把pcap中的包重放出来了.

5. random

执行命令:

Pktgen:/> enable  random
Pktgen:/> set rnd 111111111111xxxx

源IP被修改为了 255.255.255.xxx, xxx为随机数.

查看输出结果:

但是, 不能做基于流的修改....

-------------------   update @ 2018-08-04 ----------------------

[tcpreplay] tcpreplay高级用法--使用tcpreplay-edit进行循环动态发包

即使netmap + tcpreplay-edit 也不能满足需求. 因为 --unique-ip 参数的做法是源IP加一, 目的IP减一. 当时不能保证目的IP不变. 也不满足我们的LB测试需求.

看来... 只能自己写一个了...

最新文章

  1. SVNKit支持SSH连接
  2. jQuery extend扩展String原型
  3. 剖析width、height继承
  4. Jquery中each的三种遍历方法
  5. linux设备模型
  6. [转载]python gevent
  7. GDC2016【彩虹六号:围攻 】使丰富的“突破”成为可能的破坏系统
  8. 事件详解&lt;一&gt;
  9. Exploit-Exercises nebule 旅行日志(一)
  10. 学习笔记TF030:实现AlexNet
  11. CXF之&quot;@XmlType.name 和 @XmlType.namespace 为类分配不同的名称&quot;错误
  12. mybatis_SQL映射(1)
  13. hive -- 分区,分桶(创建,修改,删除)
  14. 性能测试LR学习笔录2am pm -3
  15. [Solution] 985. Sum of Even Numbers After Queries
  16. windows与mac下安装nginx
  17. hdu多校第3场A.Ascending Rating
  18. Java+opencv实现人脸检测
  19. 《centos系列》ubuntu终端链接centos服务器
  20. jQuery二维码

热门文章

  1. 【读书笔记】Data_Mining_with_R---Chapter_2_Predicting Algae Blooms
  2. Features Download Pricing Mind Maps Blog XMind的快捷键
  3. tensorflow笔记6:tf.nn.dynamic_rnn 和 bidirectional_dynamic_rnn:的输出,output和state,以及如何作为decoder 的输入
  4. C艹目录
  5. Java如何替换所有指定(出现)的字符串?
  6. 网络编程 -- RPC实现原理 -- NIO单线程
  7. U3D 垂直同步
  8. 【netcore入坑记】 .Net core UseRowNumberForPaging 分页报错 SQL Server 2008 R2 EntityFrameworkCore
  9. scala 模式匹配详解 2 scala里是怎么实现的?
  10. css3整理--background-origin