Python固定端口IP段扫描脚本运行过慢,如何实现并发请求提速?
Python IP段扫描脚本并发改造方案
核心优化点
- 采用线程池实现IO密集型请求并发,默认并发数设置为25,可自行调整至20~30区间
- 新增请求超时配置,避免无响应IP长时间阻塞任务
- 修复原代码IP段扫描遗漏问题:第三段IP递增后,第四段IP会从0开始扫描而非保持初始输入的起始值
- 新增线程锁保证多线程场景下文件写入安全,不会出现内容错乱
- 移除原代码中未定义的
print_look上下文逻辑(原代码遗留错误会直接导致运行报错)
完整改造后代码
import requests import colorama import threading from concurrent.futures import ThreadPoolExecutor from colorama import Fore, Back, Style colorama.init(autoreset=True) # 配置参数 MAX_WORKERS = 25 # 并发请求数,可自行调整为20~30之间 REQUEST_TIMEOUT = 5 # 单个请求超时时间,单位秒 OUTPUT_FILE = r"D:\prueba.txt" # 全局文件锁,避免多线程写文件冲突 file_lock = threading.Lock() # 登录请求参数 payload = { 'username': 'username', 'password': 'password', "login_button": 'Login' } def scan_url(enlace): """单个IP扫描逻辑""" try: with requests.Session() as s: peticion = s.get(enlace, timeout=REQUEST_TIMEOUT) if peticion.status_code == 200: s.post(enlace, data=payload, timeout=REQUEST_TIMEOUT) # 加锁保证打印和写文件安全 with file_lock: print(enlace + Fore.GREEN + " Respuesta:" + Fore.GREEN + "EXITO") with open(OUTPUT_FILE, "a+", encoding="utf8") as panel: panel.write(enlace + "\n") except Exception: pass if __name__ == "__main__": ip = input("Ingrese ip a escanear: ") puerto = input("Ingrese puerto: ") parte = ip.split(".") parts_0 = parte[0] parts_1 = parte[1] parts_2 = int(parte[2]) parts_3 = int(parte[3]) # 生成所有待扫描的URL url_list = [] for n in range(parts_2, 256): # 第三段IP为起始值时,第四段从输入的起始值开始,否则从0开始 start_x = parts_3 if n == parts_2 else 0 for x in range(start_x, 256): enlace = f"http://{parts_0}.{parts_1}.{n}.{x}:{puerto}/login.php" url_list.append(enlace) # 先清空输出文件 with open(OUTPUT_FILE, "w") as f: pass # 启动线程池并发扫描 print(f"开始扫描,总任务数:{len(url_list)},并发数:{MAX_WORKERS}") with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: executor.map(scan_url, url_list) print("扫描完成")
调整说明
- 如需修改并发数,直接调整
MAX_WORKERS参数即可 - 如网络环境较差,可适当调高
REQUEST_TIMEOUT的数值 - 原逻辑保持不变:仅GET请求状态码为200的IP会发送登录请求,符合条件的IP写入指定本地文件
内容的提问来源于stack exchange,提问作者nicolas
相关产品推荐
相关产品推荐

