【发布时间】: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