目前若是同淋雪
此生也算共白头
根据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 mainimport ( "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 } defer searcher.Close() var ip = "111.128.0.0" var startTime = time.Now() region, err := searcher.SearchByStr(ip) if err != nil { fmt.Printf("查询ip失落败(%s): %s\n", ip, err) return } fmt.Printf("addr: %s, took: %s\n", region, time.Since(startTime))}
返回
addr: 中国|0|北京|北京市|移动, took: 0s
在海内一样平常就显示到省或者直辖市,对付国外,一样平常会显示国家和省,比如美国 纽约。
打完收工。