Bash 스크립트에서 시스템의 지리적 위치를 가져오는 방법

개방형 API와 간단한 bash 스크립트를 사용하여 원격 Linux 시스템의 지리적 위치를 찾을 수 있습니다. 서버의 지리적 위치를 지정하면 실제 세계에서 서버를 추적하는 데 도움이 되어 서버가 지역 핫스팟에 위치하도록 할 수 있습니다.

인터넷의 각 서버에는 공개 IP 주소가 있습니다. 이것은 서버에 직접 할당되거나 해당 서버로 트래픽을 보내는 라우터에 할당됩니다. IP 주소는 해당 서버가 전 세계 어디에 있는지에 대한 단서를 제공합니다. ipinfo.co 및 IP Vigilante에서 제공하는 두 개의 개방형 API를 통해 이 지리적 위치 데이터를 얻을 수 있으며 이를 사용하여 서버 또는 기타 원격 시스템과 연결된 도시, 주 및 국가를 볼 수 있습니다. 이것은 정확한 GPS 위치를 제공하지 않습니다. 그것은 단지 당신이 IP 주소의 일반적인 영역을 볼 수 있습니다.

원격 시스템에 연결

지리적 위치를 확인하려는 Linux 서버 또는 기타 원격 시스템에서 다음 명령을 실행할 것이므로 먼저 서버에 연결하고 해당 서버의 셸에 액세스해야 합니다. 예를 들어 SSH를 통해 연결할 수 있습니다. 로컬 시스템에서 명령을 실행하여 해당 위치를 찾을 수 있지만 이미 어디에 있는지 알고 있을 것입니다!

curl 및 jq 설치

Geolocation API에 액세스하려면 두 가지 도구가 필요합니다. HTTP 요청을 만드는 curl과 반환된 JSON 데이터를 처리하는 jq입니다. 터미널을 열고 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가 있으므로 ipvigilante.com의 API를 호출하여 지리적 위치 데이터를 가져올 수 있습니다. 바꾸다 이전 명령에서 돌아온 주소로.

curl https://ipvigilante.com/

이 호출에서 반환되는 데이터를 자세히 살펴보겠습니다.

  iOS에서 Dock에 앱 폴더를 추가하는 방법 [No Jailbreak]

API는 서버가 있는 도시, 국가 및 대륙을 반환합니다. 또한 대화형 지도에 이 서버를 그리려는 경우에 대비하여 대략적인 위도 및 경도 좌표를 반환합니다. 우리는 스크립트에서 “위도”, “경도”, “city_name” 및 “country_name”을 사용할 것입니다. jq 명령은 API 데이터를 처리하고 이 네 개의 필드를 추출하는 방법을 이해합니다.

API 호출을 자동화하는 스크립트 만들기

지리 위치 데이터를 가져와 CSV 형식의 파일에 쓰는 스크립트를 만들 수 있습니다. 데이터는 /tmp/ 디렉토리의 server_location.txt라는 파일에 기록됩니다. 좋아하는 편집기를 열고 geolocate.sh 라는 스크립트를 만듭니다. 아래 표시된 스크립트 내용을 삽입하고 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

스크립트를 저장하고 터미널로 돌아갑니다. 이 파일에 대한 실행 권한을 부여하여 터미널에서 스크립트를 실행 가능하게 만드십시오.

chmod u+x geolocate.sh

이제 테스트할 준비가 되었습니다. geolocate.sh 스크립트를 실행하고 출력 파일의 내용을 확인합니다.

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

Cron 작업으로 하루에 한 번 지리 위치 데이터 업데이트

서버가 지리적 위치를 업데이트하고 하루에 한 번 파일에 저장하도록 크론 작업을 생성해 보겠습니다. 일일 크론 작업은 서버의 /tmp/ 폴더에 있는 server_location.txt라는 파일을 업데이트합니다. 24시간 크론 작업을 만드는 것은 스크립트를 /etc/cron.daily 디렉토리에 넣는 것만큼 쉽습니다. 권한 문제를 피하기 위해 sudo 명령을 사용하여 루트 사용자로 파일을 복사해야 합니다. 다음 명령을 실행하여 geolocate.sh를 /etc/cron.daily 디렉토리에 복사하십시오.

sudo cp geolocate.sh /etc/cron.daily

이러한 변경 사항은 즉시 적용되며 스크립트는 24시간마다 실행되어 /tmp/server_location.txt 파일의 내용을 업데이트합니다. 우리는 이 데이터를 사용하여 지도에 서버를 표시하고 지리적 위치를 교통 로그와 결합하여 서버 핫스팟이 전 세계 어디에 있는지 확인하는 등 흥미로운 작업을 수행할 수 있습니다.

  Google 슬라이드에 화면 녹화를 추가하는 방법