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

0
282
인터넷 연결 개념을 가진 세계지도
토리아 /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 우분투 또는 데비안 기반 시스템에 이러한 도구를 설치합니다. 다른 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/

curl 명령의 출력

이 통화에서 어떤 데이터를 다시 얻었는지 자세히 살펴 보겠습니다.

위치 정보를 보여주는 메타 데이터

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

API 호출을 자동화하는 스크립트 작성

지리적 위치 데이터를 가져 와서 CSV 형식으로 파일에 쓰는 스크립트를 만들 수 있습니다. 데이터는라는 파일에 기록됩니다 server_location.txt 에서 /tmp/ 예배 규칙서. 좋아하는 편집기를 열고 이름이 지정된 스크립트를 작성하십시오. 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 작업으로 하루에 한 번 위치 정보 데이터 업데이트

서버가 지리적 위치를 업데이트하고 하루에 한 번 파일에 저장하도록 cron 작업을 만들어 봅시다. 일일 크론 작업은 server_location.txt 에서 /tmp/ 서버의 폴더. 24 시간 크론 작업을 만드는 것은 스크립트를 /etc/cron.daily 예배 규칙서. 권한 문제를 피하기 위해 sudo 명령을 사용하여 파일을 루트 사용자로 복사해야합니다. 다음 명령을 실행하여 복사하십시오. geolocate.sh ~로 /etc/cron.daily 예배 규칙서.

sudo cp geolocate.sh /etc/cron.daily

이러한 변경 사항은 즉시 적용되며 스크립트는 24 시간마다 실행되어 /tmp/server_location.txt 파일. 이 데이터를 사용하여지도에 서버를 플롯하고 지리적 위치를 트래픽 로그와 결합하여 서버 핫스팟이 어디에 있는지 확인할 수 있습니다.