Многопоточность или многопроцессорность в мининетах и ​​scapy - PullRequest
0 голосов
/ 15 декабря 2018

В рамках университетского проекта я создал топологию с помощью Mininet и попытался генерировать трафик с помощью Scapy.Для генерации TCP-атаки на топологию вызывается скрипт на python с именем «My_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)
...

, когда я вызываю функцию атаки, первый раз «My_SYNflood_attack.py» вызывается «h2», 100 пакетов отправляется полностью, затем этотпроцесс происходит с "h3" и так далее.Проблема в том, что я хочу вызвать функцию одновременно, все хосты в списке (от 'h3' до 'h28') начинают отправлять пакет вместе.Я искал и читал о многопоточности и многопроцессорности, но как я могу использовать их в mininet?
Заранее спасибо.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы должны сформулировать часть задачи, которую вы хотите выполнить асинхронно, как функцию, или (лучше, на мой взгляд, но другие могут не согласиться), как метод run подкласса threading.Thread.Затем запустите новый поток / процесс для каждого хоста, а затем дождитесь их завершения.Код будет выглядеть примерно так (что не проверено):

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