Soms moet u snel de geolocatiegegevens voor een IP-adres opvragen. In Linux kunt u de kracht van console-apps gebruiken om tijd te besparen en deze informatie snel op te halen. Laten we eens kijken hoe het kan worden gedaan.
Advertentie
Om de geolocatie-informatie over een specifiek IP-adres te verkrijgen, moet u een online service gebruiken die de juiste API biedt. Het is een goed idee om een openbare dienst te gebruiken om de autorisatieprocedure en het beheer van de API-sleutel te vermijden. Een van die diensten is FreeGeoIP.net.
Het biedt een openbare HTTP-API om de geolocatie van IP-adressen te doorzoeken. Het maakt gebruik van een database met IP-adressen die aan steden zijn gekoppeld, samen met andere relevante informatie zoals tijdzone, breedtegraad en lengtegraad. Dit is erg handig.
De service kan zoekresultaten leveren als JSON of XML. Dus als we curl combineren met een JSON-parser, kunnen we de vereiste informatie krijgen.
hoe tekst vetgedrukt te maken in Facebook-bericht
Ik zal mijn favoriete JSON-parser gebruiken, jq:
Het is erg licht en snel.
Voor ons geval zou de vraag als volgt moeten zijn:
http://freegeoip.net/json/119.94.116.145
Het 'json'-gedeelte is hier het gewenste gegevensformaat. Naast JSON kan het XML of CSV zijn.
Laten we de query uitvoeren met curl en de uitvoer bekijken:
Het resultaat is onbewerkte JSON-uitvoer die moeilijk te lezen is. Laten we de jq-tool gebruiken om het uiterlijk van de resultatenset te verbeteren. Combineer het als volgt met krul:
krul http://freegeoip.net/json/119.94.116.145|jq
De uitvoer zal gemakkelijker te lezen zijn:
Met jq kun je de uitvoer filteren en ervoor zorgen dat alleen de vereiste velden worden weergegeven. De volgende opdracht geeft alleen de naam van het land, de lengte- en breedtegraad weer:
curl http://freegeoip.net/json/119.94.116.145|jq -r '.country_name, .latitude, .longitude'
U kunt deze opdracht opslaan als het volgende shellscript:
#! / bin / sh curl -s http://freegeoip.net/json/|jq -r '.country_name, .latitude, .longitude'
De volgende keer dat u geolocatiegegevens nodig heeft, kunt u uw script als volgt uitvoeren:
./geo.sh IP-adres
Dat is het.