#!/usr/bin/env fail2ban-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

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)
    if not host or not re.match('.*\.google(bot)?\.com$', host):
       sys.exit(1)
    host_ips = DNSUtils.dnsToIp(host)
    sys.exit(0 if ip in host_ips else 1)

if __name__ == '__main__':
    is_googlebot(process_args(sys.argv))
