通过使用开放的应用程序编程接口(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发行版,请使用你发行版的包管理器进行安装。
sudo apt-get install curl jq
获取服务器的公网IP地址
在获取地理位置数据之前,我们需要服务器的公网IP地址。使用curl
在终端窗口中向ipinfo.io
发起API请求。
curl https://ipinfo.io/ip
从API获取地理位置数据
现在我们有了服务器的公网IP,我们可以使用ipvigilante.com
的API获取地理位置数据。将 <你的IP地址>
替换为上一个命令返回的IP地址。
curl https://ipvigilante.com/<你的IP地址>
让我们仔细看看这个API调用返回的数据:
API返回服务器所在的城市、国家和大陆信息。它还返回近似的纬度和经度坐标,以防我们需要在地图上标记服务器的位置。我们将在脚本中使用“纬度”、“经度”、“城市名称”和“国家名称”这四个字段。 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' | while read -r LATITUDE; do read -r LONGITUDE read -r CITY read -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
使用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
文件的内容。我们可以使用这些数据做一些有趣的事情,例如在地图上绘制服务器的位置,并将地理位置与流量日志结合起来,以了解服务器在世界上的热点位置。