Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Mar 8, 2024. It is now read-only.
/iplocPublic archive

每秒百万高性能IP查询库,使用纯真IP库,国内省、市、县,qqwry.dat转换工具:GBK转为UTF-8

License

NotificationsYou must be signed in to change notification settings

kayon/iploc

Repository files navigation

Build Status

使用纯真IP库qqwry.dat,高性能,线程安全,并对国内数据格式化到省、市、县

需要 go 1.9 或更高

附带的qqwry.datUTF-8 编码2018-05-15版本

不再提供qqwry.dat, 新增命令行工具iploc-fetch, 可在线获取官方最新版本的qqwry.dat

安装

go get -u github.com/kayon/iploc/...

无法安装golang.org/x/text 包,没有梯子使用下面方法

$ mkdir -P $GOPATH/src/golang.org/xcd $GOPATH/src/golang.org/xgit clone https://github.com/golang/text.git

获取&更新 qqwry.dat

1. 下载qqwry.dat

方法一:使用命令行工具iploc-fetch

由于服务器限制国外IP,只能使用国内网络。

下载到当前目录,保存为qqwry.gbk.dat

$ iploc-fetch qqwry.gbk.dat
方法二:手动下载

纯真官网下载并安装,复制安装目录中的qqwry.dat

2. 转换为UTF-8

使用命令行工具iploc-conv 将刚刚下载的qqwry.gbk.dat 转换为UTF-8 保存为qqwry.dat

iploc-conv -s qqwry.gbk.dat -d qqwry.dat

Benchmarks

// 缓存索引BenchmarkFind-8             2000000       735 ns/op               136万/秒// 无索引BenchmarkFindUnIndexed-8      20000     78221 ns/op               1.2万/秒// 缓存索引,并发BenchmarkFindParallel-8    10000000       205 ns/op               487万/秒

使用

func main() {loc, err := iploc.Open("qqwry.dat")if err != nil {panic(err)}detail := loc.Find("8.8.8") // 补全为8.8.0.8, 参考 ping 工具fmt.Printf("IP:%s; 网段:%s - %s; %s\n", detail.IP, detail.Start, detail.End, detail)detail2 := loc.Find("8.8.3.1")fmt.Printf("%t %t\n", detail.In(detail2.IP.String()), detail.String() == detail2.String())// output// IP:8.8.0.8; 网段: 8.7.245.0 - 8.8.3.255; 美国 科罗拉多州布隆菲尔德市Level 3通信股份有限公司// true truedetail = loc.Find("1.24.41.0")fmt.Println(detail.String())fmt.Println(detail.Country, detail.Province, detail.City, detail.County)// output// 内蒙古锡林郭勒盟苏尼特右旗 联通// 中国 内蒙古 锡林郭勒盟 苏尼特右旗}

快捷方法

Find(qqwrySrc, ip string) (*Detail, error)

iploc.Find 使用OpenWithoutIndexes

初始化

Open(qqwrySrc string) (*Locator, error)

iploc.Open 缓存并索引,生成索引需要耗时500毫秒左右,但会带来更高的查询性能

OpenWithoutIndexes(qqwrySrc string) (*Locator, error)

iploc.OpenWithoutIndexes 只读取文件头做简单检查,无索引

查询

(*Locator).Find(ip string) *Detail

如果IP不合法,返回nil

命令行工具

iploc-conv

将原版qqwry.datGBK 转换为UTF-8

$ iploc-conv -s src.gbk.dat -d dst.utf8.dat

新生成的DAT文件保留原数据结构,由于编码原因,文件会增大一点

修正原 qqwry.dat 中几处错误的重定向 (qqwry.dat 2018-05-10),并将 "CZ88.NET" 替换为 "N/A"

iploc-fetch

从纯真官网下载最新qqwry.dat

由于服务器限制国外IP,只能使用国内网络。

$ iploc-fetch qqwry.gbk.dat

下载后别忘了使用iploc-conv 转换为UTF-8

iploc-gen

创建静态版本的iploc 集成到你的项目中

iploc-gen 会在当前目录创建 iploc-binary.go 文件,拷贝到你的项目中,通过变量名IPLoc 直接可以使用

$ iploc-gen path/qqwry.dat

--pkg 指定 package name, 默认 main

-n 使用OpenWithoutIndexes 初始化,无索引

静态编译 iploc 和 qqwry.dat 并集成到你的项目中

编译后的二进制没有qqwry.dat 依赖,不需要再带着qqwry.dat 一起打包了

示例

到项目目录$GOPATH/src/myproject/

$ mkdir myloc && cd myloc$ iploc-gen path/qqwry.dat --pkg myloc

$GOPATH/src/myproject/main.go

package mainimport ("fmt""myproject/myloc")func main() {fmt.Println(myloc.IPLoc.Find("8.8.8.8"))}

About

每秒百万高性能IP查询库,使用纯真IP库,国内省、市、县,qqwry.dat转换工具:GBK转为UTF-8

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp