最近接触到GeoIP ,网上查了查资料,这里记录一下,仅供学习参考
GeoIP库可以根据IP地址(支持IPv4 和 IPv6), 定位该IP所在的 洲、经纬度、国家、省市、ASN 等信息。
GeoIP目前已经升级到GeoIP2,GeoIP2有两个版本,一个免费版(GeoLite2),一个收费版本(GeoIP2, 200$起步)。
收费版本的准确率稍高一些,更新频率为每周二更新一次, 免费版是每月第一个周二更新一次。
两者对比可以参考官网说明 GeoIP2 City Accuracy | MaxMind
对于大部分项目来说免费版已经足够使用了.
除了GeoIP外, 其实还有 ip2location、Quova等也提供类似的功能, 但都是收费的.
因为其可以根据IP地址判断所属国家的特性,被广泛应用于各大代理软件例如Surge/Shadowrocket/Quantumult(X)/Clash中,根据设置的规则使用不同的节点服务器。
例如在Quantumult(X)中,设置以下规则:
这段规则的意思是,如果访问的IP在GeoIP数据库中的地理位置为美国(US),则使用USProxy这个策略内的服务器节点进行访问;类似的,如果是中国(CN),则使用Direct策略也就是直接连接访问。
虽然GeoIP数据库每周更新,但其中包含的youtube、google、twitter等经常访问网站IP的地理位置(指美国)并不会随之改变,所以并不需要经常更新。
此前,MaxMind一直提供GeoLite2公开的访问下载地址,但从2019年12月30日开始,MaxMind不再提供GeoLite2公开的访问下载地址,需要用户注册一个MaxMind帐户并获取许可密钥,才能下载GeoLite2数据库。
MaxMind帐户注册地址:GeoLite2 Sign Up | MaxMind
直连访问,不要使用代理服务器,否则显示错误,无法注册

除了自己注册下载以外,还可以使用网络上公开的Geolite2数据库
Releases · Dreamacro/maxmind-geoip · GitHub
https://geolite.clash.dev
https://static.clash.to/GeoIP2/GeoIP2-Country.tar.gz
很多linux版本支持这个库, 可以使用yum 或 apt 进行下载, windows上使用的话就需要自己编译了.
Geolocate an IP address using Web Services with the client-side JavaScript | MaxMind Developer Portal
GeoIP2提供了多种语言的API接口供选择.
这里我需要使用C语言接口, 所以下载C语言版的源码.
https://github.com/maxmind/libmaxminddb/releases
https://dev.maxmind.com/geoip/geoip2/geolite2/

可以看到官网提供三种库,2种格式, 首先 官网API是需要使用二进制库文件, CSV格式的库可以导入其他程序 或 供你简单浏览。
三种库的区别可以从名字上就可以看出来:
City 精确到城市(大小70M左右),
Country 精确到国家(4M左右),
ASN 用于产看IP地址的拥有者(7M左右). 需要注意的是 City 和 Country 库中不含ASN信息。
对于ASN的理解可以通过知乎了解一下 https://www.zhihu.com/question/
根据业务需求选择. 这里我们下载精确到城市的数据库文件.
https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
由于数据库经常更新, 官网还提供了更新的方案:
GeoIP2 Release Notes | MaxMind Developer Portal
libmaxminddb - a library for working with MaxMind DB files
参考
GeoIP是什么?GeoIP 简介 - 无枫不起浪
GeoIP的使用-C语言版 - LubinLew - 博客园
GeoIP安装使用 - 歪麦博客
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10625.html