判断一个网站在国内还是国外

如何判断一个网站在国内还是国外,对于不缺钱,并且对性能没有那么高的要求的场景下,直接使用各个地图厂商提供的ip转位置的服务非常简单且方便。但如果是实现一个更免费而高效的方案的话,就得自己实现了,网上有不少文章介绍他们,一般还是如下思路:

  1. 通过DNS解析网站IP
  2. 通过国内IP范围判断出是否是国内

第一步是网络标准,可由DNS相关api完成。而第二步没有啥成熟而可靠的方案,网上也有不少文章在讨论他们:

一般的做法是维护一个IP范围和地址对应表。然后根据算法来实现,开源实现也有不少,一个比较出名的是Ip2region。网上也有不少文章对这个库做了深入的解析:深入浅出之ip2region实现

如果自己要实现一个也不难,主要就两个技术点:

  1. 如何获取国内的IP范围
  2. 如何快速判断某个IP是否在IP范围内

问题1不难,本身国内的IP是公开的,可以在APNIC的网站上下载。网上也有人做了进一步的整理:china_ip_list.txt

问题2本身也不难,和普通的路由匹配算法是已知的,但路由匹配的数据结构和算法一般程序员应用的并不多,这里我就简单的列举一下好了。

缓存:

有了前面的知识点后,基本上已经可以实现一个快速的判断IP是否是国内IP的算法,如果想进一步提升效率,缓存还是必不可少的。本身ip是否在国内是几乎很少变化的,也是非常适合缓存的场景。考虑到ip范围可能比较大,布隆过滤器是一个不错的选择。

小结:

本文简单的介绍了下判断一个网站在国内还是国外的基本算法和实现方案。我这里只介绍了最基础懒得场景,只判断是国内还是国外,实际应用中还涉及到进一步细化到具体位置,技术思路也类似,这里就不进一步讨论了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章