我正在尝试使用python3.5构建一个线程端口扫描程序,这是一个简单的TCP_Full连接端口扫描程序。我很难使用锁,我已经尝试在线程模块中使用Semaphores和Lock()函数。
脚本工作正常,但输出(在这种情况下是关闭或打开的端口)只是以非常混乱的方式出现,就像根本没有锁。我试图用它来锁而没有锁,输出在两种方式都是无序的。难道我做错了什么 ?
import threading,socket
from queue import Queue
host='www.google.co.uk'
print_lock = threading.Lock()
def TCPFull_scan(port):
s1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s1.settimeout(0.2)
try:
s1.connect((host,port))
print_lock.acquire()
print('[>]Port:',port,'is !!Opened!!')
except:
print_lock.acquire()
print('[!]Port:',port,'is closed')
finally:
print_lock.release()
s1.close()
que = Queue()
def c_port():
while True:
port_c = que.get()
TCPFull_scan(port_c)
que.task_done()
for port in range(1,101):
que.put(port)
for scan in range(1,4):
t = threading.Thread(target=c_port)
t.daemon=True
t.start()
que.join()
答案 0 :(得分:0)
问题是你没有使用锁打印,你应该使用:
s1.connect((host,port))
with print_lock:
print("whatever you want to print")
而不是
s1.connect((host,port))
print_lock.acquire()
print('[>]Port:',port,'is !!Opened!!')