Geolocating any IP address in a text file with Python
A Python script that will geolocate any IP address found in a text file.
The Python script:
#!/usr/local/bin/python3
# Uses the IP database: https://dev.maxmind.com/geoip/geoip2/downloadable/#MaxMind_APIs
import geoip2.database
import fileinput
import re
reader = geoip2.database.Reader('~/g/scripts/wustlPython/GeoLite2-City/GeoLite2-City.mmdb')
for line in fileinput.input():
# Match any IPv4 address found
ip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', line )
if ip:
#print(ip)
for i in ip:
try:
response = reader.city(i)
country = response.country.name
try:
state = response.subdivisions.most_specific.name
except:
state = "none"
try:
city = response.city.name
except:
city = "none"
print("IP: %s, Country: %s, State: %s, City: %s" % (i, country, city, state))
except:
next
Example input:
jemurray@mbp-2019:~/g/scripts/wustlPython $ head -20 ips2.txt
52.94.232.208
Country
United States
DNS Name
dp-1.storagegateway.us-east-1.amazonaws.com
52.94.232.208
932,316,573,638
924,432,432,731
7,884,140,907
149
176.32.103.253
574,130,284,981
570,833,661,079
3,296,623,902
127
54.239.18.32
554,068,088,708
550,432,749,625
3,635,339,083
Example run:
jemurray@mbp-2019:~/g/scripts/wustlPython $ head -20 ips2.txt | ./geoIp4.py
IP: 52.94.232.208, Country: United States, State: Ashburn, City: Virginia
IP: 52.94.232.208, Country: United States, State: Ashburn, City: Virginia
IP: 176.32.103.253, Country: United States, State: Ashburn, City: Virginia
IP: 54.239.18.32, Country: United States, State: Ashburn, City: Virginia