diff --git a/lf_curl.sh b/lf_curl.sh new file mode 100755 index 00000000..38664c26 --- /dev/null +++ b/lf_curl.sh @@ -0,0 +1,94 @@ +#!/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++)) + head -1 /tmp/lf_curl_so.$$ + head -1 /tmp/lf_curl_h.$$ + fi + sleep 1 +done +echo "Finished $NUM_LOOPS, $NUM_GOOD successful" +# \ No newline at end of file