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

与互联网连接概念的世界地图
茯苓/ Shutterstock.com

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

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

连接到远程系统

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

安装curl和jq

我们需要两个工具来访问地理定位API: curl来发出HTTP请求, jq来处理我们得到的JSON数据。 打开终端并使用apt-get在Ubuntu或基于Debian的系统上安装这些工具。 在其他Linux发行版上,请使用Linux发行版的软件包安装工具。

  sudo apt-get install curl jq 

找到服务器的公共IP地址

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

 Curlhttps://ipinfo.io/ip 

从API获取位置数据

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

  curl https://ipvigilante.com/<your ip address> 

curl命令输出

让我们仔细看看我们从这次调用中得到的数据:

元数据显示位置信息

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

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

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

  #!/ bin / sh的

 OUTPUT_FILE = / TMP / server_location.txt

 #抓住此服务器的公共IP地址
 PUBLIC_IP =`curl -s https:// ipinfo.io / ip`

 #调用地理位置API并捕获输出
 curl -s https://ipvigilante.com/${PUBLIC_IP} |  \
         jq'.data.latitude,.data.longitude,.data.city_name,.data.country_name'|  \
        同时阅读-r LATITUDE; 
                读-r LONGITUDE
                读-r CITY
                读-r COUNTRY
                 echo“$ {LATITUDE},$ {LONGITUDE},$ {CITY},$ {COUNTRY}”|  \
                         tr --delete \“> \
                         $ {} OUTPUT_FILE
         DONE

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

  chmod u + x geolocate.sh 

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

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

运行geolocate脚本

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

让我们创建一个cron作业,让我们的服务器更新其地理位置,并将其每天保存到一个文件中。 每日cron作业更新server_location.txt/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文件的内容。 我们可以使用这些数据做有趣的事情,例如在地图上绘制我们的服务器以及将地理位置与流量日志结合起来,以查看我们的服务器热点在世界的哪个位置。

赞 (0)
分享到:更多 ()