#!/bin/bash # lbd (load balancing detector) detects if a given domain uses # DNS and/or HTTP Load-Balancing (via Server: and Date: header and diffs between server answers) # # License: GPL-v2 # # Written by Stefan Behte # Contact me, if you have any new ideas, bugs/bugfixes, recommondations or questions! # Please also contact me, if you just like the tool. :) # # Stefan dot Behte at gmx dot net # QUERIES=50 DOMAIN=$1 METHODS="" echo echo "lbd - load balancing detector 0.1 - Checks if a given domain uses load-balancing." echo " Written by Stefan Behte (http://ge.mine.nu)" echo " Proof-of-concept! Might give false positives." if [ "$1" = "" ] then echo "usage: $0 [domain]" echo exit -1 fi echo -e -n "\nChecking for DNS-Loadbalancing:" NR=`host $DOMAIN | grep -c "has add"` if [ $NR -gt 1 ] then METHODS="DNS" echo " FOUND" host $DOMAIN | grep "has add" echo else echo " NOT FOUND" fi echo -e "Checking for HTTP-Loadbalancing ["Server"]: " for ((i=0 ; i< $QUERIES ; i++)) do printf "HEAD / HTTP/1.0\r\n\r\n" | nc $DOMAIN 80 > .nlog S=`grep -i "Server:" .nlog | awk -F: '{print $2}'` if ! grep "`echo ${S}| cut -b2-`" .log &>/dev/null then echo "${S}" fi cat .nlog >> .log done NR=`sort .log | uniq | grep -c "Server:"` if [ $NR -gt 1 ] then echo " FOUND" METHODS="$METHODS HTTP[Server]" else echo " NOT FOUND" fi echo rm .nlog .log echo -e -n "Checking for HTTP-Loadbalancing ["Date"]: " D4= for ((i=0 ; i<$QUERIES ; i++)) do D=`printf "HEAD / HTTP/1.0\r\n\r\n" | nc $DOMAIN 80 | grep "Date:" | awk '{print $6}'` printf "$D, " Df=$(echo " $D" | sed -e 's/:0/:/g' -e 's/ 0/ /g') D1=$(echo ${Df} | awk -F: '{print $1}') D2=$(echo ${Df} | awk -F: '{print $2}') D3=$(echo ${Df} | awk -F: '{print $3}') if [ "$D4" = "" ]; then D4=0; fi if [ $[ $D1 * 3600 + $D2 * 60 + $D3 ] -lt $D4 ] then echo "FOUND" METHODS="$METHODS HTTP[Date]" break; fi D4="$[ $D1 * 3600 + $D2 * 60 + $D3 ]" if [ $i -eq $[$QUERIES - 1] ] then echo "NOT FOUND" fi done echo -e -n "\nChecking for HTTP-Loadbalancing ["Diff"]: " for ((i=0 ; i<$QUERIES ; i++)) do printf "HEAD / HTTP/1.0\r\n\r\n" | nc $DOMAIN 80 | grep -v -e "Date:" -e "Set-Cookie" > .nlog if ! cmp .log .nlog &>/dev/null && [ -e .log ] then echo "FOUND" diff .log .nlog | grep -e ">" -e "<" METHODS="$METHODS HTTP[Diff]" break; fi cp .nlog .log if [ $i -eq $[$QUERIES - 1] ] then echo "NOT FOUND" fi done rm .nlog .log if [ "$METHODS" != "" ] then echo echo $DOMAIN does Load-balancing. Found via Methods: $METHODS echo else echo echo $DOMAIN does NOT use Load-balancing. echo fi