zoukankan      html  css  js  c++  java
  • 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:
    
  • 相关阅读:
    Spring面试,IoC和AOP的理解
    WEB打印(jsp版)
    Spring事务管理机制的实现原理-动态代理
    spring面试题
    oracle PLSQL基础学习
    oracle创建表空间
    WM_CONCAT字符超过4000的处理办法
    Oracle 数据泵使用详解
    Oracle 数据泵详解
    linux下启动oracle
  • 原文地址:https://www.cnblogs.com/snowInPluto/p/15044995.html
Copyright © 2011-2022 走看看