Files
wlan-lanforge-scripts/lf_curl.sh
2019-03-12 16:42:30 -07:00

93 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
[ -f /home/lanforge/lanforge.profile ] && . /home/lanforge/lanforge.profile
CURL=`which curl`;
#echo $CURL;
SOURCE_IP=""
SOURCE_PORT=""
DEST_HOST=""
OUT_FILE=/dev/null
NUM_LOOPS=1
help="$0 options:
-d {destination_url}
-h this help
-i {source ip}
-n {number of times, 0 = infinite}
-o {output file prefix, /dev/null is default}
-p {source port}
E.G.:
$0 -i 10.0.0.1 -p eth1 -o /tmp/output -d http://example.com/
becomes
curl -sqLk --interface 10.0.0.1 -o /tmp/output_eth1 http://example.com/
Best if used from lf_generic_ping.pl to construct commands referencing this script:
./lf_generic_ping.pl --mgr cholla-f19 -r 2 -n curl_ex_ --match 'eth2#' --cmd 'lf_curl.sh -o /tmp/curl_%p.out -i %i -d %d -p %p' --dest http://localhost/
"
while getopts ":d:hi:n:o:p:" OPT ; do
#echo "OPT[$OPT] OPTARG[$OPTARG]"
case $OPT in
h)
echo $help
exit 0
;;
d)
DEST_HOST="$OPTARG"
;;
i)
if [[ $CURL = ~/local/bin/curl ]]; then
SOURCE_IP="--dns-ipv4-addr $OPTARG --interface $OPTARG"
else
SOURCE_IP="--interface $OPTARG"
fi
;;
n)
NUM_LOOPS=$OPTARG
;;
o)
OUT_FILE="$OPTARG"
;;
p)
SOURCE_PORT="--interface $OPTARG"
;;
*)
echo "Unknown option [$OPT] [$OPTARG]"
;;
esac
done
if [[ -z "$DEST_HOST" ]]; then
echo "$help"
exit 1
fi
if [[ x$OUT_FILE != x/dev/null ]] && [[ x$SOURCE_PORT != x ]] ; then
OUT_FILE="-o ${OUT_FILE}_${SOURCE_PORT}"
fi
NUM_GOOD=0
for N in `seq 1 $NUM_LOOPS`; do
$CURL -sqLk --connect-timeout 1 \
--max-time 10 \
-D /tmp/lf_curl_h.$$ \
$OUT_FILE \
$SOURCE_IP \
$DEST_HOST \
> /tmp/lf_curl_so.$$ \
2> /tmp/lf_curl_se.$$
if [[ $? > 0 ]]; then
echo "Failed $DEST_HOST"
head -1 /tmp/lf_curl_se.$$
else
NUM_GOOD=$(( $NUM_GOOD +1))
head -1 /tmp/lf_curl_so.$$
head -1 /tmp/lf_curl_h.$$
fi
sleep 1
done
echo "Finished $NUM_LOOPS, $NUM_GOOD successful"
#