linux中遍历ip段测连通性最常用for循环+ping,支持直接数字构造(如{1..254})、文件读取(iplist.txt)及端口检测(telnet/nc),并可添加颜色输出、日志记录和地址过滤等增强功能。

Linux 中用循环语句遍历指定 IP 段测试连通性,最常用的是 for 循环 + ping 组合,适合批量检查局域网内设备是否在线。核心思路是:构造 IP 地址、逐个发起轻量级探测、根据返回状态判断结果。
直接生成连续数字构造 IP(推荐初学者)
适用于标准 C 类网段(如 192.168.1.0/24),用 {start..end} 或 seq 生成主机位数字:
- 脚本示例(保存为
ping-scan.sh):
network="192.168.1"
for i in {1..254}; do
ip="$network.$i"
if ping -c 1 -W 1 "$ip" >/dev/null 2>&1; then
echo "$ip ✅ up"
else
echo "$ip ❌ down"
fi
done
-
-c 1控制只发一个包,-W 1设 1 秒超时,避免卡顿 - 输出重定向
/dev/null 2>&1屏蔽冗余信息,保持结果干净 - 可把
{1..254}改成$(seq 10 20)精准扫描某小范围
从文件读取任意 IP 列表(灵活适配不规则地址)
当目标 IP 不连续、跨多个子网或来自资产清单时,更适合从文件加载:
- 先准备 IP 列表文件
iplist.txt,每行一个地址:
10.0.5.100
172.16.0.55
- 脚本中用
for ip in $(cat iplist.txt)遍历: - 注意加双引号
"$ip"防空格或特殊字符出错 - 适合对接 CMDB、导出的 Excel 转文本等运维场景
用 telnet 或 timeout 测试端口连通性(替代 ping)
有些设备禁 ping,但开放 SSH(22)、HTTP(80)等端口,可用 timeout + telnet 替代:
- 示例(检测 22 端口):
if [ $? -eq 0 ]; then echo "$ip:22 open"; fi
-
timeout 1强制 1 秒后终止,防止阻塞 - 需确保系统已安装
telnet(CentOS/RHEL:yum install telnet;Ubuntu:apt install telnet) - 也可换用
nc -zv "$ip" 22 1(nc更轻量,推荐)
增强实用性的小技巧
- 加颜色输出:用
\e[32m(绿)、\e[31m(红)区分状态,提升可读性 - 结果存日志:把
echo行改成echo "...up" >> up.log,便于后续分析 - 跳过网关和广播地址:循环起始设为 2,结束设为 254,避开 .0 和 .255
- 加简单校验:用
[[ $i =~ ^[0-9]+$ ]] && ((i >= 1 && i 防非法输入











