首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效的ip查找

高效的ip查找
EN

Stack Overflow用户
提问于 2015-01-17 01:40:21
回答 2查看 158关注 0票数 1

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

代码语言:javascript
复制
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,找到其关联的范围和所有者的最有效方法是什么。例如:

代码语言:javascript
复制
ip1, House Of Flowers , ('69.15.170.220', '69.15.170.223')

有人能在这方面帮我吗??

EN

回答 2

Stack Overflow用户

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2015-01-17 02:32:10

只有一次不是蟒蛇。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27989674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档