IP - geoiplookup.py
note, it may be slow, better use the bash version /security/tool-ip-geoiplookup/
input file (ips.txt)
111.222.333.444
111.222.333.444
111.222.333.444
111.222.333.444
run
./geoiplookup.py ips.txt > ip_country.txt
ipcheck.py script
#!/usr/bin/env python3
# https://github.com/christophetd/geolocate-ips
import sys
import requests
if len(sys.argv) < 2:
sys.stderr.write('Usage: python geolocate.py ip_file\n')
sys.stderr.write('ip_file should be a file containing one IP per line\n')
exit(1)
def read_ip_list():
ip_file = sys.argv[1]
try:
with open(ip_file) as file:
return file.read().splitlines()
except IOError:
sys.stderr.write('Unable to open IP file {}\n'.format(ip_file))
exit(1)
def get_ip_country(ip):
response = requests.get('http://ip2c.org/{}'.format(ip))
error_codes = ['WRONG INPUT', 'UNKNOWN'] # http://about.ip2c.org/#outputs
country_name = response.text.split(';')[3]
if response.status_code != 200 or country_name in error_codes:
sys.stderr.write('Could not retrieve any geolocation info for IP {} - skipping.\n'.format(ip))
return False
if country_name == 'Reserved':
sys.stderr.write('Could not retrieve any geolocation for IP {} - it looks like a private address\n'.format(ip))
return False
country_code = response.text.split(';')[1]
return {
'country_name': country_name,
'country_code': country_code
}
ip_list = read_ip_list()
for ip in ip_list:
result = get_ip_country(ip)
if result:
print("{},{},{}".format(ip, result['country_code'], result['country_name']))
output file (ip_country.txt)
111.222.333.444,CN,China
111.222.333.444,MX,Mexico
111.222.333.444,BR,Brazil
111.222.333.444,ML,Mali