i know.. some ranges are not valid. More checking needs to be done
#!/bin/bash
#
# ./shping.sh 192.168.0.1-150
function usage() {
echo "usage example: $0 192.168.0.1-100"
exit 1
}
IFS='.'
iprange=($@) # 192 168 0 1-100
IFS=$'\040\t\n' # printf "$IFS"|hexdump -bc
srange=${iprange[3]/%-*/} # 1
erange=${iprange[3]/#*-/} # 100
j=0
# Do some checking
[ "$#" == "1" ] && # only 1 arg
[ ${iprange[*]//[[:digit:]]/} ] && # does it exist?
[ ${#iprange[@]} == 4 ] && # x.x.x.x
[ ${iprange[*]//[[:digit:]]/} == "-" ] ||
usage
# values within 0.0.0.0-255.255.255.255
for i in "${iprange[@]:0:3}" "$srange" "$erange"; do
[ $i ] &&
[ $i -le 255 ] &&
[ $i -ge 0 ] ||
usage
done
# change 192.168.0.10-1 to 192.168.0.1-10
if [ $srange -gt $erange ]; then
trange=$srange
srange=$erange
erange=$trange
fi
# add dots & feed the array
for ((i=$srange; $erange >= i; i++)) do
iplist[$j]="${iprange[@]:0:3}.$i"
iplist=("${iplist[@]// /.}")
(( j++ ))
done
# now feed ping with random ips
for i in ${iplist[@]}; do
r=$(( RANDOM%${#iplist[@]} ))
ping -c1 -s0 ${iplist[$r]}>/dev/null && echo ${iplist[$r]} &
iplist[$r]=""
iplist=(${iplist[@]})
done
exit 0;
1 comments:
Hi mate,
quick. simple. useful.
THANKS
tony
Post a Comment