高效查找ip

2024-05-16 22:36:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件f1,其中包含42000000个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最有效的方法是找到它的相关范围和所有者。例如:

^{pr2}$

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


Tags: 文件ofip列表字典地址f2f1
2条回答

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

或者,将其全部转储到数据库中,索引第一个\u地址和最后一个\u地址,让数据库担心如何高效地搜索。见the sqlite documentation。在

做一次非Python

如果可能拥有者的总数很小(少于255个),但范围的数量却很大(数百个),您可以将每个IP转换为它所表示的四字节整数,然后使用它索引成一个庞大的字节数组。在

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

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

相关问题 更多 >