Open-GeoIP 是一个简单且高性能的 IP 地址地理信息查询服务
在 release 中下载最新的 [release] 包,解压后直接运行即可。
注意:release
中内置的数据库文件来自于 ipdb-go 中的 city.free.ipdb
,仅供测试使用,不保证数据的准确性。
如应用于生产环境,请获取商用授权,或者注册 maxmind
的账号后,获取免费版的 GeoLite2-City.mmdb
数据库文件,并更新配置文件替换数据源为 maxmind
。
tar -zxvf open-geoip-0.1.0-linux-amd64.tar.gz
cd open-geoip/
./control start
访问你服务器的 80 端口即可使用。
假定部署在 /opt/open-geoip
目录下,如果部署在其他目录修改 open-geoip.service
中的 WorkingDirectory
和 ExecStart
两个字段即可。
cp open-geoip.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable open-geoip
systemctl start open-geoip
如果需要自动更新 mmdb
数据库,只需要在注册一个 maxmind
的账号,获得一个 LicenseKey ,并将他配置到 cfg.json
中的 AutoDownload.MaxmindLicenseKey
中,或者配置到系统环境变量 MAXMIND_LICENSE_KEY
中即可。
git clone https://github.com/ECNU/open-geoip.git
cd open-geoip/
chmod +x control
./control pack
修改 templates
目录下的 index.html
即可,相关资源文件在 assets
目录下。
根据 cfg.json.example
文件,创建 cfg.json
文件,再进一步根据自己的需要修改配置。
{
"logger": {
"dir": "logs/",
"level": "DEBUG",
"keepHours": 24
},
"campus": {
"continent": "亚洲",
"country": "中国",
"province": "上海",
"city": "上海",
"district": "华东师范大学",
"isp": "校园网",
"areaCode": "310000",
"countryEnglish": "China",
"countryCode": "CN",
"longitude": "",
"latitude": "",
"ips": [
"10.0.0.0/8",
"192.168.0.0/16",
"172.16.0.0/12"
]
},
"db": {
"maxmind": "GeoLite2-City.mmdb",
"qqzengip": "",
"ipdb":""
},
"source": {
"ipv4": "maxmind",
"ipv6": "maxmind"
},
"autoDownload":{
"enabled":false,
"MaxmindLicenseKey":"",
"targetFilePath":"",
"timeout":3,
"interval":24
},
"http": {
"listen": "0.0.0.0:80",
"trustProxy": ["127.0.0.1", "::1"],
"cors":["http://localhost"],
"x-api-key": "this-is-key"
}
}
配置项 | 类型 | 说明 |
---|---|---|
logger | object | 一个包含日志设置的部分 |
logger.dir | string | 存储日志文件的目录 |
logger.level | string | 日志的级别,比如DEBUG, INFO, WARN, 或ERROR |
logger.keepHours | number | 保留日志文件的小时数,之后删除 |
campus | object | 一个包含园区内网信息的部分 |
campus.continent | string | 园区所在的洲 |
campus.country | string | 园区所在的国家 |
campus.province | string | 园区所在的省份 |
campus.city | string | 园区所在的城市 |
campus.district | string | 园区所在的区县(行政区) |
campus.isp | string | 园区的ISP运营商 |
campus.areaCode | string | 园区所在的行政区划代(国内部分) |
campus.countryEnglish | string | 园区所在国家的英文名 |
campus.countryCode | string | 园区所在国家的国家代码 |
campus.longitude | string | 园区的经度 |
campus.latitude | string | 园区的纬度 |
campus.ips | array | 属于该园区的IP范围的数组,命中这部分的IP地址,将使用配置文件中的内容进行返回 |
db | object | 一个包含数据库设置的部分 |
db.maxmind | string | MaxMind GeoLite2数据库的文件的路径,如果 autDownload 配置为 true,那么这里的配置不会生效 |
db.qqzengip | string | qqzengip数据库的文件的路径 |
db.ipdb | string | ipip.net数据库的文件的路径 |
source | object | 一个包含IP信息来源设置的部分 |
source.ipv4 | string | IPv4信息的来源,可配置为 maxmind/qqzengip/ipdb |
source.ipv6 | string | IPv6信息的来源,可配置为 maxmind/qqzengip/ipdb |
autoDownload | object | 一个包含自动更新数据库的设置的部分 |
autoDownload.enabled | bool | 是否启用自动更新数据库 |
autoDownload.MaxmindLicenseKey | string | MaxMind License Key,用于自动更新 MaxMind GeoLite2 数据库,也可以配置在环境变量 MAXMIND_LICENSE_KEY 中。如果都没有配置,那么 maxmind 的自动更新会报错 |
autoDownload.targetFilePath | string | 自动更新数据库的目标文件路径,如果不配置此参数,默认值是 ./ ,自动更新数据库会下载到这个目录 |
autoDownload.timeout | number | 自动更新数据库的超时时间,单位是 second,如果不配置此参数,默认值是 3 |
autoDownload.interval | number | 自动更新数据库的间隔时间,单位是 hour,如果不配置此参数,默认值是24 |
http | object | 一个包含HTTP服务器设置的部分 |
http.listen | string | HTTP服务器监听的地址和端口 |
http.trustProxy | array | 被信任的代理的IP地址的数组,当服务被发布在反向代理后时必须正确配置,否则无法正确获取到 xff 的地址。 |
http.cors | array | 允许跨域访问的域名列表,配置内的域名可以跨域访问 /myip 和 /myip/format 接口 |
http.x-api-key | string | 访问 openapi 接口所需的 API 密钥 |
myip 的接口用于返回请求者的 IP 地址,对于一些无浏览器的终端,可以使用这个接口方便的获取自身的IP地址信息(特别是 nat 后的)。
它也可以被配置了 CORS 的网站通过前端调用
提供了简单字符串与 json 格式化两种风格接口。
# curl http://localhost/myip
# 192.168.0.100
# curl http://localhost/myip/format
# {"errCode":0,"errMsg":"success","requestId":"0f40823e-04ce-4def-9af2-71e7e1403ec8","data":{"ip":"192.168.0.100"}}
searchapi 接口面向浏览器,提供了一个 IP 地址的查询接口,并输出转换好的字符串以简化前端解析。
这个接口受验证码和限流措施的保护,以防范可能的恶意爬虫(ToDo)
他访问的路径是 http://localhost/ip
openapi 接口面向第三方应用,提供了一个 IP 地址的查询接口,通过 X-API-KEY 进行授权校验。
建议在多租户的情况下,进一步通过 API 网关进行代理封装和授权分发。
curl -H "X-API-KEY: this-is-key" http://localhost/api/v1/network/ip?ip=2001:da8:8005:a405:250:56ff:feaf:8c28
{
"errCode": 0,
"errMsg": "success",
"requestId": "7ead62f7-3f15-4822-ad1e-cf7915a8299f",
"data": {
"ip": "2001:da8:8005:a405:250:56ff:feaf:8c28",
"continent": "亚洲",
"country": "中国",
"province": "上海",
"city": "上海",
"district": "",
"isp": "",
"areaCode": "",
"countryEnglish": "China",
"countryCode": "CN",
"longitude": "121.458100",
"latitude": "31.222200"
}
}
基于 maxmind
数据库,web
服务性能测试
# go test -bench=. -benchmem
goos: linux
goarch: amd64
pkg: github.com/ECNU/open-geoip
cpu: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
BenchmarkIndex-2 244190 4271 ns/op 10000 B/op 15 allocs/op
BenchmarkSeachAPIForIPv4-2 782768 1741 ns/op 1904 B/op 15 allocs/op
BenchmarkSeachAPIForIPv6-2 818250 1744 ns/op 1904 B/op 15 allocs/op
BenchmarkOpenAPIForIPv4-2 394813 3383 ns/op 2592 B/op 23 allocs/op
BenchmarkOpenAPIForIPv6-2 391868 3378 ns/op 2592 B/op 23 allocs/op
PASS
ok github.com/ECNU/open-geoip 7.044s
本项目的一些主要功能使用了以下开源项目,更多的依赖详见 go.mod
。
感谢他们的开源精神。
web
服务 —— ginmaxmind
解析 —— geoip2-golangmaxming
自动更新 —— go-geoipipdb
解析 —— ipdb-goqqzengip
解析 —— qqzeng-ipGeoIP库主要用来做 IP 地域解析,目前用的多的有淘宝 IP, IP2Region, GeoIP ,GeoIP 质量上乘,产品多语言支持,用起来很方便,目前 GeoLite免费,GeoIP2 收费,GeoLite 博主发现存在解析不精准的问题,还看到其他人吐槽 GeoLite 对国内地区支持不是很友好,反正博主要开始用了,因为项目定死了要用它。 集成过程如下 pom.xml文件 <depend
EPEL源 http://fedoraproject.org/wiki/EPEL BIND源码 http://ftp.isc.org/isc/bind9/ bind-geoip源码 http://code.google.com/p/bind-geoip/downloads/list 1.安装EPEL源 [root@localhost ~]# wget http://ftp.jaist.ac.j
https://pypi.python.org/pypi/GeoIP/ Requirements Python 2.5+ or 3.3+ GeoIP C Library 1.4.7 or greater Installation With pip: $ pip install GeoIP From source: $ python setup.py build$ python setup.py i
GeoIP介绍:什么是GepIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息。这里面的技术不算难题,关键在于有个精准 的数据库。有了准确的数据源就奇货可居赚点小钱,可是发扬合作精神,集体贡献众人享用是我们追求的。 GeoIP如何使用?首先我们需要数据信息,所以先获取一个免费的数据库:GeoIP.dat.gz ,接着解压得到:GeoIP.dat,
通过js 接收了用户的ip,我们需要通过ip得到用户的国家,可以通过一个库包来实现,下面是详细: 1.下载geoip的数据库: cd geoip/ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gzip -d GeoIP.dat.gz ls GeoLiteCity.dat 其他
为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面。很多情况下系统需要根据用户访问的IP信息,判断用户可能的访问区域,针对不同的区域提供个性化的服务内容。本方案在CentOS7.x环境下基于高性能的Openresty1.13.6.2来实现。 方案介绍 要通过IP地址确认归属地,通常可以使用一些在线查询服务来实现,比如https://blog.csdn.net/XinTeng2
3.2.2 利用GeoIP数据库及API进行地理定位查询 地理定位查询主要可分为两个步骤:***,获取待查询的IP;第二,利用MaxMind? API进行查询并返回查询结果。本例中数据比较简单,因此可以把查询结果直接以Javascript字符串的形式返回给客户端,用eval调用即可。下面将详细介绍上述步骤。 1.获取待查询的IP 首先,在文件开始的部分引入MaxMind? API的库文件。<?p
问题 在使用geoip2模块去解析ip地址是出现了错误:InvalidDatabaseError: Invalid node in search tree (venv) [hilqiqi0@izbp1a3rsiacm6nu3bfnyuz ~]$ ipython Python 3.6.8 (default, Jan 17 2019, 16:30:37) Type 'copyright', 'cred
使用pip安装django-iprestrict[geoip]: ➜ ~ sudo pip3 install django-iprestrict\[geoip\] ...此处省略好多行 Running setup.py bdist_wheel for GeoIP ... error Complete output from command /usr/bin/python3 -u -c "
GeoIP介绍: 什么是GepIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息。这里面的技术不算难题,关键在于有个精准 的数据库。有了准确的数据源就奇货可居赚点小钱,可是发扬合作精神,集体贡献众人享用是我们追求的。 GeoIP如 何使用? 首先我们需要数据信息,所以先获取一个免费的数据库://sjolzy.cn/php/GeoIP/bak/
注:阅读本文需要有一定Linux知识的技术人员,写的不好,小白可能看不懂,十分抱歉哈。 1、系统环境 CentOS 7.x Nginx 1.18.0 及Nginx1.20.0,其他版本未测试,以上两个版本均正常使用。 2.安装依赖 安装Geoip2依赖: $ cd /data $ wget https://github.com/maxmind/libmaxminddb/releases/dow
php使用GeoIP库实例 需要注意的是maxmind是geoip数据库的提供方,就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网!同时也提供了很多语言的sample和api说明文档。 比如php,和php的.geoip库是有很大区别的,包含使用方式,接口函数。 php官方的geoip需要配置php环境,加载geoip.dll库,并在php.ini中指定GEOIP库
GeoIP + PHP的使用 方法一: 下载 GeoIP 的 PHP 文件geoip.inc,保存为 geoip.inc.php http://sjolzy.cn/php/GeoIP/bak/geoip.inc php使用代码 <?php include("geoip.inc.php"); $gi = geoip_open("GeoIP.dat",GEOIP_STANDARD); $country
GeoIP2 是一个强大的离线数据库,该数据库内定义并记录了目前所有主机的IP地址和所在位置,通过传入某个IP地址,即可精确的定位到主机的位置,再结合谷歌地图可完美的画出坐标。 IP地址精准识别: 通过wireshark抓取pcap数据包,然后使用geoip2模块实现对IP地址的精准解析。 模块下载地址: https://github.com/maxmind/GeoIP2-python 离线数据库
CentOS 7下使用pip安装GeoIP包时报如下错误,提示缺少GeoIP.h头文件 [root@master-60-5 python]# pip3 install geoip Looking in indexes: https://pypi.doubanio.com/simple/ Collecting geoip Downloading https://pypi.doubanio.com
GeoJSON MongoDB 支持以下类型的 GeoJSON 对象类型: 点(Point) 线(LineString) 多边形(Polygon) 多点(MultiPoint) 多线 多个多边形 几何集合
GeoIP 是最常见的免费 IP 地址归类查询库,同时也有收费版可以采购。GeoIP 库可以根据 IP 地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。 配置示例 filter { geoip { source => "message" } } 运行结果 { "message" => "183.60.92.253"
本文向大家介绍python实现查询IP地址所在地,包括了python实现查询IP地址所在地的使用技巧和注意事项,需要的朋友参考一下 使方法一、用IP138数据库查询域名或IP地址对应的地理位置。 方法二、本来想调用阿里的ip接口查询ip归属地。结果发现阿里的接口非常不给力,主要是不准确,不过是免费的且有地区和ISP的信息。以下是实现代码 但是多次查询发现ip归属地不准确,于是使用17mon的ip查
demo import java.io.IOException; import java.net.*; /** * 查找IP地址 */ public class TestFindDNS { public static void main(String[] args) throws IOException { // String href = "http://
我对KML很陌生。我有一个excel电子表格,其中包含一系列(大约2000个)地址。它不包含横向/纵向坐标。地址的每一部分都在一个单独的列中。地址/地址2/城市/州/邮编。。。等 使用谷歌地图引擎,我能够生成一张上面有一堆标记的地图。我通过谷歌地图引擎中的链接将我的地图导出到KML。这导致了如下所示的地方标记数据: 信息窗口包含了地址,一切看起来都很好。 然后,我尝试将页面上的KML文件与goog
地区管理 商家可以在后台添加地址,完善地址库,包括全国省市区等。 添加子地区 商家地址 填写商家的收获地址、收件人地址、电话、邮编等信息,用于买家退货邮寄地址。
批量地址查询(地理编码),指现有大量地址信息存储于Excel内,需要获取地址对应的坐标,甚至转换成KML文件。 点击批量地址查询: 选择要进行处理的Excel文件: Excel加载完成后,配置对应的数据开始行、详细地址列、地图KEY: 点击查询,设置输出文件地址: 即可快速进行批量查询: 查询完成后,
说明 查询对账单下载地址SDK。 官方文档:https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayApp\Params\DownloadBill\Request 属性 名称 类型 说明 $method string