#!/usr/bin/python

## ip-region : v0.2

## http://devsec.org/software/misc/ip-region

## ip-region is a simple command to lookup an IPv4 address in the
## blackholes.us dns lists to determine the IP's country/region.
##
## I use it like this:
##
##   ./ip-region 127.0.0.2
##
## - Thor Kooda
##   2006-08-09

import sys
import socket
import struct
import DNS

def bail( str, err = 1 ):
    sys.stderr.write( str )
    sys.exit( err )

def invert_ipv4( ipv4_str ):
    ip = struct.unpack( "BBBB", socket.inet_aton( ipv4_str ) )
    return "%d.%d.%d.%d" % ( ip[3], ip[2], ip[1], ip[0] )

if len( sys.argv ) != 2:
    bail( "Usage: %s <ip>\n" % sys.argv[ 0 ] )

ipv4_str = sys.argv[ 1 ]

try:
    socket.inet_aton( ipv4_str )
except:
    bail( "error: invalid ip: ", ipv4_str )

ipv4_istr = invert_ipv4( ipv4_str )

DNS.ParseResolvConf()

r = DNS.DnsRequest( name = ipv4_istr + ".countries.blackholes.us." ,
                    qtype = "TXT" )

a = r.req()

for i in a.answers:
    if i['typename'] == "TXT":
        print ipv4_str, ":", ' '.join( i['data'] )

