如何从Bash脚本获取系统的地理位置

您可以使用开放式API和简单的bash脚本找到远程Linux系统的地理位置。对服务器进行地理定位可以帮助您在物理世界中跟踪它,确保服务器位于区域热点地区。

互联网上的每个服务器都有一个面向公众的IP地址。这可以直接分配给服务器,也可以分配给向该服务器发送流量的路由器。IP地址给我们提供了关于服务器在世界上的位置的线索。我们可以通过ipinfo.co和IP Vililante提供的两个开放API获取此地理位置数据,并使用它查看与服务器或其他远程系统相关联的城市、州和国家。这不会给您提供精确的GPS位置;它只会让您看到IP地址的大致区域。

连接到远程系统

您将在想要地理定位的Linux服务器或其他远程系统上运行以下命令,因此您必须首先连接到服务器并访问其上的shell。例如,您可以通过SSH连接。您可以在本地系统上运行命令来查找它的位置,但是您可能已经知道自己在哪里了!

安装cURL和jq

我们需要两个工具来访问geolocation API:cURL用于发出HTTP请求,而JQ用于处理我们返回的JSON数据。打开终端,使用apt-get在基于Ubuntu或Debian的系统上安装这些工具。在其他Linux发行版上,请改用您的Linux发行版的软件包安装工具。

sudo apt-get install curl jq

查找服务器的公用IP地址

在获得地理位置数据之前,我们还需要服务器的公共IP地址。使用cURL在您的终端窗口中对ipinfo.io进行API调用。

curl https://ipinfo.io/ip

从API获取位置数据

现在我们有了服务器的公网IP,我们可以调用ipiligilante.com的API来获取地理位置数据。将<your IP address>替换为上一个命令中返回的地址。

curl https://ipvigilante.com/

让我们仔细看看我们从这次呼叫中得到了哪些数据:

API返回我们的服务器所在的城市、国家和大陆。它还返回大致的纬度和经度坐标,以防我们想要在交互式地图上绘制此服务器。我们将在脚本中使用“纬度”、“经度”、“城市名称”和“国家名称”。*jq命令了解如何处理API数据并提取出这四个字段。

创建脚本以自动执行API调用

我们可以创建一个脚本来获取地理位置数据,并将其写入CSV格式的文件。数据将写入/tmp/目录中名为server_location.txt的文件。打开您最喜欢的编辑器并创建名为geolocate.sh的脚本。插入如下所示的脚本内容,并确保将IP地址替换为您自己的IP地址:

#!/bin/sh OUTPUT_FILE=/tmp/server_location.txt # Grab this server's public IP address PUBLIC_IP=`curl -s https://ipinfo.io/ip` # Call the geolocation API and capture the output curl -s https://ipvigilante.com/${PUBLIC_IP} | \ jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name' | \ while read -r LATITUDE; do read -r LONGITUDE read -r CITY read -r COUNTRY echo "${LATITUDE},${LONGITUDE},${CITY},${COUNTRY}" | \ tr --delete \" > \ ${OUTPUT_FILE} done

保存脚本并返回终端。通过授予对此文件的EXECUTE权限,使脚本可从终端执行。

chmod u+x geolocate.sh

现在您已经准备好测试它了。运行geolocate.sh脚本并检查输出文件的内容:

./geolocate.sh cat /tmp/server_location.txt

使用Cron作业每天更新一次地理位置数据

让我们创建一个cron作业,使我们的服务器每天更新其地理位置并将其保存到文件中。每天的cron作业更新服务器的/tmp/文件夹中名为server_location.txt的文件。创建24小时cron作业非常简单,只需将我们的脚本放到/etc/cron.Daily目录中即可。我们必须使用sudo命令以root用户身份复制文件,以避免权限问题。运行以下命令将geolocate.sh复制到/etc/cron.Daily目录。

sudo cp geolocate.sh /etc/cron.daily

这些更改是即时的,我们的脚本将每24小时运行一次,以更新/tmp/server_location.txt文件的内容。我们可以使用这些数据来做一些有趣的事情,比如在地图上绘制我们的服务器,以及将地理位置与交通日志结合起来,以查看我们的服务器热点在世界的什么地方。

相关文章