我有一个文件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')有人能在这方面帮我吗??
发布于 2015-01-17 02:02:28
我们假设ip范围不能重叠;因此,如果您按基址对它们进行升序排序,则可以使用bisect.bisect_left对数组进行索引。如果为array[index].first_address <= search_address <= .last_address,则已找到匹配项,否则不存在匹配项。
或者,将其全部转储到数据库中,在first_address和last_address上建立索引,然后让数据库考虑如何有效地进行搜索。参见the sqlite documentation。
发布于 2015-01-17 02:32:10
只有一次不是蟒蛇。
如果可能的所有者的总数很小(小于255),但范围的数量很大(数百),您可以将每个IP 转换为它所表示的4字节整数,然后使用它来索引到一个巨大的字节数组中。
找到的字节值是所有者编号,255表示无人。
如果您首先测试所有者实际需要的最小-最大范围,则所需的阵列最大为4 GB,并且要小得多。
https://stackoverflow.com/questions/27989674
复制相似问题