如何提升nmap扫描速度?10.0.0.0/8网段探活及端口扫描提速咨询
Nmap 10.0.0.0/8网段扫描提速方案
现有脚本问题
- 当前脚本仅打印扫描命令未实际执行,就算补充
os.system(command)调用,一次性启动255个nmap进程会引发内网拥塞、丢包率飙升,反而会导致扫描结果不准、速度下降,且Python线程无法解决进程级阻塞问题,需要通过控制并发数+优化nmap原生参数解决。
核心优化方案
一、Nmap 原生参数优化(优先级最高)
原生参数优化的效率远高于多进程套壳调用,万兆内网场景可以直接套用以下配置:
- 加入
-T5最高速扫描模板,同时手动调整探针参数:--min-parallelism 200设置最小并行探针数、--max-rtt-timeout 300ms设置响应超时时间,内网延迟低不需要过长等待。 - 必加
-Pn跳过ICMP存活探测、-n跳过DNS解析,两个参数可以节省大量无效等待时间。 - 按需裁剪端口范围:无需全端口扫描时可以指定
--top-ports 1000扫高频端口,必须扫描全端口时再添加-p 1-65535。 - 关闭冗余输出:命令最后加
> /dev/null 2>&1屏蔽控制台打印,仅保留结果文件输出即可。
优化后单条命令示例:nmap -Pn -n -T5 --min-parallelism 200 --max-rtt-timeout 300ms --open -p 1-65535 10.x.0.0/16 -oG nmap10-x.txt > /dev/null 2>&1
二、并发调度优化
不要一次性启动全量扫描进程,用进程池控制并发数,万兆内网场景下10-20个并发即可打满带宽,更高的并发只会引发网络拥堵。
优化后脚本参考:
import os import sys from concurrent.futures import ProcessPoolExecutor # 可根据实际扫描效果调整并发数,万兆内网建议10-20之间 MAX_WORKERS = 15 def nmap_scan(segment): seg_flag = segment.replace('/','_').replace('.','-') command = f"nmap -Pn -n -T5 --min-parallelism 200 --max-rtt-timeout 300ms --open {segment} -oG nmap_result_{seg_flag}.txt > /dev/null 2>&1" os.system(command) print(f"扫描完成: {segment}") if __name__ == "__main__": scan_segments = [] # 可根据需求调整拆分粒度,这里拆为/24网段调度更灵活,也可以替换为/16网段 for x in range(0,256): for y in range(0,256): scan_segments.append(f"10.{x}.{y}.0/24") try: with ProcessPoolExecutor(max_workers=MAX_WORKERS) as executor: executor.map(nmap_scan, scan_segments) except KeyboardInterrupt: print("用户终止扫描") sys.exit(0)
三、进阶提速方案
如果需要进一步压缩扫描时间,可以先使用masscan做全量端口探测,再用nmap做服务识别:
- masscan是专门的高速端口扫描工具,万兆网卡下可以打满带宽,扫完10.0.0.0/8全端口仅需要几分钟,命令示例:
masscan -p1-65535 10.0.0.0/8 --rate 100000 -oL masscan_result.txt - 拿到所有开放端口的IP列表后,再用nmap针对性扫描对应端口的服务信息,整体效率可以提升数倍。
其他注意事项
- 扫描设备有线直连核心交换机,避免无线网络的带宽、丢包限制。
- 关闭扫描设备的防火墙、入侵检测类软件,避免扫描包被本地拦截。
- 扫描过程中不要同时运行其他占用带宽的程序,保障扫描流量优先级。
内容的提问来源于stack exchange,提问作者Charles Hartman
相关产品推荐
相关产品推荐

