#!/bin/bash
#< Check multiple RBLs on robtex.com to see if an IP is listed
AWK="/usr/bin/awk"
BASENAME="/usr/bin/basename"
CURL="/usr/bin/curl"
ECHO="/bin/echo"
EGREP="/usr/bin/egrep"
MV="/bin/mv"
PASTE="/usr/bin/paste"
RM="/bin/rm"
SED="/usr/bin/sed"
TR="/usr/bin/tr"
VALIP="./valip"
OUTPUT_FILE="./www.out"
THISPROG=$( ${BASENAME} $0 )
URL_PREFIX="http://www.robtex.com/rbls/"
URL_SUFFIX=".html"
function print_error {
${ECHO} "Error: $@" >&2
}
function print_usage {
{
${ECHO} "Usage: ${THISPROG} <ip_to_check>"
} >&2
}
function check_valip {
if [ ! -x "${VALIP}" ]; then
print_error "This script requires \"valip\"" && exit 1
fi
}
function validate_ip {
# Let valip print it's error if returned
${ECHO} "${IP_ADDRESS}" | ${VALIP}
[[ "$?" -ne "0" ]] && exit 1
}
function check_url {
HTTP_CODE=$( ${CURL} -s -o /dev/null -w%{http_code} ${URL_PREFIX}${IP_ADDRESS}${URL_SUFFIX} )
if [ "${HTTP_CODE}" -ne "200" ]; then
print_error "Issues downloading ${URL_PREFIX}${IP_ADDRESS}${URL_SUFFIX}"
exit 1
fi
}
function get_url {
${CURL} ${URL_PREFIX}${IP_ADDRESS}${URL_SUFFIX} > ${OUTPUT_FILE} 2> /dev/null
}
# relies on strict formatting of the page at www.robtex.com/rbls - if this changes,
# the parsing code will require a change too
function parse_html {
${SED} -n '/<table border=1/,/<\/table/ p' ${OUTPUT_FILE} > ${OUTPUT_FILE}.tmp
${MV} ${OUTPUT_FILE}.tmp ${OUTPUT_FILE}
${EGREP} -v '<table|</table' ${OUTPUT_FILE} |\
${SED} '1,6 d' | ${EGREP} -v '<tr|</tr' |\
${PASTE} - - - - - | ${TR} -d '\t' |\
${SED} -e 's/<[^>]*>/ /g' -e 's/^[ ]*//' |\
${TR} -s ' ' | while read LINE; do
PARTRESULT=$( ${ECHO} "${LINE}" | ${AWK} '{print $4}' )
if [ "${PARTRESULT}" = "BLACKLISTED" ]; then
RBL=$( ${ECHO} "${LINE}" | ${AWK} '{print $1}' )
URL=$( ${ECHO} "${LINE}" | ${AWK} '{print $2}' )
${ECHO} "WARNING! ${IP_ADDRESS} is listed on ${RBL} [${URL}]"
fi
done
}
function cleanup {
${RM} -f ${OUTPUT_FILE} ${OUTPUT_FILE}.tmp
}
#
# main()
#
# need valip check....
trap 'cleanup; exit 1' 1 2 3 15
if [ "$#" -ne "1" ]; then
print_usage && exit 1
fi
IP_ADDRESS="$1"
validate_ip
check_url
get_url
parse_html
cleanup
exit 0