Python端口线程

时间:2017-02-08 13:32:20

标签: multithreading python-3.x

我正在尝试使用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()

1 个答案:

答案 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!!')