首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何快速查找IP归属地

如何查找一个IP的归属地?当然要有一个IP段的分配列表,格式如下:

16777472 16778239 XX省 XX市

第一列是IP段的起始IP,第二列是IP段的终止IP,第三列是对应的省份。一共大概200万条左右。

那么好了,如何进行查找呢?

想到的最简单的办法,就是二分查找。首先对这些IP段进行首尾相接的排序,之后一个二分查找。那么有没有比这个还快的方法呢?

我们分析一下上面的二分查找的一个缺点就是,要在所有的IP段上进行二分查找,大概要查找log(2000000)次才能找到一个IP的归属地。那么我们一个自然的想法就是缩小二分的IP段的数量。可以这样做:

根据IP的前两个字节,把IP段进行分组。之后在对要查找的IP,首先根据IP的前两个字节,快速定位到某一个分组,之后在这个分组中进行查找。由于分组后,每一个组中的IP段会少很多。所以这个方法要比赤裸裸的二分快50%左右。

左面代表所有两字节组合,每个单元都有两个索引记录其在右侧数组中的起始位置。起始位置之间的IP的前两字节都等于左侧单元编号。

当来一个ip时, 首先计算ip >> 16,之后找到相应的索引区间,之后在相应的区间上进行查找。

其实,第二中方法,就是一个以空间换时间的方法。如果内存放得下,我们完全可以计算出每个IP的对应的省和市,存放在一个大小为2^32次方的表中。在这里,我们取了一个折中。

还有一个更简便的方法,就是使用IP66在线查询,最高可精确街道。

IP66:https://www.ip66.net/?utm-source=LJ&utm-keyword=?1146

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230327A0318600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券