mininet 和 scapy 中的多线程或多处理
Multithreading or multiprocessing in mininet and scapy
作为大学项目的一部分,我使用 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 中使用它?
提前致谢。
您应该将您想要异步 运行 的任务部分表述为一个函数,或者(在我看来更好,但其他人可能不同意)作为 run
方法 threading.Thread
子类。然后为每个主机启动一个新的thread/process,然后等待它们全部完成。该代码将类似于以下内容(未经测试):
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()
...
作为大学项目的一部分,我使用 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 中使用它?
提前致谢。
您应该将您想要异步 运行 的任务部分表述为一个函数,或者(在我看来更好,但其他人可能不同意)作为 run
方法 threading.Thread
子类。然后为每个主机启动一个新的thread/process,然后等待它们全部完成。该代码将类似于以下内容(未经测试):
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()
...