Bash编写的网络扫描器运行缓慢,如何优化提升扫描速度?
Bash扫描器优化方案
问题根源
- 原脚本为串行执行,所有IP扫描任务依次排队,单IP无响应时会占用大量等待时间
- ping、nc未设置超时参数,不存活的IP/未开放的端口会导致任务长时间挂起
- 直接加后台执行时,多进程同时写入同一个结果文件会产生IO竞争,且进程执行顺序不固定,最终出现内容穿插、顺序错乱、空行、端口与IP不匹配等问题
优化后实现
核心思路是控制并发数+单IP结果隔离+最终排序汇总,既保证扫描速度,又解决输出混乱问题,优化后扫描/24网段耗时可缩短到10秒内:
#!/bin/bash # 配置网段参数,可根据输入动态替换 i1=192 i2=168 i3=1 i4=1 m1=192 m2=168 m3=1 m4=254 MAX_CONCURRENT=15 # *最大并发数可根据机器/网络性能调整,建议10-20* # 初始化环境 rm -rf /tmp/scan_temp && mkdir -p /tmp/scan_temp > scan.txt # 生成IP列表,用xargs控制并发执行扫描 seq $i4 $m4 | xargs -I {} -P $MAX_CONCURRENT bash -c ' ip="'$i1'.'$i2'.'$i3'.{}" # ping检测存活,超时1秒 ping -c 1 -W 1 $ip > /dev/null 2>&1 if [ $? -eq 0 ]; then echo $ip >> /tmp/scan_temp/$ip # 探测80端口,超时1秒 nc -nvz -w 1 $ip 80 > /dev/null 2>&1 [ $? -eq 0 ] && echo "80" >> /tmp/scan_temp/$ip fi ' # 按IP升序汇总结果 ls /tmp/scan_temp/ | sort -t '.' -k4 -n | xargs cat >> scan.txt # 清理临时文件 rm -rf /tmp/scan_temp
其他更高效的实现方式
如果不限制纯Bash实现,可直接使用专业扫描工具,效率更高:
- nmap快速扫描存活IP+80端口:
nmap -sn -PE -p 80 192.168.1.0/24可直接输出结构化结果 - masscan极速端口扫描:
masscan -p80 192.168.1.0/24 --rate=1000每秒千包速率,几秒就能扫完/24网段
内容的提问来源于stack exchange,提问作者otherOne
相关产品推荐
相关产品推荐

