Merge branch 'yarikoptic-enh/fakegooglebot' into ENH/ApacheFakeGoogleBot

pull/940/head
Lee Clemens 10 years ago
commit d0986148f0

@ -1,21 +1,32 @@
#!/bin/sh
# Based on: https://isc.sans.edu/forums/diary/When+Google+isnt+Google/15968/
#!/usr/bin/python
# Inspired by https://isc.sans.edu/forums/diary/When+Google+isnt+Google/15968/
#
# Written in Python to reuse built-in Python batteries and not depend on
# presence of host and cut commands
#
import sys
if [ "$#" -ne 1 ]; then
echo "Unexpected number of arguments: $#"
exit 1
else
b="$1"
h=$(host ${b})
if echo ${h} | grep -e ' crawl-.*\.googlebot\.com\.$'; then
h=$(echo ${h} | cut -f5 -d' ')
n=$(host ${h} | cut -f4 -d' ')
if [ "${n}" = "${b}" ] ; then
exit 0
else
exit 1
fi
else
exit 1
fi
fi
def process_args(argv):
if len(argv) != 2:
sys.stderr.write("Please provide a single IP as an argument. Got: %s\n"
% (argv[1:]))
sys.exit(2)
ip = argv[1]
from fail2ban.server.filter import DNSUtils
if not DNSUtils.isValidIP(ip):
sys.stderr.write("Argument must be a single valid IP. Got: %s\n"
% ip)
sys.exit(3)
return ip
def is_googlebot(ip):
import re
from fail2ban.server.filter import DNSUtils
host = DNSUtils.ipToName(ip)
sys.exit(0 if (host and re.match('crawl-.*\.googlebot\.com', host)) else 1)
if __name__ == '__main__':
is_googlebot(process_args(sys.argv))

@ -852,6 +852,14 @@ class DNSUtils:
% (dns, e))
return list()
@staticmethod
def ipToName(ip):
try:
return socket.gethostbyaddr(ip)[0]
except socket.error, e:
logSys.debug("Unable to find a name for the IP %s: %s" % (ip, e))
return None
@staticmethod
def searchIP(text):
""" Search if an IP address if directly available and return

Loading…
Cancel
Save