#!/bin/ksh # @(#) Multi ping #..# systems: #..# sites: tag=${0##*/} tm=/tmp/${tag} tmp=${tm}$$ rm -rf ${tm}* usage="Usage: $tag [-l] [-/dev/null || exit lim=${1#-l} ;; -zz[0-9]*) zz=`expr "$1" : '-zz\([0-9]*\)'` [ "$zz" ] || { echo "?? $1 ??"; exit; } ;; [0-9]*) set -A N `echo "$1" | sed 's/\./ /g;s/-/ - /'` # echo ${#N[*]} i=0; while [ $i -lt ${#N[*]} ]; do [ ${N[$i]} = "-" ] && break i=$((i + 1)) done # echo $i if [ ${#N[*]} -gt $((i \* 2 + 1)) ]; then echo "$usage" echo "bad address range format" exit elif [ $i -eq ${#N[*]} ]; then M[0]=${N[0]} [ $i -gt 1 ] && M[1]=${N[1]} [ $i -gt 2 ] && M[2]=${N[2]} [ $i -gt 3 ] && M[3]=${N[3]} else set -A M ${N[*]} j=$((${#N[*]} - 1)) k=$((i - 1)) while [ $j -gt $i ]; do M[$k]=${N[$j]} N[$j]=""; M[$j]="" j=$((j - 1)) k=$((k - 1)) done N[$i]=""; M[$i]="" fi # echo ${N[*]} # echo ${M[*]} #echo ${a}.${b}.${c}.${d} - ${e}.${f}.${g}.${h} ;; *) ;; esac shift done mkdir $tmp || exit cleanup() { (sleep 120; rm -r $tmp) & } trap cleanup 0 : ${zz=5} : ${lim=10} # echo ${N[*]} # echo ${M[*]} w=${N[0]-1} while [ $w -le ${M[0]-254} ]; do x=${N[1]=1} while [ $x -le ${M[1]-254} ]; do y=${N[2]=1} while [ $y -le ${M[2]-254} ]; do z=${N[3]=1} while [ $z -le ${M[3]-254} ]; do n=${w}.${x}.${y}.${z} ( touch $tmp/$n s=`ping $n -n 2` expr "$s" : '.*100% packet loss.*' /dev/null && echo $n is missing || { [ $f ] && echo $n $f echo $n is alive; } rm -f $tmp/$n ) & while [ "`ls $tmp | wc -l`" -gt $lim ]; do sleep $zz done #printf "%d.%d.%d.%d\n" $w $x $y $z z=$((z + 1)) done y=$((y + 1)) done x=$((x + 1)) done w=$((w + 1)) done while [ "`ls $tmp | wc -l`" -gt 0 ]; do sleep $zz done