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

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

  •  3
     
  •   KasuganoSoras ·
    kasuganosoras · 2019-10-07 08:08:33 +08:00 · 8140 次点击
    这是一个创建于 1653 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到另一篇帖子说淘宝 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 条附言  ·  2019-10-07 12:49:18 +08:00

    考虑到纯真数据库可能不够全的问题,我增加了一个 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

    第 2 条附言  ·  2022-09-29 03:27:08 +08:00

    网站已经迁移到国内的托管服务器了,访问速度更快也更稳定。现在可以通过新的域名 ip-moe.zerodream.net 访问,老域名 ip.mcr.moe 不受影响依然可以使用。

    但是老域名因为没有备案所以只能通过香港服务器转发,访问速度可能较慢,因此建议使用新的备案直连域名访问,以达到最佳的请求速度和稳定性。

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

    淘宝还是很稳的,这两天可能是因为特殊时间
    ysicing
        10
    ysicing  
       2019-10-07 11:47:04 +08:00 via Android
    ip.sb 也不错哈哈
    opengps
        11
    opengps  
       2019-10-07 11:47:26 +08:00
    @bagel 刚刚总结了一下,但愿不被站长理解成 aff 继续降权: https://www.opengps.cn/Blog/View.aspx?id=476&f=v
    nicoljiang
        12
    nicoljiang  
       2019-10-07 12:35:07 +08:00
    @opengps 这 50 多万条是 IP 段。。。大的段可能包含上百万个 IP
    KasuganoSoras
        13
    KasuganoSoras  
    OP
       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
        14
    KallyDev  
       2019-10-07 13:11:26 +08:00 via iPhone
    编码似乎有些问题,环境是 iOS Chrome

    {
    "status": 200,
    "message": "OK",
    "addr": "1.1.1.1",
    "country": "缇庡浗",
    "area": "缇庡浗",
    "provider": "APNIC&CloudFlare 鍏叡 DNS 鏈嶅姟鍣�"
    }
    KasuganoSoras
        15
    KasuganoSoras  
    OP
       2019-10-07 13:18:42 +08:00
    @KallyDev #14 服务器端是 UTF-8 无 BOM,如果出现编码问题可以试下在 URL 里加上 &unicode 参数
    Soar360
        16
    Soar360  
       2019-10-07 13:20:08 +08:00
    纯真的数据库直接集成到程序里也很容易吧?
    KasuganoSoras
        17
    KasuganoSoras  
    OP
       2019-10-07 13:26:34 +08:00
    @Soar360 #16 是的,但是纯真的数据库体积有点大( 32MB ),集成到程序里有点累赘。另外我把国家和地区单独存在一个字段里面,方便一些特殊场合使用,比如需要屏蔽国外访问的网站,可以直接判断:
    if(json.country !== "中国") {
    return 403;
    }
    Tang
        18
    Tang  
       2019-10-07 15:13:23 +08:00 via Android
    @KasuganoSoras 原始压缩后的 dat 文件应该没这么大吧
    xiangyuecn
        19
    xiangyuecn  
       2019-10-07 16:04:38 +08:00
    仅仅返回文字这种不太好用,还要自己解析省市然后反解出城市区划代码,有没有像淘宝 ip 库那样可以直接返回城市区划代码的?
    KasuganoSoras
        20
    KasuganoSoras  
    OP
       2019-10-07 22:59:03 +08:00
    @xiangyuecn #19 过段时间增加这个功能,到时候可能要重新导一份数据库
    Varobjs
        21
    Varobjs  
       2019-10-08 20:52:29 +08:00 via Android
    ipip.net 也可以吧
    Vogan
        22
    Vogan  
       2019-10-09 07:40:21 +08:00 via iPhone
    我来说的点,免费的淘宝能返回运营商,其他免费的都没有运营商
    KasuganoSoras
        23
    KasuganoSoras  
    OP
       2019-10-09 07:55:30 +08:00
    @Vogan #22 有的,我的 API 返回字段有一个 provider 就是运营商,默认的话是纯真的 IP 库,会带有一些机房名字和其他信息,如果需要比较统一的(电信、移动、联通)可以加上 &db2 参数使用备用数据库。
    alamak76
        24
    alamak76  
       2019-10-09 10:07:33 +08:00
    可以考虑 IP2Location LITE 的免费 IP 库。
    ganymedenil590
        25
    ganymedenil590  
       2019-10-09 10:40:42 +08:00
    目前应该只有 ipip.net 是最准确的 国内大厂的归属地查询的库也基本都是 ipip.net
    wudi77
        26
    wudi77  
       2021-04-03 13:36:05 +08:00
    @KasuganoSoras 您好,网站证书昨天到期啦,目前无法使用。
    KasuganoSoras
        27
    KasuganoSoras  
    OP
       2021-04-03 13:39:04 +08:00
    @wudi77 #26 谢谢,已经看到了,正在更新
    wudi77
        28
    wudi77  
       2021-07-02 15:05:03 +08:00
    您好,网站证书今天又到期啦,目前无法使用。
    wudi77
        29
    wudi77  
       2021-07-02 15:05:14 +08:00
    @KasuganoSoras 您好,网站证书今天又到期啦,目前无法使用。
    KasuganoSoras
        30
    KasuganoSoras  
    OP
       2021-07-02 19:16:56 +08:00
    @wudi77 谢谢提醒,证书已经更新,换了个一年的
    wudi77
        31
    wudi77  
       2021-08-19 09:55:56 +08:00
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    KasuganoSoras
        32
    KasuganoSoras  
    OP
       2021-08-19 10:24:39 +08:00
    @wudi77 #31 谢谢提醒,域名过期了,刚刚续费完。
    wudi77
        33
    wudi77  
       2021-12-27 15:34:43 +08:00
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    KasuganoSoras
        34
    KasuganoSoras  
    OP
       2021-12-28 04:07:06 +08:00
    @wudi77 #33 网络出问题了,今天一直在外面没看到消息,已经恢复了
    wudi77
        35
    wudi77  
       2022-01-24 14:25:36 +08:00
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    KasuganoSoras
        36
    KasuganoSoras  
    OP
       2022-01-25 02:46:20 +08:00
    @wudi77 #35 已恢复,感谢提醒
    uniteweare
        37
    uniteweare  
       2022-01-25 22:28:50 +08:00
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    KasuganoSoras
        38
    KasuganoSoras  
    OP
       2022-01-26 03:03:28 +08:00
    @uniteweare #37 忘记把反代服务跑起来了😓感谢提醒
    uniteweare
        39
    uniteweare  
       2022-02-28 10:33:30 +08:00
    @KasuganoSoras Error 502
    wudi77
        40
    wudi77  
       2022-05-26 11:29:12 +08:00
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    uniteweare
        41
    uniteweare  
       2022-05-26 15:48:47 +08:00
    @KasuganoSoras Error 502 啦,麻烦检查一下哟
    KasuganoSoras
        42
    KasuganoSoras  
    OP
       2022-05-26 19:54:04 +08:00
    @uniteweare #41 谢谢提醒,服务器到期忘记续费了,已恢复
    lwd2020
        43
    lwd2020  
       2022-07-29 03:59:49 +08:00
    您好,我对这个项目比较有兴趣,我也想自建一个,不知道大佬是否愿意分享下源码
    wudi77
        44
    wudi77  
       2022-08-18 15:21:41 +08:00
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    KasuganoSoras
        45
    KasuganoSoras  
    OP
       2022-08-18 16:06:09 +08:00
    @wudi77 #44 域名过期了,刚续费完,可能要等一段时间 dns 才会变回去
    uniteweare
        46
    uniteweare  
       2022-08-18 16:10:50 +08:00
    @KasuganoSoras 感谢,正准备提醒您,已经解决啦,辛苦了
    wudi77
        47
    wudi77  
       2022-09-24 17:00:01 +08:00
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    KasuganoSoras
        48
    KasuganoSoras  
    OP
       2022-09-29 03:23:45 +08:00
    @wudi77 抱歉造成不便了,前几天在搬迁服务器数据,搬迁过程中可能会有一些问题。目前已经迁移到国内的服务器了,速度更快也更稳定了,以及目前可以通过新的域名 ip-moe.zerodream.net 访问,老域名不受影响依然可以使用,但是因为没有备案所以只能通过香港服务器转发,因此建议使用新的直连域名以达到最佳的请求速度。
    wudi77
        49
    wudi77  
       348 天前
    @KasuganoSoras 你好,请求返回内容变成
    {
    "status": 500,
    "message": "No Record, Please contact administrator"
    }
    ,麻烦检查下
    KasuganoSoras
        50
    KasuganoSoras  
    OP
       337 天前
    @wudi77 之前已经修复了,忘记回复,抱歉
    cyrker
        51
    cyrker  
       270 天前
    感谢大佬 非常好用
    wudi77
        52
    wudi77  
       216 天前
    @KasuganoSoras 您好,URL 无法访问了,请检查。
    KasuganoSoras
        53
    KasuganoSoras  
    OP
       216 天前
    @wudi77 #52 测试了一下好像没有问题,如果国内无法访问有可能是被墙了,可以更换国内接口 https://ip-moe.zerodream.net/ 更稳定
    wudi77
        54
    wudi77  
       75 天前 via iPhone
    @KasuganoSoras 您好,URL 无法访问了,应该是证书到期了,请检查。
    KasuganoSoras
        55
    KasuganoSoras  
    OP
       75 天前
    @wudi77 #54 抱歉,这几天我们在搬迁服务器机房,原来的宿迁机房最近不稳定,所以打算换到广东机房,这几天可以临时先用其他的 IP 库顶一下,预计 4 号左右能恢复。
    KasuganoSoras
        56
    KasuganoSoras  
    OP
       71 天前
    @wudi77 #54 目前已经恢复了,如果无法访问请尝试清理 DNS 缓存后重试下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1136 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:31 · PVG 02:31 · LAX 11:31 · JFK 14:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.