diff --git a/ip-api.py b/ip-api.py index 97a50e2..1b17830 100644 --- a/ip-api.py +++ b/ip-api.py @@ -7,14 +7,17 @@ import traceback def query_api(host): + """Queries the ip-api site in order to check geolocation and mx record of + the host""" main_api = 'http://ip-api.com/json/' # For every host do an API request try: for x in host: json_data = requests.get(main_api + x).json() + # Checks to see if there is a 'message' field in the json data and + # prints the message instead of doing a query if 'message' in json_data: - print('\nThe IP "{}" is {}'.format(x, - json_data['message'])) + print('\nThe IP "{}" is {}'.format(x, json_data['message'])) # Print out wanted JSON data formatted nicely else: print('\nCity\State: {}, {}\n' @@ -28,6 +31,8 @@ def query_api(host): json_data['isp'], json_data['query'], x)) + # Added exception handling of key errors to help identify problems when + # reading the json data except KeyError: traceback.print_exc(file=sys.stdout) print('Key Error') @@ -36,6 +41,7 @@ def query_api(host): def findMX(host): + """Looks up the MX record of a host""" p = os.popen('host -t MX ' + host) # initialize dicts @@ -48,9 +54,12 @@ def findMX(host): if re.search('not found', line): query_api([host]) break + # Checs to see if 'domain name pointer' is in the line and finds the ip + # associated with the pointer to do a query on. Created for IPs that do + # not have a easily parsed MX record return. elif re.search('domain name pointer', line): query_api([host]) - extra = re.search('.in-addr.arpa .*',str(line)) + extra = re.search('.in-addr.arpa .*', str(line)) thing = line.replace(extra.group(0), '') query_api([thing.rstrip()]) break