在300万行CIDR格式的IP范围内快速找到IP地址

时间:2020-07-20 22:46:57

标签: python ip-address cidr

我已经获得了基于IP的地理位置数据库,其格式如下:

cluster_mode

一个CSV文件中总共包含超过300万行。每行的第一部分是CIDR格式的IP范围。

我需要一种有效的方法来快速在这些行中找到给定的IP地址。例如,在给定IP地址1.0.0.0/24,2077456,2077456,,0,0,,-33.4940,143.2104,1000 1.0.1.0/24,1814991,1814991,,0,0,,34.7725,113.7266,50 1.0.2.0/23,1814991,1814991,,0,0,,34.7725,113.7266,50 1.0.4.0/22,2077456,2077456,,0,0,,-33.4940,143.2104,1000 1.0.8.0/21,1814991,1814991,,0,0,,34.7725,113.7266,50 ... 223.255.254.0/24,1880252,1880251,,0,0,37,1.3267,103.8869,5 223.255.255.0/24,2077456,2077456,,0,0,,-33.4940,143.2104,1000 的情况下,我想快速找到第二行,因此可以获取它的协调,即该行中的其余数据。我想知道是否有任何有效的方法来代替从头开始检查每一行。

困难在于,例如IP范围1.0.1.2包含IP地址1.0.2.0/23,因此仅字符串匹配将不能很好地工作。

2 个答案:

答案 0 :(得分:0)

我自己找到了一条路。首先将分段的8位IP地址转换为十进制格式,这使CIDR格式的IP范围变为两个十进制数字。然后,我使用bisect模块来查找IP所属的范围。

答案 1 :(得分:-1)

def search_line(csv, ip):
    for line in csv:
        if line.startswith(ip):
            return line
相关问题