我正试图用Python编写一个非常简单的端口扫描程序,在我决定引入线程来加快速度之前,它一直工作得很好。在
我想在结尾加上一个简短的摘要,其中列出了打开的端口。我把它放在一个名为finish的函数中。然而,自从引入线程之后,不管我把它放在哪里,这个摘要都会作为代码输出的第一行出现。在
有没有一种方法可以有效地将线程限制在我需要它的函数上,然后在它到达summary/finish()之前关闭它,还是我犯了一个明显的错误?任何帮助都将不胜感激。在
代码:
from socket import *
from threading import *
screenLock = Semaphore(value=1)
open_ports = []
def scan(ip,port):
try:
s = socket(AF_INET, SOCK_STREAM)
s.connect((ip, port))
screenLock.acquire()
print ('Scanning ', ip , 'on port', port)
print("Port",port, "is open")
s.close()
summary(port)
except:
screenLock.acquire()
print ('Scanning ', ip , 'on port', port)
print("Port",port,"is closed")
finally:
screenLock.release()
s.close()
def loop():
for i in range(1,100):
ip = '192.168.0.38'
port = int(i)
t = Thread(target=scan, args=(ip,int(port)))
t.start()
return
def summary(port):
global open_ports
open_ports.append(port)
return
def main():
loop()
finish()
def finish():
print('The following ports are open:',open_ports)
main()
您必须等待所有线程完成:
相关问题 更多 >
编程相关推荐