mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 19:28:00 +00:00
115 lines
2.5 KiB
Bash
Executable File
115 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ##
|
|
## Ping a random ip every second, indefinitely. The ping command
|
|
## has a deadline of *count* seconds and wait time of 1 second.
|
|
## This script is aware of vrf_exec.bash and LF_NO_USE_VRF.
|
|
##
|
|
## Example Usage:
|
|
##
|
|
## Ping a random ip once from port br0 every second:
|
|
## ./rping.bash -p br0 -c 1
|
|
##
|
|
## Default to eth1, ping 4 random IPs, ping each ip 10 times
|
|
## ./rping.bash -r 4 -c 10
|
|
##
|
|
## Ping 4 random IPs, ping each ip 10 times, from port br1
|
|
## ./rping.bash -r 4 -c 10 -pbr1
|
|
##
|
|
## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ##
|
|
# set -vux
|
|
|
|
HL="/home/lanforge"
|
|
HL_VX="$HL/vrf_exec.bash"
|
|
UV=1
|
|
if [ -f $HL/LF_NO_USE_VRF ]; then
|
|
UV=0
|
|
fi
|
|
if [ ! -x $HL_VX ]; then
|
|
UV=0
|
|
fi
|
|
|
|
usage() {
|
|
echo "Usage: $0 [-p port] [-c count of pings per ip] [-r number random ips] [-d seconds duration]"
|
|
}
|
|
|
|
PORT=eth1
|
|
COUNT=1
|
|
NUM_IP=0
|
|
DURATION=0
|
|
|
|
while getopts "hi:c:d:p:" OPT; do
|
|
case "${OPT}" in
|
|
c) COUNT="${OPTARG}"
|
|
;;
|
|
d) DURATION="${OPTARG}"
|
|
if (( $DURATION < 0 )); then
|
|
echo "$0: duration cannot be negative"
|
|
exit 1
|
|
fi
|
|
;;
|
|
h) usage
|
|
exit 0
|
|
;;
|
|
i) NUM_IP="${OPTARG}"
|
|
;;
|
|
p) PORT="${OPTARG}"
|
|
;;
|
|
*) echo "Unknown option $OPT";
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ x$PORT == x ]]; then
|
|
echo "$0: no port" >&2
|
|
return 1
|
|
fi
|
|
|
|
# this is unfiltered and will ping network numbers, broadcast numbers and
|
|
# multicast addresses, if you need a specific range, you should add that
|
|
# logic near here
|
|
rand_ip() {
|
|
printf "%d.%d.%d.%d" \
|
|
"$((RANDOM % 256))" \
|
|
"$((RANDOM % 256))" \
|
|
"$((RANDOM % 256))" \
|
|
"$((RANDOM % 256))"
|
|
}
|
|
|
|
my_ping() {
|
|
if [[ x$1 == x ]]; then
|
|
echo "$0: my_ping: cannot ping empty ip" >&2
|
|
return 1
|
|
fi
|
|
|
|
if (($UV == 1)); then
|
|
$HL_VX $PORT ping -c $COUNT -D -i1 -n -w$COUNT -W1 "$1"
|
|
else
|
|
ping -I$PORT -c $COUNT -D -i1 -n -w$COUNT -W1 "$1"
|
|
fi
|
|
}
|
|
|
|
IP_LIST=()
|
|
if (( NUM_IP != 0 )); then
|
|
for n in `seq 1 $NUM_IP`; do
|
|
IP_LIST+=($(rand_ip))
|
|
done
|
|
fi
|
|
|
|
counter=0;
|
|
mod=$NUM_IP
|
|
while true; do
|
|
if (( $NUM_IP > 0 )); then
|
|
i=$(($counter % $NUM_IP))
|
|
randi="${IP_LIST[$i]}"
|
|
counter=$((counter++))
|
|
else
|
|
randi=$(rand_ip)
|
|
fi
|
|
my_ping "$randi"
|
|
sleep 1
|
|
done
|
|
#
|