- Notifications
You must be signed in to change notification settings - Fork37
每秒百万高性能IP查询库,使用纯真IP库,国内省、市、县,qqwry.dat转换工具:GBK转为UTF-8
License
kayon/iploc
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
使用纯真IP库qqwry.dat,高性能,线程安全,并对国内数据格式化到省、市、县
需要 go 1.9 或更高
附带的qqwry.dat为UTF-8编码2018-05-15版本
不再提供
qqwry.dat, 新增命令行工具iploc-fetch, 可在线获取官方最新版本的qqwry.dat
go get -u github.com/kayon/iploc/...$ mkdir -P $GOPATH/src/golang.org/xcd $GOPATH/src/golang.org/xgit clone https://github.com/golang/text.git方法一:使用命令行工具iploc-fetch
由于服务器限制国外IP,只能使用国内网络。
下载到当前目录,保存为qqwry.gbk.dat
$ iploc-fetch qqwry.gbk.dat在纯真官网下载并安装,复制安装目录中的qqwry.dat
使用命令行工具iploc-conv 将刚刚下载的qqwry.gbk.dat 转换为UTF-8 保存为qqwry.dat
iploc-conv -s qqwry.gbk.dat -d qqwry.dat// 缓存索引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// 内蒙古锡林郭勒盟苏尼特右旗 联通// 中国 内蒙古 锡林郭勒盟 苏尼特右旗}iploc.Find 使用OpenWithoutIndexes
iploc.Open 缓存并索引,生成索引需要耗时500毫秒左右,但会带来更高的查询性能
iploc.OpenWithoutIndexes 只读取文件头做简单检查,无索引
(*Locator).Find(ip string) *Detail如果IP不合法,返回
nil
将原版qqwry.dat 由GBK 转换为UTF-8
$ iploc-conv -s src.gbk.dat -d dst.utf8.dat新生成的DAT文件保留原数据结构,由于编码原因,文件会增大一点
修正原 qqwry.dat 中几处错误的重定向 (qqwry.dat 2018-05-10),并将 "CZ88.NET" 替换为 "N/A"
从纯真官网下载最新qqwry.dat
由于服务器限制国外IP,只能使用国内网络。
$ iploc-fetch qqwry.gbk.dat下载后别忘了使用
iploc-conv转换为UTF-8
创建静态版本的iploc 集成到你的项目中
iploc-gen 会在当前目录创建 iploc-binary.go 文件,拷贝到你的项目中,通过变量名IPLoc 直接可以使用
$ iploc-gen path/qqwry.dat
--pkg指定 package name, 默认 main
-n使用OpenWithoutIndexes初始化,无索引
编译后的二进制没有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
Uh oh!
There was an error while loading.Please reload this page.