扫描内网的ssh,用于设备搬家后dhcp不知道ip是什么的情况
File: test.py
import socket
import threading
from concurrent.futures import ThreadPoolExecutor
# 配置部分
SUBNET_PREFIX = "192.168.10." # 你的网段前缀
Check_User = "xy3" # 目标用户名 (仅作提示用)
SSH_PORT = 22 # SSH 默认端口
TIMEOUT = 0.5 # 超时时间(秒),越短越快,但网络差可能会漏
# 用于存储结果的列表
found_devices = []
print_lock = threading.Lock()
def check_ip(ip_end):
"""
测试单个IP的22端口是否开放
"""
ip = f"{SUBNET_PREFIX}{ip_end}"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(TIMEOUT)
try:
# 尝试连接端口
result = s.connect_ex((ip, SSH_PORT))
if result == 0:
with print_lock:
print(f"[+] 发现设备: {ip} (SSH端口开放)")
found_devices.append(ip)
s.close()
except Exception:
pass
def main():
print(f"--- 开始扫描网段 {SUBNET_PREFIX}0/24 下的 SSH 设备 ---")
print(f"--- 目标: 寻找可能登录 {Check_User} 的设备 ---")
# 使用线程池并发扫描 1-254
# max_workers=50 表示同时测试50个IP,速度很快
with ThreadPoolExecutor(max_workers=50) as executor:
executor.map(check_ip, range(1, 255))
print("\n--- 扫描结束 ---")
if found_devices:
print("发现以下 IP 开启了 SSH,请尝试连接:")
for ip in found_devices:
print(f"ssh {Check_User}@{ip}")
# 如果你有密码,可以在这里尝试自动登录脚本(需要paramiko库),
# 但通常手动测试这几个IP就够了。
else:
print("未发现开启 SSH 的设备。")
print("建议:")
print("1. 检查网线是否亮灯。")
print("2. 确认你的电脑 IP 也在 192.168.10.x 网段。")
if __name__ == "__main__":
main()