如何从mininet中的跟踪文件生成流量?

时间:2018-06-18 09:28:13

标签: traffic mininet iperf

我有跟踪文件名dec-pkt,其中有6列如下:

  • 数据包到达的时间戳。

对于跟踪中的第一个数据包,这是 原始tcpdump时间戳。剩下的 数据包,这是整数的偏移量 第一个时间戳的一部分。

例如,如果第一个时间戳是187.2,那么 第二个是188.9,第三个是191.3,然后 ASCII文件中的前三个时间戳将 是187.2,1.9(= 188.9-187)和4.3(= 191.3-187)。

请注意,sanitize-syn-fin用作基准时间 第一个TCP数据包到达文件, 不是第一个TCP SYN / FIN / RST数据包(这有帮助 比较sanitize-syn-fin时间与那些 由sanitize-tcp生产。

  • (重新编号)源主机
  • (重新编号)目的地主机

    请注意,重新编号过程会丢失任何IP网络 信息。

  • 源TCP端口

  • 目标TCP端口

  • 数据包中的数据字节数,如果没有则为0(这个 可能会发生只有ack发送数据的数据包 另一方)

所以我想知道如何使用此文件生成此流量?可以Iperf 去做?如果不是我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以通过Scapy轻松生成流量。它还带有Mininet VM,您可以在mininet官方网站上找到它。它可以同时为TCP和UDP生成数据包。

这是一个示例python代码。您可以在Github或Scapy的官方教程中找到更多信息。

import sys
import getopt
import time
from os import popen
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import sendp, IP, UDP, Ether, TCP
from random import randrange


def sourceIPgen():
    not_valid = [10,127,254,1,2,169,172,192]

    first = randrange(1,256)

    while first in not_valid:
        first = randrange(1,256)

    ip = ".".join([str(first),str(randrange(1,256)),str(randrange(1,256)),str(randrange(1,256))])

    return ip


def gendest(start, end):

    first = 10
    second =0; third =0;
    ip = ".".join([str(first),str(second),str(third),str(randrange(start,end))])
   # print start
   # print end
    return ip

#if __name__ == '__main__':
  #main()

def main(argv):
   # global start 
   # global end
    print argv
    try:
        opts, args = getopt.getopt(sys.argv[1:],'s:e:',['start=','end='])
    except getopt.GetoptError:
        sys.exit(2)
    for opt, arg in opts:
        if opt =='-s':
            start = int(arg)
        elif opt =='-e':
            end = int(arg)
    if start == '':
        sys.exit()
    if end == '':
        sys.exit()


    interface = popen('ifconfig | awk \'/eth0/ {print $1}\'').read()

    for i in xrange(1000):
        packets = Ether()/IP(dst=gendest(start,     end),src=sourceIPgen())/UDP(dport=80,sport=2)
        print(repr(packets))

        sendp( packets,iface=interface.rstrip(),inter=0.1)

if __name__ == '__main__':
  main(sys.argv)

Referance

您可以这样称呼

python ./launchTraffic -s 2 -e 28