最近在做一个项目, 客户方想要记录所有的登录地址信息, 虽然有很多接口可以获取地址信息,但基本都次数限制,接口不稳定等问题. 所以搜索到了纯真IP离线库这个项目,使用离线库获取更加迅速及稳定。
纯真除了免费的社区版IP库外,还提供数据更加准确、服务更加周全的商业版IP地址查询数据。
使用方式
https://github.com/kayon/iploc
示例
package location
import (
"context"
"errors"
"fmt"
"github.com/kayon/iploc"
"net"
"time"
)
type IpLocationData struct {
Ip string `json:"ip"`
Country string `json:"country"`
Region string `json:"region"`
Province string `json:"province"`
ProvinceCode int64 `json:"province_code"`
City string `json:"city"`
CityCode int64 `json:"city_code"`
Area string `json:"area"`
AreaCode int64 `json:"area_code"`
}
func IpFind(ctx context.Context, ip string) (*IpLocationData, error) {
loc, err := iploc.OpenWithoutIndexes("./resource/ip/qqwry.dat")
if err != nil {
return nil, fmt.Errorf("%v for help, please go to: https://github.com/kayon/iploc", err.Error())
}
detail := loc.Find(ip)
if detail == nil {
return nil, fmt.Errorf("no ip data is queried. procedure:%v", ip)
}
return &IpLocationData{
Ip: ip,
Country: detail.Country,
Region: detail.Region,
Province: detail.Province,
City: detail.City,
Area: detail.County,
}, nil
}