今朝若是同淋雪

此生也算共白头


根据IP获取归属地的功能在最近几年开始流行起来,特别是一些具有社交属性的app ,比如非常火爆的抖音,西瓜视频,今日头条,微信,微博。

目前实现IP属地的方式有两种,一是通过外网ip 去调用第三方地图服务的api 来做,比如高德地图,腾讯地图,百度地图。

另一种是通过引入库的方式离线根据ip 查询属地。

目前最流行最准确的库就是ip2region这个库了。也是今天的主角。

ip2region是一个极其强悍的用来根据ip离线查询地址信息的工具库,众所周知,世界上有很多很吸金的公司,其中抖音的后端技术主要是golang。

当然,作为最赚钱的软件,它也是在各个领域有所涉足的,比如火到不行的人工智能大模型,虽然其底层是谷歌开源的大模型,也会用到python,大数据方面会用到java,如今rust也跻身编程语言名流。

ip2region 提供了golang ,python ,Java,rust,c,php等语言的实现。

实现IP属地需要做2个事情,一是获取当前人的外网ip,然后是根据ip去调用这个库的api获取到地址信息。

第一步,获取当前人的外网ip

这里也有2种方法,一种是调用第三方提供的服务获取外网ip ,另一种是从请求中获取到ip 。

考虑到如果是在局域网开发的同学,根据第二种方式获取到的是内网ip,导致最后获取不到地址信息,可以使用如下网站去获取外网ip

ip.chinaz.com

如果你是在外网写代码,可以使用获取ip 的库来快速得到ip 。

第二步,使用ip2region

第一个,去官网下载地图数据库文件,放在项目里面

地址

https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region.xdb

or

https://gitee.com/lionsoul/ip2region/blob/master/data/ip2region.xdb

第二个,开始撸代码

go install github.com/lionsoul2014/ip2region/binding/golang/xdb
package main

import (
“fmt”
“github.com/lionsoul2014/ip2region/binding/golang/xdb”
“time”
)

var (
// 下载的数据库文件放在项目根目录
dbPath string = “./ip2region.xdb”
ipBuff []byte
)

func init() {
var err error
ipBuff, err = xdb.LoadContentFromFile(dbPath)
if err != nil {
fmt.Printf(“加载数据库数据失败 %s: %s\n”, dbPath, err)
return
}
}

func main() {
searcher, err := xdb.NewWithBuffer(ipBuff)
if err != nil {
fmt.Printf(“创建searcher失败: %s\n”, err.Error())
return
}

<span class="hljs-keyword">defer</span> searcher.Close()


<span class="hljs-keyword">var</span> ip = <span class="hljs-string">"111.128.0.0"</span>
<span class="hljs-keyword">var</span> startTime = time.Now()
region, err := searcher.SearchByStr(ip)
<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
    fmt.Printf(<span class="hljs-string">"查询ip失败(%s): %s\n"</span>, ip, err)
    <span class="hljs-keyword">return</span>
}

fmt.Printf(<span class="hljs-string">"addr: %s, took: %s\n"</span>, region, time.Since(startTime))

}

返回

addr: 中国|0|北京|北京市|移动, took: 0s


在国内一般就显示到省或者直辖市,对于国外,一般会显示国家和省,比如美国 纽约。

打完收工。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐