Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Python端口线程_Multithreading_Python 3.x - Fatal编程技术网

Multithreading Python端口线程

Multithreading Python端口线程,multithreading,python-3.x,Multithreading,Python 3.x,我正在尝试用python3.5构建一个线程端口扫描程序,这是一个简单的TCP_全连接端口扫描程序。我很难使用锁,我已经尝试在线程模块中使用信号量和Lock()函数 脚本工作正常,但输出(本例中为关闭或打开的端口)非常混乱,就像根本没有锁一样。我试着用带锁和不带锁的方式使用它,结果在两种方式下都是无序的。我做错什么了吗 import threading,socket from queue import Queue host='www.google.co.uk' print_lock = thre

我正在尝试用python3.5构建一个线程端口扫描程序,这是一个简单的TCP_全连接端口扫描程序。我很难使用锁,我已经尝试在线程模块中使用信号量和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()

问题是您没有使用锁进行打印,您应该使用:

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

问题是您没有使用锁进行打印,您应该使用:

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