高效的ip查找

时间:2015-01-16 17:40:21

标签: python networking ip lookup

我有一个文件,f1包含42,000,000个ip地址列表。 我有另一个文件,f2包含ipranges字典及其相关所有者,如:

Regional Physicians Neuroscience,[('66.110.238.100', '66.110.238.100')]
Coast Institute of Technology,[('41.89.132.0', '41.89.132.255')]
House Of Flowers,[('69.15.170.220', '69.15.170.223'), ('108.178.223.20', '108.178.223.23')]

现在我想知道f1中每个ip找到相关范围和所有者的最有效方法。例如:

ip1, House Of Flowers , ('69.15.170.220', '69.15.170.223')

在这方面有人可以帮助我吗??

2 个答案:

答案 0 :(得分:2)

我们假设ip范围不能重叠;因此,如果按基址按升序对它们进行排序,则可以使用bisect.bisect_left索引到数组中。然后,如果array[index].first_address <= search_address <= .last_address找到匹配项,则不存在匹配项。

或者,将它全部转储到数据库中,索引first_address和last_address,让数据库担心有效搜索。请参阅the sqlite documentation

答案 1 :(得分:1)

一次是非pythonic ......

如果可能所有者的总数很小(小于255),但范围的数量很大(数百),您可以将每个IP转换为它所代表的四字节整数,然后使用它来索引大量的字节

找到的字节值是所有者编号,255表示无人。

如果您首先测试您的所有者实际需要的最小 - 最大范围,则所需的阵列最大为4 GB且小得多。