首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
宝塔
V2EX  ›  分享创造

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

  •  2
     
  •   KasuganoSoras · 41 天前 · 2818 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    数据来源

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

    特性

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

    接口稳定性

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

    之前的测试结果:

    • 缓存命中情况下 7200QPS
    • 查询未缓存数据 5400QPS

    小项目或者自己测试之类的用这个应该是没问题的,我会长期提供服务(我自己的网站也在用)。大项目还是建议用大厂的 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==

    第 1 条附言  ·  41 天前

    考虑到纯真数据库可能不够全的问题,我增加了一个 ip2region 的数据库查询选项,在查询参数里加上 &db2 即可使用 ip2region 的数据库。

    示例:https://ip.mcr.moe/?ip=223.5.5.5&db2

    但是在我实际测试中发现 ip2region 在查询部分冷门 IP 地址时的准确度不如纯真 IP 库,因此建议还是将纯真 IP 库作为主要选择,ip2region 可以作为参考使用。

    另外还增加了 Json 美化效果,可以更直观的看到返回结果。当然如果你不喜欢或者有特殊原因不能使用这种美化过的 Json 的话,也可以加个参数 &compress 将 json 变回原来压缩过的效果。

    示例:https://ip.mcr.moe/?ip=223.5.5.5&compress

    25 回复  |  直到 2019-10-09 10:40:42 +08:00
        1
    opengps   41 天前 via Android
    ip 库的总有效数据量多少?
        2
    KasuganoSoras   41 天前
    @opengps #1 看了一下,是 526742 条
        3
    frozenway   41 天前
    纯真的准确率太低了,以前用的时候经常被运营怼
        4
    lk1ngaa7   41 天前
    ipip.net 的免费 ip 库和纯真的区别是啥呢?
        5
    lovestudykid   41 天前   ♥ 1
    gitee.com/lionsoul/ip2region
    这个号称 99.9%,连各种语言的查询客户端都提供了...
        6
    opengps   41 天前
    @KasuganoSoras 跟我之前了解的相似,52 万条,跟 ipv4 的 43 亿条占比太小,建议对接下百度地图高德地图,做替补查询
        7
    caijunyi   41 天前
    已经在使用了。挺好的!
        8
    bagel   41 天前
    @opengps 没明白,你说的这几家地图也提供 IP 查询服务吗?
        9
    starsriver   41 天前 via Android
    纯真也在用。备用吧。

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

    @nicoljiang #12 是的,其中还包含了很多类似于 192.168.0.0 / 255.0.0.0 这些保留地址,实际上纯真 IP 库还是很全的,日常查询完全足够了。
        14
    KallyDev   41 天前 via iPhone
    编码似乎有些问题,环境是 iOS Chrome

    {
    "status": 200,
    "message": "OK",
    "addr": "1.1.1.1",
    "country": "缇庡浗",
    "area": "缇庡浗",
    "provider": "APNIC&CloudFlare 鍏叡 DNS 鏈嶅姟鍣�"
    }
        15
    KasuganoSoras   41 天前
    @KallyDev #14 服务器端是 UTF-8 无 BOM,如果出现编码问题可以试下在 URL 里加上 &unicode 参数
        16
    Soar360   41 天前
    纯真的数据库直接集成到程序里也很容易吧?
        17
    KasuganoSoras   41 天前
    @Soar360 #16 是的,但是纯真的数据库体积有点大( 32MB ),集成到程序里有点累赘。另外我把国家和地区单独存在一个字段里面,方便一些特殊场合使用,比如需要屏蔽国外访问的网站,可以直接判断:
    if(json.country !== "中国") {
    return 403;
    }
        18
    Tang   41 天前 via Android
    @KasuganoSoras 原始压缩后的 dat 文件应该没这么大吧
        19
    xiangyuecn   41 天前
    仅仅返回文字这种不太好用,还要自己解析省市然后反解出城市区划代码,有没有像淘宝 ip 库那样可以直接返回城市区划代码的?
        20
    KasuganoSoras   41 天前
    @xiangyuecn #19 过段时间增加这个功能,到时候可能要重新导一份数据库
        21
    Varobjs   40 天前 via Android
    ipip.net 也可以吧
        22
    Vogan   39 天前 via iPhone
    我来说的点,免费的淘宝能返回运营商,其他免费的都没有运营商
        23
    KasuganoSoras   39 天前
    @Vogan #22 有的,我的 API 返回字段有一个 provider 就是运营商,默认的话是纯真的 IP 库,会带有一些机房名字和其他信息,如果需要比较统一的(电信、移动、联通)可以加上 &db2 参数使用备用数据库。
        24
    alamak76   39 天前
    可以考虑 IP2Location LITE 的免费 IP 库。
        25
    ganymedenil590   39 天前
    目前应该只有 ipip.net 是最准确的 国内大厂的归属地查询的库也基本都是 ipip.net
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1139 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 17:39 · PVG 01:39 · LAX 09:39 · JFK 12:39
    ♥ Do have faith in what you're doing.