- 基于 ip2region xdb 全内存加载, 新增依赖 lionsoul2014/ip2region - 附测试、examples/ipquery 例程与包 README(含 xdb 获取说明)
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
// ipquery 包示例:基于 ip2region xdb 的 IP/域名归属地查询
|
|
// 运行: go run . <ip2region.xdb 路径> [IP或域名]
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"git.zeroonesoft.cn/golib/zogo/ipquery"
|
|
)
|
|
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
fmt.Println("用法: ipquery <ip2region.xdb文件路径> [IP或域名]")
|
|
fmt.Println("xdb 下载: https://github.com/lionsoul2014/ip2region")
|
|
return
|
|
}
|
|
dbPath := os.Args[1]
|
|
|
|
// 加载整个 xdb 到内存(进程内只需执行一次,之后可并发查询)
|
|
if err := ipquery.LoadIp(dbPath); err != nil {
|
|
fmt.Println("加载失败:", err)
|
|
return
|
|
}
|
|
|
|
ip := "114.114.114.114"
|
|
if len(os.Args) > 2 {
|
|
ip = os.Args[2]
|
|
}
|
|
|
|
// 查询详情
|
|
data, err := ipquery.Query(ip)
|
|
if err != nil {
|
|
fmt.Println("查询失败:", err)
|
|
return
|
|
}
|
|
fmt.Printf("IP: %s 国家: %s 区域: %s 省份: %s 城市: %s 运营商: %s\n",
|
|
data.Ip, data.Country, data.Area, data.Province, data.City, data.Isp)
|
|
|
|
// 查询简述(中国 IP 返回“省份城市 运营商”,国外返回“国家省份 运营商”)
|
|
fmt.Println("简述:", ipquery.QueryString(ip))
|
|
|
|
// IP 字符串转 uint32
|
|
if num, err := ipquery.StringToUint32("192.168.1.1"); err == nil {
|
|
fmt.Printf("192.168.1.1 -> %d\n", num)
|
|
}
|
|
}
|