【问题标题】:How can I generate traffic from trace file in mininet?如何从 mininet 中的跟踪文件生成流量?
【发布时间】:2018-11-27 02:48:15
【问题描述】:

我有跟踪文件名 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(此 对于仅确认由 另一边)

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

【问题讨论】:

    标签: traffic mininet iperf


    【解决方案1】:

    您可以通过 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
    

    【讨论】:

    • 这太复杂了!你有一些完全没用的 Linux 系统调用,你可以使用 scapy 的 Net() 生成器来生成 IP
    • 我没有像我提到的那样编写这段代码。它并不复杂,而且很容易转换。
    • 不反对你,例如 sourceIPgen 可以重写为一行:str(RandIP(iptemplate="%s.0.0.0/8" % random.choice([x for x in range(256) if x not in [10,127,254,1,2,169,172,192]])))
    • 正如我所说,我只是引用了一个我没有写的链接,但我使用了。他/她可以改变它。这不是这个问题的主要答案。
    • 我知道现在说有点晚了,但是谢谢。我确实检查了 Scapy,但我不明白这段代码的意义。我以为这段代码“sendp(packets,iface=interface.rstrip(),inter=0.1)”的意思是发送1个数据包,但那里怎么会有间隔?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2016-03-29
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多