Здесь ваш код не работает.
threading.Thread(target = ScanLow).start()
threading.Thread(target = ScanHigh).start()
e = a + b
while e < 2000:
f = raw_input()
Сразу после запуска темы вы установите значение e
. Однако после этого вы никогда не обновите e
, поэтому цикл никогда не завершится.
Также кажется, что вы делаете это, чтобы дождаться окончания обоих потоков. Метод join()
- лучший способ сделать это.
from threading import Thread
threads = []
threads.append(Thread(target = ScanLow))
threads.append(Thread(target = ScanHigh))
for thread in threads:
thread.start()
//both threads are running
for thread in threads:
thread.join()
//both threads have stopped
Изменить:
Не связанный с вашим вопросом, но полезный комментарий. Обе ваши функции сканирования делают одно и то же. Вы можете заменить их одной функцией, которая принимает диапазон сканирования в качестве аргументов, и запустить оба потока одной функцией.
from threading import Thread
def Scan(start, stop):
global a
global c
for i in range(start, stop):
s = socket(AF_INET, SOCK_STREAM)
result = s.connect_ex((TargetIP, i))
if(result == 0) :
c = "Port %d: OPEN\n" % (i,)
s.close()
a += 1
threadCount = 2
totalPorts = 2000
threads = []
for start in xrange(0, totalPorts, totalPorts/threadCount):
threads.append(Thread(target = Scan, args = (start, totalPorts/threadCount)))
for thread in threads:
thread.start()
//both threads are running
for thread in threads:
thread.join()
//both threads have stopped
И теперь вы можете легко настроить количество потоков и портов для сканирования.