【问题标题】:Python port scanner not working as it is supposed toPython 端口扫描程序无法正常工作
【发布时间】:2020-11-28 15:42:02
【问题描述】:

我尝试在 python 中制作一个 ssh 端口扫描器,它获取一个类的每个 ip(例如 13.120.x.y)。到目前为止我没有收到任何错误,但它需要很长时间,并且到目前为止还没有 IP 地址打开端口(我已经运行了 5 分钟)。

编辑:当端口打开时,我似乎确实收到了消息。

import socket
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool

def make_ips(ip_class):
    ip_addresses = [f"{ip_class}.{part3}.{part4}" for part3 in range(0, 256) for part4 in range(0, 256)]
    return ip_addresses


def scan(remoteServerIP):
    print("-" * 60)
    print("Please wait, scanning remote host", remoteServerIP)
    print("-" * 60)
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex((remoteServerIP, 22))
        if result == 0:
            print(f"{remoteServerIP}: Open")
            return remoteServerIP
        sock.close()
    except socket.gaierror:
        print(f'Hostname {remoteServerIP} could not be resolved.')
    except socket.error:
        print(f"Couldn't connect to server {remoteServerIP}")


def main():
    t1 = datetime.now()
    ipclass = str(input("please input the ip class: "))
    ips = make_ips(ipclass)
    hostnames = []
    pool = ThreadPool(13)
    hostnames = pool.map(scan, ips)
    pool.close()
    pool.join()
    open("hosts.txt", "w").write(hostnames).splitlines()
    t2 = datetime.now()
    total =  t2 - t1
    print('Scanning Completed in: ', total)

if __name__ == "__main__":
    main()

【问题讨论】:

  • 你是如何输入的?能举个例子吗?
  • @AbhishekRai 您从 make_ips 获得的是使用相同 IP 类的 IP 地址列表。例如:如果 ip 类是 15.30,那么生成的 ip 地址将从 15.30.0.0 到 15.30.255.255。
  • 否 ..您输入的内容是什么?什么价值观?
  • @AbhishekRai 正如我所说,如果我想扫描从 15.30.0.0 到 15.30.255.255 的所有 IP 地址,那么输入将为 15.30
  • @AbhishekRai 不,我只对 ssh 端口 (22) 感兴趣

标签: python python-3.x multithreading sockets port


【解决方案1】:

我修好了。我不得不使用更多线程。

import socket
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool

def make_ips(ip_class):
    ip_addresses = [f"{ip_class}.{part3}.{part4}" for part3 in range(0, 256) for part4 in range(0, 256)]
    return ip_addresses


def scan(remoteServerIP):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex((remoteServerIP, 22))
    if result == 0:
        print(f"{remoteServerIP}: Open")
        return remoteServerIP
    sock.close()


def main():
    ipclass = str(input("please input the ip class: "))
    ips = make_ips(ipclass)
    pool = ThreadPool(20000)
    hostnames = pool.map(scan, ips)
    pool.close()
    pool.join()
    for hostname in hostnames:
        if hostname:
            open("hosts.txt", "a").write(f"{hostname}\n")


if __name__ == "__main__":
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多