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

如何批量ping指定网段IP并单独获取每个IP的返回状态

问题原因

  • 循环逻辑错误:num初始赋值为2,循环内先做num自增再输出IP,会漏掉192.168.1.2,第一个输出的IP为192.168.1.3。
  • ping参数使用错误:Linux环境下-t是设置TTL的参数,指定超时应该用-W(大写),你写的-t3不会起到3秒超时的作用。
  • xargs默认仅返回自身执行是否成功的状态,不会返回每一条ping命令的独立退出码,原脚本也没有对每个IP的执行结果做单独的状态捕获和输出,自然无法区分每个IP的连通性。

修复后脚本(xargs并发版本,匹配你原本的实现思路)

subnet="192.168.1"
seq 2 254 | xargs -n 1 -I {} -P 50 bash -c '
  ping -c 2 -W 3 "'"${subnet}"'.{}" > /dev/null 2>&1
  [ $? -eq 0 ] && echo "'"${subnet}"'.{} 可达" || echo "'"${subnet}"'.{} 不可达"
'

如果你习惯用for循环的写法,也可以用下面的版本:

subnet="192.168.1"
for i in {2..254}; do
  (
    ping -c 2 -W 3 "${subnet}.${i}" > /dev/null 2>&1
    [ $? -eq 0 ] && echo "${subnet}.${i} 可达" || echo "${subnet}.${i} 不可达"
  ) &
done
wait

补充说明

  • 两个版本都可以输出每个IP的独立连通状态,xargs版本默认限制最多50个并发,执行效率更高不会占用过多进程资源。
  • 如果需要保留ping命令的详细返回结果,删除代码里的> /dev/null 2>&1即可。
  • 如果是在macOS环境下执行,ping的超时参数改为-t 3即可。

内容的提问来源于stack exchange,提问作者user12744746

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:36:02