geoip java api zh cn_通过GeoIP2分析访问者IP获取地理位置信息

MaxMind GeoIP2 服务能识别互联网用户的地点位置与其他特征,应用广泛,包括个性化定制内容、诈欺检测、广告定向、网站流量分析、执行规定、地理目标定位、地理围栏定位 (geo-fencing)以及数字版权管理。目前使用 GeoIP 更多是配合Nginx或Apache服务器进行日志分析获取网站访问量地域分布状况。

GeoIP 分为商业版和免费版,免费版比商业版精度差了许多,经测试对于城市定位确实有差距,能否接受看你的精度要求!

一、免费版本介绍:

1、GeoLite 版本,网上流传较广,数据库类型为 dat 格式文件,库文件较小未进行精准度测试。

2、GeoLite2版本,目前最新版本,数据库文件为 mmdb 格式文件, 有兴趣了解 mmdb 格式的点这里 。

$ du -sh *

32MGeoLite2-City.mmdb

2.3MGeoLite2-Country.mmdb

18MGeoLiteCity.dat

732KGeoLiteCountry.datCity 文件为包含城市信息数据库,Country 文件为国家信息数据库。

二、下载 GeoLite2 数据库

下载方式分为两种,第一种通过下载 gz 压缩包,第二种通过使用官方提供的下载更新程序,建议使用第二种,官方称数据库在每个月的第一个星期二更新,如果想做成计划任务每月都更新建议选择第二种! GeoIP2详细更新日志点这里。

两种方式这里都啰嗦一下,本阶段只是讲如何下载数据库,调用方式需要参考第三阶段 API 调用部分!

1、第一种方式,下载 gz 文件并解压缩。

GeoLite2 只提供 City 数据库和 Country 数据库下载  查看详情点击里,数据库文件分为 Binary 和 CVS 两种,这里使用 Binary 文件。

$ sudo mkdir -p /mnt/data/geolite2 && cd $_

$ sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz

$ sudo gzip -d GeoLite2-City.mmdb.gz

$ sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz

$ sudo gzip -d GeoLite2-Country.mmdb.gz

2、第二种方式,需安装官方下载更新程序 geoipupdate 。

a、到 GitHub下载地址 下载 geoipupdate,目前最新版为 2.1.0,GitHub 连接速度要有耐心,肯定可以下载滴!编译文件需要 libcurl-devel 包支持,需提前下载安装。

$ sudo yum install libcurl-devel -y

$ sudo wget https://github.com/maxmind/geoipupdate/releases/download/v2.1.0/geoipupdate-2.1.0.tar.gz

$ sudo tar xzvf geoipupdate-2.1.0.tar.gz

$ cd geoipupdate-2.1.0

$ sudo ./configure

$ sudo make

$ sudo make install

编译完毕只需要关注两个文件

更新执行文件 /usr/local/bin/geoipupdate

账户信息文件 /usr/local/etc/GeoIP.conf

b、配置账户信息 GeoIP.conf,修改配置文件如下即可,本配置文件默认下载 mmdb 文件,若想下载 dat 文件取消注释即可!

# The following UserId and LicenseKey are required placeholders:

UserId 999999

LicenseKey 000000000000

# Include one or more of the following ProductIds:

# * GeoLite2-City - GeoLite 2 City

# * GeoLite2-Country - GeoLite2 Country

# * 506 - GeoLite Legacy Country

# * 517 - GeoLite Legacy ASN

# * 533 - GeoLite Legacy City

# dat 格式数据库

#ProductIds GeoLite2-City GeoLite2-Country 506 533

# mmdb 格式数据库

ProductIds GeoLite2-City GeoLite2-Country 132 106

c、执行更新

查看geoipupdate帮助文件,了解有哪些参数可以使用! -d 参数将文件下载到指定目录,-v 参数就是显示下载过程明细信息。

$ /usr/local/bin/geoipupdate -h

Usage: geoipupdate [-Vhv] [-f license_file] [-d custom directory]

-d DIR store downloaded files in DIR

-f FILE use configuration found in FILE (see GeoIP.conf(5) man page)

-h display this help text

-v use verbose output

-V display the version and exit

执行更新命令,下载速度看网络情况,本文将文件下载到 /mnt/data/geolite2/目录 。

$ ll /mnt/data/geolite2/ && cd $_

总用量 0

$ sudo /usr/local/bin/geoipupdate -d /mnt/data/geolite2/ -v

$ ll

总用量 34088

-rw-r--r--. 1 root root 32553611 12月 19 18:14 GeoLite2-City.mmdb

-rw-r--r--. 1 root root 2349406 12月 19 18:14 GeoLite2-Country.mmdb

如何配置计划任务定时更新 GeoLite2 数据库请自行解决。

三、安装

GeoLite2 API 调用程序

官方提供 .NET (C#)、C、Java、Perl、Python、Apache API调用。其他第三方接口也有,但官方不提供技术支持, 详情点击这里。

本文使用 C 语言API接口进行调用测试,其他语言请参考官方指导自行解决! C语言API GitHub 下载地址

$ sudo wget https://github.com/maxmind/libmaxminddb/releases/download/1.0.3/libmaxminddb-1.0.3.tar.gz

$ sudo tar xzvf libmaxminddb-1.0.3.tar.gz

$ cd libmaxminddb-1.0.3

$ sudo ./configure

$ sudo make

$ sudo make install

查看帮助文档

$ /usr/local/bin/mmdblookup --help

mmdblookup --file /path/to/file.mmdb --ip 1.2.3.4 [path to lookup]

This application accepts the following options:

--file (-f) The path to the MMDB file. Required.

--ip (-i) The IP address to look up. Required.

--verbose (-v) Turns on verbose output. Specifically, this causes this

application to output the database metadata.

--version Print the program's version number and exit.

--help (-h -?) Show usage information.

If an IP's data entry resolves to a map or array, you can provide

a lookup path to only show part of that data.

For example, given a JSON structure like this:

{

"names": {

"en": "Germany",

"de": "Deutschland"

},

"cities": [ "Berlin", "Frankfurt" ]

}

You could look up just the English name by calling mmdblookup with a lookup path of:

mmdblookup --file ... --ip ... names en

Or you could look up the second city in the list with:

mmdblookup --file ... --ip ... cities 1

Array numbering begins with zero (0).

If you do not provide a path to lookup, all of the information for a given IP

will be shown.四、测试

测试IP:112.225.35.70 山东省青岛市 联通

1、获取国家信息,国家信息是正确滴,看着像乱码的地方是显示的俄语!

$ /usr/local/bin/mmdblookup --file /mnt/data/geolite2/GeoLite2-Country.mmdb --ip 112.225.35.70

{

"continent":

{

"code":

"AS"

"geoname_id":

6255147

"names":

{

"de":

"Asien"

"en":

"Asia"

"es":

"Asia"

"fr":

"Asie"

"ja":

"アジア"

"pt-BR":

"Ásia"

"ru":

"Азия"

"zh-CN":

"亚洲"

}

}

"country":

{

"geoname_id":

1814991

"iso_code":

"CN"

"names":

{

"de":

"China"

"en":

"China"

"es":

"China"

"fr":

"Chine"

"ja":

"中国"

"pt-BR":

"China"

"ru":

"Китай"

"zh-CN":

"中国"

}

}

"registered_country":

{

"geoname_id":

1814991

"iso_code":

"CN"

"names":

{

"de":

"China"

"en":

"China"

"es":

"China"

"fr":

"Chine"

"ja":

"中国"

"pt-BR":

"China"

"ru":

"Китай"

"zh-CN":

"中国"

}

}

}

2、获取城市信息,这个数据就有点纠结了,省份没有问题,城市是有问题的!  官方演示地址 非常精准,也许这就是免费和收费的差别 :)

$ /usr/local/bin/mmdblookup --file /mnt/data/geolite2/GeoLite2-City.mmdb --ip 112.225.35.70

{

"city":

{

"geoname_id":

1805753

"names":

{

"de":

"Jinan"

"en":

"Jinan"

"es":

"Jinan"

"fr":

"Jinan"

"ja":

"済南市"

"pt-BR":

"Jinan"

"ru":

"Цзинань"

"zh-CN":

"济南"

}

}

"continent":

{

"code":

"AS"

"geoname_id":

6255147

"names":

{

"de":

"Asien"

"en":

"Asia"

"es":

"Asia"

"fr":

"Asie"

"ja":

"アジア"

"pt-BR":

"Ásia"

"ru":

"Азия"

"zh-CN":

"亚洲"

}

}

"country":

{

"geoname_id":

1814991

"iso_code":

"CN"

"names":

{

"de":

"China"

"en":

"China"

"es":

"China"

"fr":

"Chine"

"ja":

"中国"

"pt-BR":

"China"

"ru":

"Китай"

"zh-CN":

"中国"

}

}

"location":

{

"latitude":

36.668300

"longitude":

116.997200

"time_zone":

"Asia/Shanghai"

}

"registered_country":

{

"geoname_id":

1814991

"iso_code":

"CN"

"names":

{

"de":

"China"

"en":

"China"

"es":

"China"

"fr":

"Chine"

"ja":

"中国"

"pt-BR":

"China"

"ru":

"Китай"

"zh-CN":

"中国"

}

}

"subdivisions":

[

{

"geoname_id":

1796328

"iso_code":

"37"

"names":

{

"en":

"Shandong Sheng"

"zh-CN":

"山东省"

}

}

]

}

因为获取的数据是 Json 格式,所以根据帮助文档提示可以对内容进行格式化输出,如输出城市数据库中 city->names->zh-CN 内容

$ /usr/local/bin/mmdblookup --file /mnt/data/geolite2/GeoLite2-City.mmdb --ip 112.225.35.70 city names zh-CN

"济南"

虽然 GeoIP2 在城市定位分析的不是很理想,但对我来说精度可以接受,聊胜于无嘛!

作者:johnnycode 发表于2014-12-19 19:53:14 原文链接

阅读:6 评论:0 查看评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值