Python-使用套接字进行多线程处理会产生随机结果
我现在真的很困惑我的问题。我想在主机(或子网)列表上发现一个打开的端口 首先让我们展示一下我到目前为止所做的Python-使用套接字进行多线程处理会产生随机结果,python,multithreading,sockets,connection,multiprocessing,Python,Multithreading,Sockets,Connection,Multiprocessing,我现在真的很困惑我的问题。我想在主机(或子网)列表上发现一个打开的端口 首先让我们展示一下我到目前为止所做的 from multiprocessing.dummy import Pool as ThreadPool from netaddr import IPNetwork as getAddrList import socket, sys this = sys.modules[__name__] def threading(ip): sock = socket.socket(so
from multiprocessing.dummy import Pool as ThreadPool
from netaddr import IPNetwork as getAddrList
import socket, sys
this = sys.modules[__name__]
def threading(ip):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.settimeout(this.timeout)
failCode = 0
try:
if sock.connect_ex((str(ip), this.port)) == 0:
#port open
this.count += 1
else:
#port closed/filtered
failCode = 1
pass
except Exception:
#host unreachable
failCode = 2
pass
finally:
sock.close()
#set thread num
threads = 64
#set socket timeout
this.timeout = 1
#set ip list
ipList = getAddrList('8.8.8.0/24')
#set port
this.port = 53
#set count
this.count = 0
#threading
Pool = ThreadPool(threads)
Pool.map_async(threading, ipList).get(9999999)
Pool.close()
Pool.join()
#result
print str(this.count)
脚本工作正常,没有任何错误。但我正在为它打印出来的内容而挣扎
因此,如果我想扫描子网8.8.8.0/24
并发现端口53
。我知道唯一拥有开放dns端口的服务器是8.8.8.8
(谷歌dns)
但是当我多次运行脚本时,print str(this.count)
将随机(在我看来是…)返回0
或1
我还知道:
- 仅扫描
始终打印8.8.8.8
1
- 仅使用一个线程打印
始终/24
1
- 使用256个线程进行
随机打印/24
和0
1
- 更改超时没有帮助
因此,它似乎与线程选项有关,该选项会导致我的计算机出现延迟。但是请注意,我的CPU使用率是第一个错误是:
但是请注意,我的CPU使用率是第一个错误是: 但请注意,我的CPU使用率是