一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Linux命令行获取IP地址的实际地理位置

时间:2022-11-14 22:08:10 编辑:袖梨 来源:一聚教程网

方法一

第一种方法是使用geoiplookup工具,它是一个用于查询MaxMind的GeoIP数据库的命令行客户端。geoiplookup允许你查询一个IP地址(或域名)的地理信息或者网络信息。你可以通过以下命令安装它(它自带了免费的GeoIP数据库)。

在Debian,Ubuntu或Linux Mint上安装geoiplookup:


sudo apt-get install geoip-bin

在Fedora上安装:


sudo yum install geoip

要在CentOS上安装,需要先打开EPEL源,然后使用yum命令:


sudo yum install geoip

默认情况下安装的geoiplookup以及GeoIP.dat数据库文件位于/usr/share/GeoIP。这个数据库只能查询到国家信息。


geoiplookup 23.66.166.151



GeoIP Country Edition: US, United States

你可以从MaxMind上下载额外的GeoIP数据库,它将会告诉你更详细的信息而不仅仅是国家。你也可以从这个网站上下载到许多最新的GeoIP.dat数据库。我推荐你这么做因为从Linux源上安装的GeoIP.dat可能已经过时了。MaxMind上的GeoIP数据库每月更新一次。

要从MaxMind上安装GeoIP数据库,按照下面的方法。你可能想添加一个cronjob(crontab任务,crontab是Unix和类Unix系统中用于周期性执行任务的指令,译注)来使这个过程自动化。


wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
gunzip GeoIP.dat.gz
gunzip GeoIPASNum.dat.gz
gunzip GeoLiteCity.dat.gz
sudo cp GeoIP.dat GeoIPASNum.dat GeoLiteCity.dat /usr/share/GeoIP/

现在如果你重新执行geoiplookup,你将会看到额外的自治系统编号(AS Number)信息。这将会让你大致了解这个IP地址是属于哪个管理域(administrative domain)。


geoiplookup 128.112.119.209



GeoIP Country Edition: US, United States
GeoIP ASNum Edition: AS88 Princeton University

如果在运行命令时不带任何参数,geoiplookup工具将只自动的使用GeoIP.dat和GeoIPASNum.dat,而不会用GeoLiteCity.dat。后面将教你查看城市一级的信息。

要获取城市一级的地理位置信息,需要显式的告诉geoiplookup使用GeoLiteCity.dat数据库。

geoiplookup -f /usr/share/GeoIP/GeoLiteCity.dat 23.66.166.151


GeoIP City Edition, Rev 1: US, MA, Cambridge, 02142, 42.362598, -71.084297, 506, 617

输出包括州,城市,邮政编码,纬度和经度。所指示不同国家和网络地址的准确性因地而异。例如,宽带IP地址的地理位置信息要比移动网络准确。

方法二

如果你想免去安装和升级GeoIP数据库的烦恼,你可以试试ipinfo.io在线服务。和其他的服务不同,ipinfo.io提供了基于JSON的地理信息API,所以你可以很容易的在命令行使用像curl之类的工具获取地理信息。


curl ipinfo.io/23.66.166.151

geoip

需要注意的是它们的API限制每天最高1,000次请求。

热门栏目