How to optimize checking IP adresses and getting a country?

60 Views Asked by At

Using Python 3.9.2 on Win10 I´m trying to get the country for IP-adresses in a log file (about 65000 lines). I have a .csv containing IP ranges (22000 lines) and respective countries, looking like:

[...]
2.16.9.0,2.16.9.255,DE,Germany
2.16.11.0,2.16.11.255,FR,France
2.16.12.0,2.16.13.255,CH,Switzerland
2.16.23.0,2.16.23.255,DE,Germany
2.16.30.0,2.16.33.255,DE,Germany
2.16.34.0,2.16.34.255,FR,France
[...]

I'm using python's ipaddress and iterate through the list of ranges and check if the current IP is within a range to get the country. Before, I check for two conditions to be true.

My goal is to count how many connections came from each of the three countrys. An example:

import ipaddress
import csv

with open (PATH) as logfile
    logfile_lines = [line.split('\t') for line in logfile]

with open (PATH,r) as ipdaten
    ipdaten_lines = [line.split(',') for line in ipdaten]

streams_france=0

for line in logfile_lines:
    line2 = int(line[9])
    stream = str(line[3])
    iplog = line[1]
    ipobj= ipaddress.ip_address(iplog)

    [...]
    if line2 > 60 and stream == "stream2":
         for ips in ipdaten_lines:

            if ipobj >= ipaddress.IPv4Address(ips[0]) and ipobj <= ipaddress.IPv4Address(ips[1]):
                land = ips[3]

                if land == "France\n":
                    streams_france+=1
                break

     [...]

The code works, but it is very slow. After far over 1 hour it is still running. For line2 > 60 and stream == "stream2" there are about 9000 cases in which both are True.

0

There are 0 best solutions below