Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

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
/ipdPublic

查询ip地理信息,多种查询模式,高效,具有缓存机制,并可使用elasticsearch构建自己的ip数据库

License

NotificationsYou must be signed in to change notification settings

xin053/ipd

Repository files navigation

批量ip反查服务, 批量获取ip的地理位置信息,包括国家,省份,城市,ISP以及地理位置,支持国内外ip,目前仅支持ipv4.

基于gin框架构建, 默认端口6789,可在config.toml中修改服务端口以及其他配置项

从源代码构建

  1. 下载包管理器dep

    go get -u github.com/golang/dep/cmd/dep

    确保dep在环境变量PATH

  2. 下载ipd源码

    export GOPATH=`pwd`go get -d github.com/golang/xin053/ipd
  3. 安装依赖

    dep ensure
  4. 构建ipd可执行文件

    cd github.com/golang/xin053/ipdgo build ipd.go

    或者

    go build -ldflags"-w -s" ipd.go
  5. 使用

    # 运行./ipd# 停止kill -2 pid

使用

ipd提供四种ip反查的方式:

  1. 通过纯真ip数据库(目前更新到2018-09-25)

    纯真ip数据库官网,下载可能需要翻墙,下载后安装会释放出qqwry.dat文件,也可以使用UniExtract2 直接解压出文件

  2. 通过GeoLite2数据库

  3. 通过ip2region数据库,启动服务时会自动从github下载最新的数据库文件(最优先)

  4. 通过公开的 REST API方式, 目前支持四种接口:

    1. 淘宝ip查询接口:http://ip.taobao.com/service/getIpInfo.php?ip=
    2. 新浪ip查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=
    3. 太平洋ip查询接口:http://whois.pconline.com.cn/ipJson.jsp?ip=
    4. 百度ip查询接口:http://api.map.baidu.com/location/ip?ak=yourAK&ip=

API

  1. 从公共API获取ip信息

    接口

    POST /v1/api

    请求头

    1. Authorization =thisisaveryimportantkey(key可在config.go中配置)
    2. Content-Type =application/json

    Body

    {"ip":        ["111.111.111.111","8.8.8.8"]}

    返回

    [    {"ip":"8.8.8.8","country":"美国","region":"","city":"","isp":"Google公共DNS","geo_x":0,"geo_y":0    },    {"ip":"111.111.111.111","country":"","region":"","city":"","isp":"日本东京市KDDI通信公司","geo_x":0,"geo_y":0    }]
  2. 从纯真ip数据库获取ip信息

    接口

    POST /v1/db

    请求头

    1. Authorization =thisisaveryimportantkey(key可在config.go中配置)
    2. Content-Type =application/json

    Body

    {"ip":        ["111.111.111.111","8.8.8.8"]}

    返回

    [    {"ip":"8.8.8.8","country":"美国","region":"","city":"","isp":"Google公共DNS","geo_x":0,"geo_y":0    },    {"ip":"111.111.111.111","country":"","region":"","city":"","isp":"日本东京市KDDI通信公司","geo_x":0,"geo_y":0    }]
  3. 从GeoLite2数据库获取ip信息

    接口

    POST /v1/db2

    请求头

    1. Authorization =thisisaveryimportantkey(key可在config.go中配置)
    2. Content-Type =application/json

    Body

    {"ip":        ["111.111.111.111","8.8.8.8"]}

    返回

    [    {"ip":"8.8.8.8","country":"美国","region":"","city":"","isp":"Google公共DNS","geo_x":0,"geo_y":0    },    {"ip":"111.111.111.111","country":"","region":"","city":"","isp":"日本东京市KDDI通信公司","geo_x":0,"geo_y":0    }]
  4. 从ip2region数据库获取ip信息

    接口

    POST /v1/db3

    请求头

    1. Authorization =thisisaveryimportantkey(key可在config.go中配置)
    2. Content-Type =application/json

    Body

    {"ip":        ["111.111.111.111","8.8.8.8"]}

    返回

    [    {"ip":"8.8.8.8","country":"美国","region":"","city":"","isp":"Google公共DNS","geo_x":0,"geo_y":0    },    {"ip":"111.111.111.111","country":"","region":"","city":"","isp":"日本东京市KDDI通信公司","geo_x":0,"geo_y":0    }]
  5. 整合以上四种方式获取ip信息,先异步查ip2region数据库(默认的主数据库),查不到的ip再查纯真, 再查GeoLite2数据库,最后通过api查询

    主数据库可在配置文件中配置(config.toml中的request_order配置)

    接口

    POST /v1/ip

    请求头

    1. Authorization =thisisaveryimportantkey(key可在config.go中配置)
    2. Content-Type =application/json

    Body

    {"ip":        ["111.111.111.111","8.8.8.8"]}

    返回

    [    {"ip":"8.8.8.8","country":"美国","region":"","city":"","isp":"Google公共DNS","geo_x":0,"geo_y":0    },    {"ip":"111.111.111.111","country":"","region":"","city":"","isp":"日本东京市KDDI通信公司","geo_x":0,"geo_y":0    }]

项目结构

api\   |api.go                      # api 方式查询 ip 信息主文件   |baidu.go                    # 百度 ip API 服务解析   |base.go                     # 通用接口   |pconline.go                 # 太平洋 ip API 服务解析   |sina.go                     # 新浪 ip API 服务解析   |taobao.go                   # 淘宝 ip API 服务解析config\      |config.go                # 从 config.toml 读取配置以及其他配置es\  |es.go                        # elasticsearch 存储相关geolite2\        |geolite2.go            # db2 方式查询 ip 信息主文件ip2region\         |ip2region             # db3 方式查询 ip 信息主文件         |lib                   # 解析 ip2region.db 的库文件middleware\          |auth.go              # 简单授权验证中间件          |cors.go              # cors 跨域中间件          |json_logger.go       # 日志服务中间件          |sentry.go            # sentry 服务qqwry\     |qqwry.go                  # db 方式查询 ip 信息主文件server\     |server.go                 # /v1/ip 接口主文件utils\     |utils_test.go             # 工具包测试     |utils.go                  # 工具包config.toml                     # ipd 服务使用的配置文件GeoLite2-City.mmdb              # geolite2 数据库二进制文件Gopkg.lock                      # dep 包管理器 lock 文件Gopkg.toml                      # dep 包管理器 toml 文件ip2region.db                    # ip2region 数据库二进制文件ipd.go                          # ipd 服务 main 包qqwry.dat                       # 纯真 ip 数据库二进制文件README.md                       # README

构建自己的ip信息数据库

ipd服务支持将查询过的ip信息添加到elasticsearch数据库,作后续其他的使用.默认启用elasticsearch存储

  1. 安装elasticsearch,建议安装最新版
  2. 修改config.toml中的elasticsearch段的url, 如果不想使用存储ip功能,将elasticsearch段注释即可

其他事项

  1. 程序默认使用sentry服务, 修改config.go中的dsn以使用自己的sentry,也可以注释掉config.toml中的sentry段来禁用sentry
  2. 更多设置请查看config.toml的备注说明

TODO

  • 添加es接口,直接从es查询ip数据
  • 增加精准查询接口(多种查询方式同时 goroutine,获取接口分析取最优)
  • 添加缓存机制

About

查询ip地理信息,多种查询模式,高效,具有缓存机制,并可使用elasticsearch构建自己的ip数据库

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp