You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:18:00