Como obter a localização geográfica do seu sistema a partir de um script Bash

Você pode encontrar a localização geográfica de um sistema Linux remoto usando APIs abertas e um script bash simples. A localização geográfica de um servidor pode ajudá-lo a rastreá-lo no mundo físico, garantindo que os servidores estejam localizados em hotspots regionais.

Cada servidor na Internet possui um endereço IP voltado para o público. Isso é atribuído diretamente ao servidor ou a um roteador que envia tráfego para esse servidor. Os endereços IP nos dão uma ideia sobre onde esse servidor está localizado no mundo. Podemos obter esses dados de geolocalização por meio de duas APIs abertas, fornecidas por ipinfo.co e IP Vigilante, e usá-los para ver a cidade, o estado e o país associados a um servidor ou outro sistema remoto. Isso não fornece uma localização GPS precisa; apenas permite que você veja a área geral do endereço IP.

Conecte-se a um sistema remoto

Você executará os seguintes comandos no servidor Linux ou em outros sistemas remotos que deseja localizar geograficamente, portanto, você deve se conectar ao servidor e acessar um shell nele primeiro. Por exemplo, você pode se conectar via SSH. Você poderia executar os comandos em seu sistema local para encontrar sua localização, mas provavelmente já sabe onde está!

  Como usar o Control Center no seu iPhone ou iPad

Instale curl e jq

Precisamos de duas ferramentas para acessar a API de geolocalização: curl para fazer solicitações HTTP e jq para processar os dados JSON que recebemos. Abra um terminal e use apt-get para instalar essas ferramentas em sistemas baseados em Ubuntu ou Debian. Em outras distribuições Linux, use a ferramenta de instalação de pacotes da distribuição Linux.

sudo apt-get install curl jq

Encontre o endereço IP público do servidor

Também precisamos do endereço IP público do servidor antes de obter os dados de geolocalização. Use curl para fazer uma chamada de API para ipinfo.io na janela do seu terminal.

curl https://ipinfo.io/ip

Obtenha dados de localização da API

Agora que temos o IP público do servidor, podemos fazer uma chamada para a API de ipvigilante.com para obter os dados de geolocalização. Substituir com o endereço que voltou no comando anterior.

curl https://ipvigilante.com/

Vamos dar uma olhada mais de perto nos dados que recebemos desta chamada:

  Como desativar a limitação de energia da CPU da Dell para adaptadores de energia desconhecidos

A API retorna a cidade, país e continente em que nosso servidor reside. Ele também retorna as coordenadas aproximadas de latitude e longitude, caso desejemos desenhar este servidor em um mapa interativo. Estaremos usando “latitude,” “longitude,” “city_name,” e “country_name” em nosso script. O comando jq entende como processar os dados da API e extrair esses quatro campos.

Criação de um script para automatizar a chamada de API

Podemos criar um script que pega os dados de geolocalização e os grava em um arquivo no formato CSV. Os dados serão gravados em um arquivo chamado server_location.txt no diretório / tmp /. Abra seu editor favorito e crie um script chamado geolocate.sh. Insira o conteúdo do script mostrado abaixo e certifique-se de substituir o endereço IP pelo seu:

#!/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

Salve o script e volte para o terminal. Torne o script executável a partir do terminal, concedendo a permissão de execução neste arquivo.

chmod u+x geolocate.sh

Agora você está pronto para testá-lo. Execute o script geolocate.sh e verifique o conteúdo do arquivo de saída:

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

Atualizar os dados de geolocalização uma vez por dia com um Cron Job

Vamos criar um cron job para fazer nosso servidor atualizar sua geolocalização e salvá-lo em um arquivo uma vez por dia. O cron job diário atualiza um arquivo chamado server_location.txt na pasta / tmp / do servidor. Criar um cron job de 24 horas é tão fácil quanto colocar nosso script no diretório /etc/cron.daily. Devemos usar o comando sudo para copiar o arquivo como o usuário root, para evitar problemas de permissão. Execute o seguinte comando para copiar geolocate.sh para o diretório /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Essas mudanças são imediatas e nosso script será executado a cada 24 horas para atualizar o conteúdo do arquivo /tmp/server_location.txt. Podemos usar esses dados para fazer coisas interessantes, como traçar nossos servidores em um mapa, bem como combinar geolocalização com registros de tráfego para ver onde no mundo nossos hotspots de servidor estão.

  Como organizar atalhos em pastas no iPhone e iPad