A Python script that utilizes the MMDB database to sort IP addresses based on their geographical location.
P.S The database is in the zip.
Python:
import geoip2.database
import os
import argparse
import datetime
db_path = 'db\GeoLite2-Country.mmdb'
def read_ip(ip_port):
return ip_port.split(":")[0]
def load_ip(filename):
with open(filename, 'r') as file:
return [line.strip() for line in file.readlines()]
def save_ip(ip, country_code, output_folder):
file_path = os.path.join(output_folder, f"{country_code.lower()}.txt")
with open(file_path, 'a') as file:
file.write(ip + '\n')
def proc_ip(ip_list, geoip_reader, output_folder):
for ip_port in ip_list:
ip = read_ip(ip_port)
try:
response = geoip_reader.country(ip)
country_code = response.country.iso_code
if country_code:
save_ip(ip_port, country_code, output_folder)
except Exception as e:
print(f"Error processing IP {ip}: {str(e)}")
def main(input_file, output_folder):
if not os.path.exists(db_path):
print(f"GeoIP database file not found at {db_path}")
return
geoip_reader = geoip2.database.Reader(db_path)
ip_list = load_ip(input_file)
os.makedirs(output_folder, exist_ok=True)
proc_ip(ip_list, geoip_reader, output_folder)
geoip_reader.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Max mind sorter.")
parser.add_argument('--input', required=True, help='Input file (ip:port)')
parser.add_argument('--output', required=True, help='Results folder')
args = parser.parse_args()
current_time = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
output_folder = f"{args.output}-{current_time}"
main(args.input, output_folder)