2017-02-08 29 views
1

Ich versuche einen Threading-Port-Scanner mit python3.5, einem einfachen TCP_Full Connection Port Scanner, zu erstellen. Ich habe es schwer, Sperren zu verwenden. Ich habe bereits versucht, Semaphore und die Lock() - Funktion im Threading-Modul zu verwenden.Python Port Threading

Das Skript funktioniert gut, aber die Ausgabe (die geschlossenen oder geöffneten Ports in diesem Fall) kommt nur in einer sehr ungeordneten Art und Weise, als gäbe es überhaupt keine Sperren. Ich habe versucht, es mit Sperren und ohne Sperren zu verwenden, und die Ausgabe kommt auf eine ungeordnete Art und Weise in beide Richtungen. Mache ich etwas falsch ?

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() 

Antwort

0

Das Problem ist, dass Sie nicht die Sperre verwenden zu drucken, sollten Sie verwenden:

s1.connect((host,port)) 
    with print_lock: 
     print("whatever you want to print") 

statt

s1.connect((host,port)) 
print_lock.acquire() 
print('[>]Port:',port,'is !!Opened!!')