【问题标题】:Threaded python SSH port scanner doesn't work线程化 python SSH 端口扫描器不起作用
【发布时间】:2020-01-01 01:15:56
【问题描述】:

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

import socket
import threading
from queue import Queue
from datetime import datetime

time_start = datetime.now()

SSH_ips = []

def scan(ip_number):
    ip_try = ip_list[ip_number]
    port = 22
    try:
        print("Trying IP")
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        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")

    except:
        pass

def gulag():
    while True:
        worker = q.get()
        scan(worker)
        q.task_done()

q = Queue()

for x in range(15000):
    t = threading.Thread(target=gulag)
    t.daemon = True
    t.start()

for worker in range(0, 65026):
    q.put(worker)

q.join()

time_finish = datetime.now()

time_elapsed = time_finish - time_start

ip_list_lenght = len(SSH_ips)

SSH_ips.sort()

print("Found %s IPs in %s." % (ip_list_lenght, time_elapsed));

print(SSH_ips)

【问题讨论】:

  • “代码有什么问题”什么代码?
  • 15000 是很多线程
  • 抱歉,忘记放代码了,我马上就看到了,但是我的互联网被程序变慢了,所以加载编辑需要一些时间。

标签: python python-3.x sockets ssh


【解决方案1】:

...代码有什么问题并告诉我如何改进它?

try:
    print("Trying IP")
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ...
except:
    pass

请不要只pass 处理异常,而是实际检查它失败的原因。您可能违反了打开文件描述符的限制,因此创建新套接字失败。在这种情况下,当然不会尝试连接到该 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_ex 失败,而不是仅仅假设它失败是因为另一端没有开放端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    相关资源
    最近更新 更多