You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.0 KiB

import argparse
import requests
import os
import re
import sys
import traceback
def query_api(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()
if 'message' in json_data:
print('\nThe IP "{}" is {}'.format(x,
json_data['message']))
# Print out wanted JSON data formatted nicely
else:
print('\nCity\State: {}, {}\n'
'Country: {}\n'
'ISP: {}\n'
'IP: {}\n'
'MX: {}'.format(
json_data['city'],
json_data['regionName'],
json_data['country'],
json_data['isp'],
json_data['query'],
x))
except KeyError:
traceback.print_exc(file=sys.stdout)
print('Key Error')
print('JSON: ')
print(json_data)
def findMX(host):
p = os.popen('host -t MX ' + host)
# initialize dicts
std_out = []
split = []
MXServer = []
# append terminal output to variable std_out
for line in p:
if re.search('not found', line):
query_api([host])
break
elif re.search('domain name pointer', line):
query_api([host])
extra = re.search('.in-addr.arpa .*',str(line))
thing = line.replace(extra.group(0), '')
query_api([thing.rstrip()])
break
std_out.append(line)
p.close
# create iterator
i = 0
# split line into dict and return MX servers
for x in std_out:
split = std_out[i].split()
MXServer.append(split[-1])
i = i + 1
query_api(MXServer)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("host", help="hostname to lookip")
args = parser.parse_args()
findMX(args.host)