其他分享
首页 > 其他分享> > 全网显示的 IP 归属地,带你5分钟加上,就这么简单

全网显示的 IP 归属地,带你5分钟加上,就这么简单

作者:互联网

大家好,我是一航!

最近,继新浪微博之后,今日头条、腾讯、抖音、知乎、快手、小红书、百家号等各大平台陆陆续续都上线了"网络用户IP地址显示功能",境外用户显示的是国家,国内的用户显示的省份,而且此项显示无法关闭,归属地强制显示;

作为技术人,那!这个功能要怎么实现呢?

其实要想实现这个功能还是非常的容易,基于现成 GeoLite2离线库+免费的在线解析资源,5分钟就能整合了;

在整合之前,我们先简单了解一下,要想拿到用户的位置信息,有那些方式:

下面就来试着将 GeoLite2 免费 IP 库整合值SpringBoot项目,来获取用户的归属地信息;

什么是GeoLite2?

GeoLite2数据库是免费的IP地理定位数据库;

优点:

缺点:

下载 GeoLite2 离线库

官网地址:https://www.maxmind.com/en/home

下载过程稍微有点点麻烦,这里下载了一份最新的,放在网盘,需要测试的可以直接通过这个链接下载:https://www.123pan.com/s/xPY9-J37vH

SpringBoot 获取用户的IP

SpringBoot 整合 GeoLite2

就这么简单,轻轻松松就能拿到用户IP所处的国家、省份、城市、经纬度等详细信息,可以根据自己的业务需要,对这些数据再做进一步的封装。

GeoLite2的其他用法

上面介绍的时SpringBoot整合GeoLite2,同样在其他的一些场景下,也是可以利用GeoLite2获取归属地信息;

在线方案

上面一开始介绍GeoLite2时就列举了其离线库更新收录不及时的问题,可能导致一些IP在离线库中并不存在,查找的时候,就会报AddressNotFoundException的错误,如下示例:

遇到这种请求,我们要怎么办呢?

下面就来介绍几种在线IP归属地获取的方式,当本地离线库无法获取的时候,就可以利用三方的在线库,来补充完善;

在线获取的优点:

缺点

以下示例中的xxx.xxx.xxx.xxx均代表ip地址;

百度

地址:https://opendata.baidu.com/api.php?query=xxx.xxx.xxx.xxx&resource_id=6006&co=&oe=utf8

响应数据:

{
  "status": "0",
  "t": "",
  "set_cache_time": "",
  "data": [
    {
      "ExtendedLocation": "",
      "OriginQuery": "183.19.xxx.138",
      "appinfo": "",
      "disp_type": 0,
      "fetchkey": "183.19.xxx.138",
      "location": "广东省肇庆市 电信",
      "origip": "183.19.xxx.138",
      "origipquery": "183.19.xxx.138",
      "resourceid": "6006",
      "role_id": 0,
      "shareImage": 1,
      "showLikeShare": 1,
      "showlamp": "1",
      "titlecont": "IP地址查询",
      "tplt": "ip"
    }
  ]
}

status等于0表示成功,1表示失败;可能存在status等于0,但是data中没有数据的情况。

ip-api接口

搜狐IP查询

http://pv.sohu.com/cityjson?ie=utf-8

返回数据比较的简单:

var returnCitySN = {"cip": "xxx.xxx.xxx.xxx", "cid": "440300", "cname": "广东省深圳市"};

太平洋IP地址查询

地址:http://whois.pconline.com.cn/ipJson.jsp?ip=xxx.xxx.xxx.xxx&json=true

返回数据:

{
  "ip": "183.17.xxx.138",
  "pro": "广东省",
  "proCode": "440000",
  "city": "深圳市",
  "cityCode": "440300",
  "region": "",
  "regionCode": "0",
  "addr": "广东省深圳市 电信",
  "regionNames": "",
  "err": ""
}

淘宝API接口

http://ip.taobao.com/service/getIpInfo.php?ip=xxx.xxx.xxx.xxx

{
    "code": 0,
    "data": {
        "ip": "183.17.xxx.138",
        "country": "中国",
        "area": "",
        "region": "广东",
        "city": "深圳",
        "county": "XX",
        "isp": "电信"
    }
}

code等于0表示成功,1表示失败

126

地址:https://ip.ws.126.net/ipquery?ip=xxx.xxx.xxx.xxx

响应数据:

var lo="广东省", lc="肇庆市"; 
var localAddress={city:"肇庆市", province:"广东省"}

响应的数据比较的简单

IP信息

地址:https://ip.useragentinfo.com/json?ip=xxx.xxx.xxx.xxx

响应数据:

{
  "country": "中国",
  "short_name": "CN",
  "province": "广东省",
  "city": "肇庆市",
  "area": "德庆县",
  "isp": "电信",
  "net": "",
  "ip": "183.19.xxx.138",
  "code": 200,
  "desc": "success"
}

这么多的姿势,实现起来是不是就非常的容易了;如果你对IP解析的需求比较依赖,也完全可以通过离线加这么多在线的方式,开发一个单独的IP解析模块,作为公司的基础服务,提供给内部其他模块使用。

好了,今天的分享就到这里,感谢你的点赞、关注、收藏!

标签:xxx,IP,归属,全网,用户,ip,GeoLite2,com
来源: https://www.cnblogs.com/pengfeilu/p/16281145.html