Python Нить не выполняет функцию - PullRequest
0 голосов
/ 05 августа 2020

Я пишу программу, для которой требуется несколько потоков (злоумышленников):

MESSAGE = b"flood"
IP = "127.0.0.1" 
BREAKER_PORT = 5005
CONTROLLER_PORT = 49153
ATTACKER_PORT1 = 49154
ATTACKER_PORT2 = 49155

def send_flood_messages(port_number):
    print("port number: " + str(port_number))
    attacker_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    attacker_socket.bind((IP, port_number))
    x = 0 #used to interchange between attackers to mitigate detection
    counter = 0 #handle replays
    while True:

        frame, meta = receiving_socket.recvfrom(65565)
        
        if len(frame) >= 34:
            UDP_dictionary = promisc.unpack_UDP(frame[34:])

        if UDP_dictionary.get("udp_dest") == CONTROLLER_PORT:
            counter += 1
            if counter == 2:
                time.sleep(float(wait_time))
                print("Sending flood message at time: " + str(time.time()))
                attacker_socket.sendto(MESSAGE, (IP, BREAKER_PORT))
                counter = 0

class attackerThread(threading.Thread):
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name

    def run(self, port_number):
        send_flood_messages(port_number)

attacker1 = attackerThread(1, "attacker1")
attacker2 = attackerThread(2, "attacker2")
attacker1.run(ATTACKER_PORT1)
attacker2.run(ATTACKER_PORT2)

Когда я запускаю оба потока, только один поток выполняется и печатает (первый). Результат выглядит следующим образом:

port number: 49154

Я не могу понять, почему второй поток не выполняет и не выполняет функцию? Я ожидал увидеть следующий результат:

port number: 49154
port number: 49155

1 Ответ

0 голосов
/ 05 августа 2020

Метод run () представляет активность потока AFAIK. Чтобы запустить поток, вы должны использовать threadobject.start (). (и не забудьте про GIL ... :()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...