扫描内网的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()
Last modification:January 24, 2026
如果觉得我的文章对你有用,请随意赞赏