![Hoe u uw openbare IP-adres in een Linux Bash-script kunt krijgen Hoe u uw openbare IP-adres in een Linux Bash-script kunt krijgen](https://www.howtogeek.com/wp-content/uploads/2021/11/shutterstock_1278851809.png?width=1198&trim=1,1&bg-color=000&pad=1,1)
U hebt uw externe IP-adres nodig als u op afstand verbinding wilt maken met uw computer. Handmatig vinden is eenvoudig, maar hier is hoe je het kunt vinden vanuit een Linux-script.
Interne en externe IP-adressen
Internet Protocol-adressen worden gebruikt om apparaten op een netwerk te identificeren. Ze zijn een uniek label op het netwerk, toegewezen aan een enkel apparaat. Als een ander apparaat gegevens naar dat apparaat wil sturen, kan het dat doen met behulp van zijn IP-adres.
Uw breedbandmodem heeft een ingebouwde netwerkrouter die het netwerkverkeer rond het netwerk van apparaat naar apparaat leidt. Het is ook de lokale overheid die IP-adressen toewijst aan apparaten wanneer ze verbinding maken met het netwerk. Het onderhoudt ook een tabel met netwerknamen en IP-adressen. Hierdoor kunt u betekenisvolle namen geven aan de computers in uw netwerk, omdat – voor mensen – namen gemakkelijker zijn om mee te werken dan lijsten met nummers.
Apparaten op de internetten hebben ook een IP-adres. Sommigen van hen hebben ook namen, zoals websites. Domeinnaamserviceproviders zoeken domeinnamen van websites op en wisselen deze automatisch in voor IP-adressen.
Uw breedbandmodem krijgt een eigen internetaansluiting of extern IP-adres door uw internetprovider (ISP). Ongeacht het aantal apparaten dat u in huis heeft dat is verbonden met internet, hun gecombineerde verkeer gaat allemaal via dat ene IP-adres.
Als u de stad uit bent en verbinding wilt maken met een dienst die op een van de computers in uw huis draait, moet u hiervoor uw externe IP-adres gebruiken. Uw router moet natuurlijk worden ingesteld om uw verbindingsverzoek naar het juiste apparaat in uw huis te leiden.
Tenzij je elke maand een beetje extra betaalt aan je ISP voor een statisch IP-adres uw externe IP-adres kan van tijd tot tijd veranderen. Het opnieuw opstarten van uw breedbandmodem kan ertoe leiden dat u een ander extern IP-adres krijgt. Dus als u uw externe IP-adres wilt weten, hoeft u dit niet één keer te controleren en op te slaan. U moet periodiek bepalen wat het is.
Uw externe IP-adres vinden
Om uw externe IP-adres te achterhalen, moet u praten met iets dat zich buiten uw netwerk bevindt. Met andere woorden, toegang krijgen tot iets op internet dat ons de informatie kan geven die we willen. We moeten in de leegte kijken en zien wat er naar ons terugkijkt. En vraag dan naar ons externe adres.
Er zijn twee manieren waarop we dit kunnen doen. Een manier omvat websites. Er zijn veel websites die u laten zien wat uw externe IP-adres is, en ook een heleboel andere informatie. U kunt deze openen in uw browser of een opdrachtregelprogramma zoals curl
die HTTPS-verzoeken kan doen.
De andere manier is om een speciale opdracht zoals dig
. De dig
opdracht ondervraagt DNS-servers om informatie op te halen.
Een browser gebruiken
Het gebruik van een browser is natuurlijk geen scriptvriendelijke manier om uw externe IP-adres te verkrijgen. Maar als we naar een website kijken die die service levert, kunnen we nuttige informatie krijgen. Vroeger raadden we ip4.me aan, maar de site is niet bijgewerkt naar HTTPS. Het gebruikt nog steeds de oudere, onveilige HTTP. De site werkt nog steeds, maar er zijn nu betere alternatieven.
De site ifconfig.me biedt een goede set informatie.
Dit rapporteert ons externe IP als 178.238.11.140. Als u door de webpagina naar beneden scrolt, vindt u een lijst met opdrachten die u kunt gebruiken om informatie van de site op te halen.
De voorbeelden die ze geven zijn allemaal bruikbaar curl
om de site te ondervragen. Dus laten we eens kijken naar het gebruik curl
.
Krul gebruiken
Op onze testmachines had Fedora 37 dat al curl
geïnstalleerd. We moesten het installeren op onze Ubuntu- en Manjaro-computers.
Om het op Ubuntu-type te installeren:
sudo apt install curl
Het commando op Manjaro is:
sudo pacman -S curl
We kunnen dit uitproberen met het eerste commando dat op de ifconfig.me
webpagina.
curl ifconfig.me
Ons externe IP-adres wordt opgehaald en weergegeven in het terminalvenster. De uitvoer is kaal. Er is niet eens een newline-teken afgedrukt na de string. De opdrachtprompt staat recht tegen het IP-adres aan.
Deze opdracht werkt omdat het retourneren van het IP-adres de standaardactie van de website is. Als de standaardactie ooit verandert, krijgen we mogelijk een ander resultaat terug. Om hieraan tegemoet te komen, kunnen we specificeren dat we om ons IP-adres vragen door de “ip”-identificatiecode aan de URL toe te voegen.
curl ifconfig.me/ip
Dit retourneert het IP-adres zoals voorheen.
Dit illustreert het probleem met het gebruik van een website als de bron van uw IP-adres. Websites kunnen sluiten of ze kunnen de manier waarop ze werken of het formaat van de geretourneerde informatie wijzigen. Deze wijzigingen zorgen ervoor dat scripts die afhankelijk zijn van deze sites falen of zich onvoorspelbaar gedragen.
Het gebruik van een gerenommeerde en betrouwbare bron zoals een DNS-server is een robuustere manier om uw externe IP te verkrijgen. Om een DNS-server te bevragen, moeten we de opdracht dig gebruiken.
Het dig-commando gebruiken
Deze keer, dig
is geïnstalleerd op Fedora en Ubuntu, en we hoefden het alleen op Manjaro te installeren.
De opdracht is de gebruikelijke pacman
commando, dus geen verrassingen daar, maar de pakketnaam is niet wat je zou verwachten.
sudo pacman -S bind-tools
Gebruiken dig
om ons externe IP-adres te ontdekken, moeten we het naar een DNS-server verwijzen. We gebruiken de OpenDNS-server, die wordt geleverd door Cisco.
We moeten de naam specificeren van de DNS-server die we willen gebruiken, voorafgegaan door een apenstaartje “@”. We moeten ook het recordtype noemen dat we willen ophalen. In dit geval is het ‘mijnip’. De +short
optie zorgt ervoor dat we een beknopte reactie krijgen, en geen uitgebreide.
dig @resolver1.opendns.com myip.opendns.com +short
Deze keer wordt er achter ons IP-adres een teken voor een nieuwe regel afgedrukt. Zoals we zullen zien, wordt dit afgedrukt na de IP-adresstring, het is geen integraal onderdeel van de string zelf.
Deze gebruiken in een script
Er zijn veel redenen waarom u uw externe IP-adres vanuit een script wilt weten. Misschien heb je een script dat in de gaten houdt of je externe IP-adres is gewijzigd en je daarvan op de hoogte stelt. Of misschien stelt een server zijn klanten op de hoogte wanneer zijn adres verandert. Wat je redenen ook zijn, we kunnen de commando’s die we op de commandoregel hebben gebruikt vrij eenvoudig in een script implementeren.
Om ons externe IP-adres op te halen en toe te wijzen aan een variabele, hoeven we alleen de opdracht in een opdrachtvervanging te plaatsen, $(...)
en wijs het toe aan een variabele, zoals deze:
variable=$(...)
De opdracht tussen haakjes wordt uitgevoerd en de geretourneerde waarde wordt vervangen door de expressie. In dit voorbeeld wordt de opdracht vereenvoudigd tot “variabele=retourwaarde”.
Hier staat het in een script. We hebben de toegevoegd -s
(stille) optie voor de curl
commando om te voorkomen dat het de voortgang van het ophalen van gegevens rapporteert.
#!/bin/bash extaddr=$(curl -s ifconfig.me) echo "The external IP address is $extaddr (from cURL)"
Kopieer dit script naar een editor en sla het op als “getex1.sh”, en maak het uitvoerbaar met de chmod
opdracht.
chmod +x getex1.sh
Laten we het script uitvoeren en kijken wat we krijgen.
./getex1.sh
Om hetzelfde te doen met de robuustere optie om een DNS-server te gebruiken in plaats van een website, hoeven we alleen maar de curl
commando met de dig
een.
#!/bin/bash extaddr=$(dig @resolver1.opendns.com myip.opendns.com +short) echo "The external IP address is $extaddr (from dig)"
Sla dit op als script “getex2.sh” en maak het uitvoerbaar met chmod
.
chmod +x getex2.sh
Laten we dit script uitvoeren.
./getex2.sh
We kunnen aan de uitvoer van de twee scripts zien dat ondanks het commando dig
door een newline-teken op de opdrachtregel af te drukken, wordt er in het script geen newline toegevoegd aan het extaddr
variabel.
Ga voor betrouwbaarheid
Het is altijd veiliger om een erkende service te gebruiken die een goede reputatie heeft en een voorspelbaar uitvoerformaat heeft dan om een ”niet-officiële” website te gebruiken. Net als bij alles op internet, moet je goed kijken van wie je je informatie haalt.’