作者信息:https://home.cnblogs.com/u/huangjiabobk

在Linux中,如何使用脚本,实现判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些?能ping 通则 认为在线。

要在Linux中编写一个脚本来判断192.168.1.0/24网络中哪些IP地址是在线的(即可以ping通),你可以使用Shell脚本结合ping命令来实现。下面是一个简单的示例脚本,它会遍历该子网内的所有IP地址,并打印出可以ping通的IP。

请注意,在运行此脚本之前,确保你有执行该操作的权限,并理解ping大量IP可能会对网络造成一定负担。

#!/bin/bash
# 定义网络和掩码
NETWORK=192.168.1
MASK=24
# 计算子网的第一个和最后一个IP
FIRST_IP=$(($NETWORK<<24))&((1<<32)-1-$((1<<(32-$MASK))))
LAST_IP=$((FIRST_IP | (1<<(32-$MASK))-1))
# 遍历IP范围并ping每个IP
for ip in $(seq $FIRST_IP $LAST_IP); do
# 将数字IP转换为点分十进制格式
PINGABLE_IP=$(printf "%d.%d.%d.%d" $(($ip>>24&0xFF)) $(($ip>>16&0xFF)) $(($ip>>8&0xFF)) $(($ip&0xFF)))
# 尝试ping并检查返回值,通常0表示成功
ping -c 1 -W 1 $PINGABLE_IP > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$PINGABLE_IP is online"
fi
done

保存这个脚本到文件中,例如check_ips.sh,然后给它执行权限并运行:

chmod +x check_ips.sh
./check_ips.sh

解释脚本关键部分:

  • #!/bin/bash 定义了脚本使用的Shell类型。
  • $NETWORK$MASK 变量存储了网络地址和子网掩码信息。
  • 使用位运算计算子网的第一个和最后一个IP地址。
  • seq 命令生成IP地址序列。
  • printf 将计算出的数字IP转换为点分十进制格式。
  • ping -c 1 -W 1 指令尝试向每个IP地址发送一个ICMP请求,并设置超时为1秒。
  • $? 存储上一条命令的退出状态,如果ping成功,则其值为0。
  • 根据ping的结果,脚本输出相应的IP地址是否在线的信息。

综上所述,请根据实际情况调整脚本中的参数,比如增加或减少超时时间等。

posted @   黄嘉波  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波
点击右上角即可分享
微信分享提示