分享一个自建的 IP 归属地查询库

2019-10-07 08:08:33 +08:00
 KasuganoSoras

看到另一篇帖子说淘宝 IP 库挂了……我想了下还是分享一下自己的 IP 库吧。

数据来源

数据基于纯真 IP 库 2019-09-25 的数据,一般我会每个月去更新一次(官方是每周,但是我可能没有这么多时间每周都去更新一次),自己写了一个脚本把 txt 格式的数据导入到了数据库里,并区分了国家、地区和运营商。

特性

返回结果为 Json,区分国家、地区、运营商,支持返回明文、Unicode 编码结果。

接口稳定性

接口程序使用 PHP 开发,环境为 PHP 7.3.8,搭建在一台 4 核 i5-6500 小机器上,做了 Redis 缓存,首次查询后会把结果缓存在 Redis,下一次查询直接从缓存调取,速度会快很多。

之前的测试结果:

小项目或者自己测试之类的用这个应该是没问题的,我会长期提供服务(我自己的网站也在用)。大项目还是建议用大厂的 API 吧……我也不敢保证我的 SLA 能达到小数点后几个 9 什么的...

请求方式

返回结果

正常返回结果

{
    "status":200,
    "message":"OK",
    "addr":"14.215.177.38",
    "country":"中国",
    "area":"广东省广州市",
    "provider":"北京百度网讯科技有限公司电信节点"
}

无效的 IP 地址

{
    "status":500,
    "message":"Invalid IP Address"
}

因为纯真 IP 库格式的问题,我没有办法细分到省和市……所以统一用 area 来表示了。

接口没有限制单 IP QPS,但是还是希望各位合理使用,上面还运行着公益内网穿透 owo

如果发现有查询结果错误的话欢迎在帖子里留言或者邮箱联系我修正:YWtrYXJpaW5zQGdtYWlsLmNvbQ==

8637 次点击
所在节点    分享创造
64 条回复
opengps
2019-10-07 08:45:23 +08:00
ip 库的总有效数据量多少?
KasuganoSoras
2019-10-07 08:56:43 +08:00
@opengps #1 看了一下,是 526742 条
frozenway
2019-10-07 09:12:41 +08:00
纯真的准确率太低了,以前用的时候经常被运营怼
lk1ngaa7
2019-10-07 09:32:36 +08:00
ipip.net 的免费 ip 库和纯真的区别是啥呢?
lovestudykid
2019-10-07 09:43:58 +08:00
gitee.com/lionsoul/ip2region
这个号称 99.9%,连各种语言的查询客户端都提供了...
opengps
2019-10-07 10:02:31 +08:00
@KasuganoSoras 跟我之前了解的相似,52 万条,跟 ipv4 的 43 亿条占比太小,建议对接下百度地图高德地图,做替补查询
caijunyi
2019-10-07 11:13:23 +08:00
已经在使用了。挺好的!
bagel
2019-10-07 11:24:11 +08:00
@opengps 没明白,你说的这几家地图也提供 IP 查询服务吗?
starsriver
2019-10-07 11:37:35 +08:00
纯真也在用。备用吧。

淘宝还是很稳的,这两天可能是因为特殊时间
ysicing
2019-10-07 11:47:04 +08:00
ip.sb 也不错哈哈
opengps
2019-10-07 11:47:26 +08:00
@bagel 刚刚总结了一下,但愿不被站长理解成 aff 继续降权: https://www.opengps.cn/Blog/View.aspx?id=476&f=v
nicoljiang
2019-10-07 12:35:07 +08:00
@opengps 这 50 多万条是 IP 段。。。大的段可能包含上百万个 IP
KasuganoSoras
2019-10-07 12:52:10 +08:00
@starsriver #9 淘宝主要是 QPS 限制的太低了,只能作为人工搜索使用。目前增加了一个新的选择 ip2region,后续我会考虑接入更多的 IP 库,继续完善它。

@nicoljiang #12 是的,其中还包含了很多类似于 192.168.0.0 / 255.0.0.0 这些保留地址,实际上纯真 IP 库还是很全的,日常查询完全足够了。
KallyDev
2019-10-07 13:11:26 +08:00
编码似乎有些问题,环境是 iOS Chrome

{
"status": 200,
"message": "OK",
"addr": "1.1.1.1",
"country": "缇庡浗",
"area": "缇庡浗",
"provider": "APNIC&CloudFlare 鍏叡 DNS 鏈嶅姟鍣�"
}
KasuganoSoras
2019-10-07 13:18:42 +08:00
@KallyDev #14 服务器端是 UTF-8 无 BOM,如果出现编码问题可以试下在 URL 里加上 &unicode 参数
Soar360
2019-10-07 13:20:08 +08:00
纯真的数据库直接集成到程序里也很容易吧?
KasuganoSoras
2019-10-07 13:26:34 +08:00
@Soar360 #16 是的,但是纯真的数据库体积有点大( 32MB ),集成到程序里有点累赘。另外我把国家和地区单独存在一个字段里面,方便一些特殊场合使用,比如需要屏蔽国外访问的网站,可以直接判断:
if(json.country !== "中国") {
return 403;
}
Tang
2019-10-07 15:13:23 +08:00
@KasuganoSoras 原始压缩后的 dat 文件应该没这么大吧
xiangyuecn
2019-10-07 16:04:38 +08:00
仅仅返回文字这种不太好用,还要自己解析省市然后反解出城市区划代码,有没有像淘宝 ip 库那样可以直接返回城市区划代码的?
KasuganoSoras
2019-10-07 22:59:03 +08:00
@xiangyuecn #19 过段时间增加这个功能,到时候可能要重新导一份数据库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/606671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX