线程化python SSH端口扫描程序不';行不通

线程化python SSH端口扫描程序不';行不通,python,python-3.x,sockets,ssh,Python,Python 3.x,Sockets,Ssh,因此,我试图制作一个程序,在列表中扫描SSH端口的IP。由于进程非常长,我尝试使用线程(如果它更适合程序,我可以使用多处理)来加快速度,但我遇到了一个问题,程序说“尝试IP”(这就是每次扫描IP时的意思)很多时候没有给出结果,然后它给出了结果(比IP扫描的结果要少得多),并且有其他奇怪的模式。它应该说是尝试IP,然后是结果,但事实并非如此,即使找到了SSH端口打开的IP,结果也总是失败。在某个时候,我很好奇SSH是否遗漏了IP,所以我搜索了一个应该有很多IP的IP范围,结果只抓到了2000个,即

因此,我试图制作一个程序,在列表中扫描SSH端口的IP。由于进程非常长,我尝试使用线程(如果它更适合程序,我可以使用多处理)来加快速度,但我遇到了一个问题,程序说“尝试IP”(这就是每次扫描IP时的意思)很多时候没有给出结果,然后它给出了结果(比IP扫描的结果要少得多),并且有其他奇怪的模式。它应该说是尝试IP,然后是结果,但事实并非如此,即使找到了SSH端口打开的IP,结果也总是失败。在某个时候,我很好奇SSH是否遗漏了IP,所以我搜索了一个应该有很多IP的IP范围,结果只抓到了2000个,即使发布该类内容的人说他得到了45000个IP,是的,我知道,可能发生了一些事情,有大量人关闭了SSH,但没有,我下载了一个叫做“扫描存档”的东西由一些罗马尼亚黑客制作,里面有一个SSH端口扫描仪,当我扫描相同的IP范围时,我捕获了6600个。 那么有人能帮我找出代码的错误并告诉我如何改进它吗

导入套接字
导入线程
从队列导入队列
从日期时间导入日期时间
time\u start=datetime.now()
SSH_ips=[]
def扫描(ip_编号):
ip\u try=ip\u列表[ip\u编号]
端口=22
尝试:
打印(“IP”)
sock=socket.socket(socket.AF\u INET,socket.sock\u流)
结果=sock.connect\u ex((ip\u try,端口))
如果结果==0:
SSH\u ips.append(ip\u try)
打印(“找到%d”%(ip_尝试))
其他:
打印(“不起作用”)
除:
通过
def gulag():
尽管如此:
worker=q.get()
扫描(工人)
q、 任务完成()
q=队列()
对于范围内的x(15000):
t=线程。线程(目标=古拉格)
t、 daemon=True
t、 开始()
对于范围(065026)内的工作人员:
q、 put(工人)
q、 加入
time\u finish=datetime.now()
所用时间=完成时间-开始时间
ip\u列表长度=len(SSH\u ip)
SSH_ips.sort()
打印(“在%s中找到%s个ip”。%(ip列表长度,经过的时间));
打印(SSH_ips)
。。。代码有什么问题,请告诉我如何改进

请不要只在异常时传递,而是检查它失败的原因。很可能是由于您的运行违反了打开文件描述符的限制,因此无法创建新套接字。在这种情况下,当然不会尝试连接到此IP地址

    result = sock.connect_ex((ip_try,port))
    if result == 0:
        SSH_ips.append(ip_try)
        print("Found %d" % (ip_try))

    else:
        print("Didn't work")

类似于此,请检查为什么
connect\u ex
失败,而不是仅仅假设它失败,因为另一端没有打开的端口

“代码有什么问题”什么代码?
15000
是一个非常繁琐的程序,忘了放代码,我一眼就看到了,但是我的互联网被一个程序拖慢了,所以加载编辑需要一些时间。
    result = sock.connect_ex((ip_try,port))
    if result == 0:
        SSH_ips.append(ip_try)
        print("Found %d" % (ip_try))

    else:
        print("Didn't work")