【问题标题】:Multithreading or multiprocessing in mininet and scapymininet 和 scapy 中的多线程或多处理
【发布时间】:2018-12-16 00:01:39
【问题描述】:

作为大学项目的一部分,我使用 Mininet 创建了一个拓扑,并尝试使用 Scapy 生成流量。 为了在拓扑上生成 TCP 攻击,调用了一个名为“My_SYNfloodattack.py”的 Python 脚本。以下是主脚本的一部分,显示了它是如何调用的。

...
def attack():
attack_hosts = ['h2','h3','h4','h5','h6','h7','h8','h9','h10','h11','h12','h13','h14','h15',
               'h16','h17','h18','h19','h20','h21','h22','h23','h24','h25','h26','h27','h28']
    for item in attack_hosts:
        h1 = net.get(item)
        i = int(item[1:])
        h1.cmd('sudo python /home/pox/ext/My_SYNflood_attack.py 10.0.0.%s 10.0.0.253'%i)
...

当我调用攻击函数时,'My_SYNflood_attack.py'第一次被“h2”调用,100个数据包发送完毕,然后这个过程发生在“h3”等等。 问题是我想同时调用该函数,列表中的所有主机('h3'到'h28')开始一起发送数据包。 我搜索并阅读了有关多线程和多处理的信息,但是如何在 mininet 中使用它?
提前致谢。

【问题讨论】:

    标签: python multithreading multiprocessing sdn mininet


    【解决方案1】:

    您应该将要异步运行的任务部分表述为函数,或者(在我看来更好,但其他人可能不同意)作为threading.Thread 子类的run 方法。然后为每个主机启动一个新的线程/进程,然后等待它们全部完成。代码如下所示(未经测试):

    from threading import Thread
    ...
    class FloodThread(Thread):
        def __init__(self, hn):
            self.hostnum = hn
            Thread.__init__(self)
        def run(self):
            i = int(self.hn[1:])
            hn.cmd('sudo python /home/pox/ext/My_SYNflood_attack.py 10.0.0.%s 10.0.0.253' % self.i)
    
    ...
    
    def attack():
        threads = []
        attack_hosts = ['h2','h3','h4','h5','h6','h7','h8','h9','h10','h11','h12','h13','h14','h15',
                   'h16','h17','h18','h19','h20','h21','h22','h23','h24','h25','h26','h27','h28']
        for item in attack_hosts:
            hn = net.get(item)
            thread = FloodThread(hn)
            threads.append(thread)
            thread.start()
        for thread in threads:
            thread.wait()
    ...
    

    【讨论】:

    • 通过一些改变,它达到了我的预期。
    猜你喜欢
    • 2012-03-17
    • 2021-08-30
    • 2021-02-08
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    相关资源
    最近更新 更多