利用shell实现判断局域网内在线用户有那些

2023-04-16,,

#!/bin/bash
while true; do
  for I in {100..120};do
    ping -c 2 -w 2 192.168.0.$I &>/dev/null
    if [ $? -eq 0 ];then
      echo -e "\033[32;40m 192.168.0.$I is UP.\033[0m"
    else
      echo -e "\033[32;40m 192.168.0.$I is DOWN.\033[0m"
    fi
  done
    break
done


执行结果
[root@localhost ~]# sh ping.sh 
 192.168.0.100 is UP.
 192.168.0.101 is DOWN.
 192.168.0.102 is UP.
 192.168.0.103 is DOWN.
 192.168.0.104 is UP.
 192.168.0.105 is DOWN.
 192.168.0.106 is DOWN.
 192.168.0.107 is DOWN.
 192.168.0.108 is DOWN.
 192.168.0.109 is UP.
 192.168.0.110 is DOWN.
 192.168.0.111 is DOWN.
 192.168.0.112 is DOWN.
 192.168.0.113 is DOWN.
 192.168.0.114 is UP.
 192.168.0.115 is UP.
 192.168.0.116 is DOWN.
 192.168.0.117 is DOWN.
 192.168.0.118 is UP.
 192.168.0.119 is DOWN.
 192.168.0.120 is UP.

实现方案利用ping

ping 命令参数

  -d   使用Socket的SO_DEBUG功能。
  -c<完成次数>   设置完成要求回应的次数。
  -f   极限检测。
  -i<间隔秒数>   指定收发信息的间隔时间。
  -I<网络界面>   使用指定的网络界面送出数据包。
  -l<前置载入>   设置在送出要求信息之前,先行发出的数据包。
  -n   只输出数值。
  -p<范本样式>   设置填满数据包的范本样式。
  -q   不显示指令执行过程,开头和结尾的相关信息除外。
  -r   忽略普通的Routing Table,直接将数据包送到远端主机上。
  -R   记录路由过程。
  -s<数据包大小>   设置数据包的大小。
  -t<存活数值>   设置存活数值TTL的大小。
  -v   详细显示指令的执行过程。