import ipaddress
import socket


def check_address(address):
    original = ipaddress.ip_address(address)
    try:
        hostname = socket.gethostbyaddr(str(original))[0].rstrip(".").lower()
    except (socket.herror, socket.gaierror, OSError) as error:
        return {"ip": str(original), "error": str(error), "forward_matches": False}
    try:
        answers = socket.getaddrinfo(hostname, None, socket.AF_UNSPEC, socket.SOCK_STREAM)
        addresses = {ipaddress.ip_address(answer[4][0]) for answer in answers}
    except (socket.gaierror, OSError) as error:
        return {"ip": str(original), "ptr": hostname, "error": str(error),
                "forward_matches": False}
    return {"ip": str(original), "ptr": hostname,
            "googlebot_domain": hostname.endswith(".googlebot.com"),
            "forward_matches": original in addresses,
            "addresses": sorted(str(address) for address in addresses)}


if __name__ == "__main__":
    import json
    import sys
    for address in sys.argv[1:]:
        try:
            print(json.dumps(check_address(address)))
        except ValueError as error:
            print(json.dumps({"input": address, "error": str(error)}))
