mininet和scapy中的多线程或多处理

2024-10-02 22:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

...
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)
...

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


Tags: 项目函数py脚本myh2itemh1
1条回答
网友
1楼 · 发布于 2024-10-02 22:35:11

你应该把你想异步运行的任务的一部分描述成一个函数,或者(我认为更好,但是其他人可能不同意)作为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()
...

相关问题 更多 >