今夜冥王星有雪

导航

pktgen 使用小记

pktgen 是 Linux 内核自带的一个发包工具。下面知识简单的通过一个例子介绍一下。

安装

要使用 pktgen,首先必须加载 pktgen 的内核模块。

modprobe pktgen

当然,要卸载也是同样。rmmod pktgen

在安装完模块之后,会自动产生 /proc/net/pktgen 这样一个目录。其中会存在类似 kpktgend_0 这样的文件,这些文件对应了所在机器的逻辑核。而 pgctrl 则是控制程序。

简单样例

下面通过这个简单的脚本说明一下使用。

#!/bin/sh

# 函数用于设置参数
function pgset() {
	local result
	echo $1 > $PGDEV
	result=`cat $PGDEV | fgrep "Result: OK:"`
	if [ "$result" = "" ]; then
		cat $PGDEV | fgrep Result:
	fi
}

# 在 CPU 0 上绑定网卡 enp0s8
PGDEV=/proc/net/pktgen/kpktgend_0
echo "Removing all devices"
pgset "rem_device_all"
echo "Adding enp0s8"
pgset "add_device enp0s8"
echo "Setting max_before_softirq 10000"
pgset "max_before_softirq 10000"

# 为网卡 enp0s8 设置各种参数。包括发包数量,包大小,延迟,目标 IP,目标 mac 地址等。
# COUNT 0 means forever
COUNT="count 100000"
CLONE_SKB="clone_skb 000000"
# NIC adds 4 bytes CRC
PKT_SIZE="pkt_size 64"
# delay is inter packet gap. 0 means maximum speed.
delay="delay 0"

PGDEV=/proc/net/pktgen/enp0s8
echo "Configuring $PGDEV"
pgset "$COUNT"
pgset "$CLONE_SKB"
pgset "$PKT_SIZE"
pgset "$delay"
pgset "dst 10.10.11.2"
pgset "dst_mac 08:00:27:f7:55:35"

# 运行程序
PGDEV=/proc/net/pktgen/pgctrl
echo "Running... ctrl^C to stop"
pgset "start"
echo "Done"

运行结果会在 /proc/net/pktgen/enp0s8 中:

Params: count 100000  min_pkt_size: 64  max_pkt_size: 64
     frags: 0  delay: 0  clone_skb: 0  ifname: enp0s8
     flows: 0 flowlen: 0
     queue_map_min: 0  queue_map_max: 0
     dst_min: 10.10.11.2  dst_max:
     src_min:   src_max:
     src_mac: 08:00:27:8c:20:01 dst_mac: 08:00:27:f7:55:35
     udp_src_min: 9  udp_src_max: 9  udp_dst_min: 9  udp_dst_max: 9
     src_mac_count: 0  dst_mac_count: 0
     Flags:
Current:
     pkts-sofar: 100000  errors: 0
     started: 1725189480us  stopped: 1738624191us idle: 275397us
     seq_num: 100001  cur_dst_mac_offset: 0  cur_src_mac_offset: 0
     cur_saddr: 0.0.0.0  cur_daddr: 10.10.11.2
     cur_udp_dst: 9  cur_udp_src: 9
     cur_queue_map: 0
     flows: 0
Result: OK: 13434711(c13159314+d275397) usec, 100000 (64byte,0frags)
  7443pps 3Mb/sec (3810816bps) errors:

posted on 2021-07-22 16:54  alfred_zhong  阅读(641)  评论(0编辑  收藏  举报