我正在编写一个需要多线程的程序(攻击者):
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
run()方法表示线程的活动AFAIK。 要运行线程,必须使用threadobject.start()。 (别忘了吉尔……:)
相关问题 更多 >
编程相关推荐