ssh端口探测 端口测试
目录
开放端口测试:
ssh端口探测
开放端口测试:
import socket
import threading
from time import sleepdef scan_port(ip, port, timeout=1):"""探测单个端口是否开放"""try:# 创建socket对象sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(timeout)# 尝试连接result = sock.connect_ex((ip, port))if result == 0:print(f"端口 {port} 开放")sock.close()except Exception as e:pass # 忽略连接过程中的异常(如超时、网络错误等)def port_scan(ip, start_port, end_port, thread_num=100):"""批量探测端口范围,使用多线程提高效率"""print(f"开始探测 {ip} 的端口范围 {start_port}-{end_port}...")threads = []for port in range(start_port, end_port + 1):# 创建线程t = threading.Thread(target=scan_port, args=(ip, port))threads.append(t)t.start()# 控制线程数量,避免过多线程导致系统资源耗尽if len(threads) >= thread_num:for t in threads:t.join()threads = []# 等待剩余线程完成for t in threads:t.join()print("端口探测完成")if __name__ == "__main__":# 注意:以下IP和端口范围仅为示例,使用时必须替换为你拥有合法授权的目标target_ip = "175.27.214.223" # 目标IP(需合法授权)start = 1 # 起始端口end = 20000 # 结束端口(建议先扫描常用端口,如1-1000)port_scan(target_ip, start, end)
ssh端口探测
知道ip地址和用户名密码,不知道端口是多少,这个是探测ssh端口的:
import socket
import threadingdef scan_port_for_ssh(ip, port, timeout=1):"""探测单个端口是否开放,并尝试读取 SSH banner(如果有)"""try:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(timeout)res = sock.connect_ex((ip, port))if res != 0:# 端口未开放或不可达sock.close()return# 端口开放banner = Nonetry:# 读取对方可能主动发来的 banner(许多 SSH 服务会在建立连接后发送)banner = sock.recv(1024).decode(errors='ignore').strip()except socket.timeout:banner = Noneexcept Exception:banner = Noneif banner:# 如果 banner 中包含 SSH,则很大概率是 SSH 服务if "SSH" in banner.upper():print(f"[{port}] 开放 — 检测到 SSH banner: {banner}")# else:# print(f"[{port}] 开放 — 读取到 banner,但未包含 'SSH':{banner}")sock.close()except Exception as e:# 这里忽略细节错误,避免大量噪音;可在调试时打印 e# print(f"port {port} error: {e}")passdef port_scan(ip, start_port=None, end_port=None, ports_list=None, thread_num=200, timeout=1):"""探测端口:- 可传 ports_list (优先),例如 [22,2222,2200]- 或者传 start_port 和 end_port 扫描范围"""if ports_list is None:if start_port is None or end_port is None:raise ValueError("请提供 ports_list 或 start_port 和 end_port")ports = range(start_port, end_port + 1)print(f"开始探测 {ip} 的端口范围 {start_port}-{end_port} ...")else:ports = ports_listprint(f"开始探测 {ip} 的端口列表: {ports_list} ...")threads = []for port in ports:t = threading.Thread(target=scan_port_for_ssh, args=(ip, port, timeout))threads.append(t)t.start()# 控制同时活跃线程数,避免资源耗尽if len(threads) >= thread_num:for th in threads:th.join()threads = []# 等待剩余线程完成for th in threads:th.join()print("端口探测完成")if __name__ == "__main__":target_ip = "175.27.214.223" # 请确保你有授权# 建议先检查常见 SSH 端口与常用替代端口start_port=22end_port=5000# port_scan(target_ip, start_port=1, end_port=2000, thread_num=200, timeout=1)port_scan(target_ip, start_port=22,end_port=5000, thread_num=50, timeout=1)