使用纯真IP数据库获取IP物理地址

190 阅读1分钟

最近在做一个项目, 客户方想要记录所有的登录地址信息, 虽然有很多接口可以获取地址信息,但基本都次数限制,接口不稳定等问题. 所以搜索到了纯真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
}