import requests, json, sys from time import sleep from collections import Counter ip_addr = [] countries = [] api_key = "b8c3cc5bb9e845" def getIP(): import socket, csv with open('JAR-16-20296A.csv') as csv_file: reader = csv.DictReader(csv_file) for row in reader: line = [row['INDICATOR_VALUE']] line = [item.replace("[.]", ".") for item in line] try: socket.inet_aton(line[0]) ip_addr.append(line[0]) except socket.error: continue return 0 def printList(list): for item in list: print(item) def update_progress(job_title, progress): length = 20 block = int(round(length*progress)) msg = "\r{0}: [{1}] {2}%".format(job_title, "#"*block + "-"*(length-block), round(progress*100, 2)) if progress >= 1: msg += " DONE\r\n" sys.stdout.write(msg) sys.stdout.flush() def getCountries(): i = 0 x = 100/len(ip_addr) for ip in ip_addr: url = "https://www.ipinfo.io/" + ip + "/geo/" + "?token=" + api_key r = requests.get(url, verify=True) if r.status_code == 200: data = json.loads(r.content) countries.append(data['country']) update_progress("Progress", i/100.0) i = i + x elif r.status_code == 429: print("Request limit reached") return else: print("Other HTTP error...") def getTop(in_list, number): c = Counter(in_list) return c.most_common(number) def howMany(in_list, name): c = Counter(in_list) return c[name] getIP() # This creates the IP list, has to always be run first. getCountries() # This creates another list that has all the countries from where the IPs came from. # It has a progress bar because it is going to take long, I didn't make it very efficient because # I don't know what kind of modules you're allowed to use. #print(getTop(countries,3)) # This gets the 3 countries more common on the list! #print(howMany(countries, "RU")) #This gets how many entries Russia has on the list #printList(ip_addr) # This prints the list of IP adresses.