Cum să obțineți IP-ul dvs. public într-un script Linux Bash

Publicat: 2022-11-12
Laptop pe un fundal albastru care arată un prompt de comandă Linux.
fatmawati achmad zaenuri/Shutterstock.com
Puteți obține IP-ul extern de pe un site web cu comanda curl precum „curl -s ifconfig.me”. Cu toate acestea, site-urile web se pot schimba. Pentru un răspuns mai de încredere, utilizați comanda dig, cum ar fi „dig @resolver1.opendns.com myip.opendns.com +short” pentru a vă obține IP-ul de la un server DNS.

Veți avea nevoie de adresa IP externă dacă doriți să vă conectați de la distanță la computer. Găsirea manuală este ușoară, dar iată cum să-l găsiți dintr-un script Linux.

Adrese IP interne și externe

Adresele de protocol Internet sunt folosite pentru a identifica dispozitivele dintr-o rețea. Sunt o etichetă unică în rețea, atribuită unui singur dispozitiv. Dacă un alt dispozitiv dorește să trimită date către acel dispozitiv, poate face acest lucru folosind adresa sa IP.

Cum funcționează adresele IP?
LEGATE Cum funcționează adresele IP?

Modemul dvs. de bandă largă are încorporat un router de rețea care direcționează traficul de rețea în jurul rețelei de la dispozitiv la dispozitiv. Este, de asemenea, autoritatea locală care alocă adrese IP dispozitivelor atunci când acestea se alătură rețelei. De asemenea, menține un tabel cu nume de rețele și adrese IP. Acest lucru vă permite să dați nume semnificative computerelor din rețeaua dvs., deoarece — pentru oameni — este mai ușor să lucrați cu numele decât cu listele de numere.

Dispozitivele de pe internet au și o adresă IP. Unele dintre ele au și nume, cum ar fi site-uri web. Furnizorii de servicii de nume de domeniu caută nume de domenii ale site-urilor web și le schimbă automat cu adrese IP.

Modemul dumneavoastră de bandă largă primește propria sa adresă IP externă sau conectată la internet de către Furnizorul dumneavoastră de servicii de internet (ISP). Indiferent de numărul de dispozitive pe care le-ați putea avea în casa dvs. care sunt conectate la internet, traficul lor combinat este tot prin acea singură adresă IP.

Dacă sunteți în afara orașului și doriți să vă conectați la un serviciu pe care îl aveți pe unul dintre computerele din casă, va trebui să utilizați adresa IP externă pentru a face acest lucru. Routerul dvs. va trebui configurat pentru a vă direcționa cererea de conexiune către dispozitivul corespunzător din casa dvs., desigur.

Cu excepția cazului în care plătiți un pic suplimentar ISP-ului dvs. în fiecare lună pentru o adresă IP statică , adresa dvs. IP externă se poate schimba din când în când. Repornirea modemului în bandă largă ar putea avea ca rezultat obținerea unei alte adrese IP externe. Deci, dacă trebuie să știți adresa IP externă, nu o puteți verifica o singură dată și o puteți stoca. Va trebui să determinați periodic despre ce este vorba.

Găsirea adresei IP externe

A descoperi adresa IP externă înseamnă a vorbi cu ceva care se află în afara rețelei tale. Cu alte cuvinte, accesarea a ceva pe internet care ne poate oferi informațiile pe care ni le dorim. Trebuie să privim în gol și să vedem ce se uită înapoi la noi. Și apoi cereți-i adresa noastră externă.

Există două moduri în care putem face acest lucru. O modalitate implică site-urile web. Există o mulțime de site-uri web care vă vor arăta care este adresa dvs. IP externă, precum și o mulțime de alte informații. Puteți să le accesați în browser sau să utilizați un instrument de linie de comandă, cum ar fi curl , care poate face solicitări HTTPS.

Cealaltă modalitate este să utilizați o comandă dedicată precum dig . Comanda dig interoghează serverele DNS pentru a prelua informații.

Folosind un browser

Desigur, utilizarea unui browser nu este o modalitate prietenoasă cu scripturile de a obține adresa IP externă. Dar privirea unui site web care oferă acel serviciu ne poate oferi informații utile. Obișnuiam să recomandăm ip4.me, dar site-ul nu a fost actualizat la HTTPS. Încă folosește HTTP mai vechi, nesigur. Site-ul încă funcționează, dar acum există alternative mai bune.

Site-ul ifconfig.me oferă un set bun de informații.

Site-ul web ifconfig.me care afișează o adresă IP externă

Aceasta raportează IP-ul nostru extern ca 178.238.11.140. Derulând în jos prin pagina web, veți găsi o listă de comenzi pe care le puteți utiliza pentru a prelua informații de pe site.

Site-ul web ifconfig.me care afișează o serie de comenzi cURL

Exemplele pe care le oferă toate folosesc curl pentru a interoga site-ul. Deci, să aruncăm o privire la utilizarea curl .

Folosind curl

Pe mașinile noastre de testare, Fedora 37 avea deja instalat curl . Trebuie să-l instalăm pe computerele noastre Ubuntu și Manjaro.

Pentru a-l instala pe Ubuntu tastați:

 sudo apt install curl 

Instalarea curl pe Ubuntu

Comanda de pe Manjaro este:

 sudo pacman -S curl 

Instalarea curl pe Manjaro

Putem încerca acest lucru cu prima comandă listată pe pagina web ifconfig.me .

 curl ifconfig.me 

Preluarea unei adrese IP externe utilizând acțiunea implicită a site-ului web ifconfig.me

Adresa noastră IP externă este preluată și afișată în fereastra terminalului. Ieșirea este simplă. Nu există nici măcar un caracter newline tipărit după șir. Linia de comandă este îndreptată direct cu adresa IP.

Cum să utilizați curl pentru a descărca fișiere de pe linia de comandă Linux
RELATE Cum să utilizați curl pentru a descărca fișiere de pe linia de comandă Linux

Această comandă funcționează deoarece returnarea adresei IP este acțiunea implicită a site-ului web. Dacă acțiunea implicită se schimbă vreodată, este posibil să primim un rezultat diferit returnat. Pentru a face față acestui lucru, putem specifica că ne solicităm adresa IP adăugând identificatorul „ip” la adresa URL.

 curl ifconfig.me/ip 

Preluarea unei adrese IP externe folosind site-ul web ifconfig.me cu indicatorul de ip

Aceasta returnează adresa IP ca înainte.

Aceasta ilustrează problema cu utilizarea unui site web ca sursă a adresei dumneavoastră IP. Site-urile web se pot închide sau pot schimba modul în care funcționează sau formatul informațiilor returnate. Aceste modificări vor face ca scripturile care depind de aceste site-uri fie să eșueze, fie să se comporte imprevizibil.

Utilizarea unei resurse de încredere și de încredere, cum ar fi un server DNS, este o modalitate mai robustă de a obține IP-ul extern. Pentru a interoga un server DNS trebuie să folosim comanda dig.

LEGATE: Ce este DNS și ar trebui să folosesc un alt server DNS?

Folosind comanda dig

De data aceasta, dig a fost instalat pe Fedora și Ubuntu și a trebuit să-l instalăm doar pe Manjaro.

Comanda este comanda obișnuită pacman , deci nu există surprize, dar numele pachetului nu este ceea ce v-ați putea aștepta.

 sudo pacman -S bind-tools 

Instalarea dig pe Manjaro

Pentru a folosi dig pentru a descoperi adresa noastră IP externă, trebuie să o îndreptăm către un server DNS. Folosim serverul OpenDNS, care este furnizat de Cisco.

Trebuie să specificăm numele serverului DNS pe care dorim să-l folosim, precedat de semnul „@”. De asemenea, trebuie să denumim tipul de înregistrare pe care dorim să îl regăsim. În acest caz, este „myip”. Opțiunea +short ne asigură că obținem un răspuns concis, și nu unul pronunțat.

 dig @resolver1.opendns.com myip.opendns.com +scurt 

Preluarea unei adrese IP externe de la un server DNS cu comanda dig

De data aceasta, adresa noastră IP are un caracter de linie nouă tipărită după ea. După cum vom vedea, aceasta este tipărită după șirul adresei IP, nu este o parte integrantă a șirului în sine.

LEGATE: Cum să utilizați comanda dig pe Linux

Folosind acestea într-un script

Există multe motive pentru care ați putea dori să cunoașteți adresa IP externă din interiorul unui script. Poate că aveți un script care monitorizează dacă adresa IP externă s-a schimbat și vă anunță când se întâmplă acest lucru. Sau poate un server își anunță clienții când adresa se schimbă. Indiferent de motivele dvs., putem implementa destul de ușor comenzile pe care le-am folosit pe linia de comandă în interiorul unui script.

Pentru a prelua adresa noastră IP externă și a o atribui unei variabile, trebuie doar să încapsulăm comanda într-o substituție de comandă, $(...) și să o atribuim unei variabile, astfel:

 variabilă=$(...)

Comanda din paranteze este executată și valoarea returnată este înlocuită cu expresia. În acest exemplu, comanda este simplificată la „variabilă=valoare de returnare”.

LEGATE: Cum să lucrați cu variabile în Bash

Iată-l într-un scenariu. Am adăugat opțiunea -s (silențioasă) la comanda curl pentru a preveni raportarea progresului regăsării datelor.

 #!/bin/bash

extaddr=$(curl -s ifconfig.me)

echo „Adresa IP externă este $extaddr (de la cURL)”

Copiați acest script într-un editor și salvați-l ca „getex1.sh” și faceți-l executabil cu comanda chmod .

 chmod +x getex1.sh 

Realizarea unui script executabil cu chmod

Să executăm scriptul și să vedem ce obținem.

 ./getex1.sh 

Rularea scriptului getex1.sh

Pentru a face același lucru cu opțiunea mai robustă de a folosi un server DNS mai degrabă decât un site web, tot ce trebuie să facem este să înlocuim comanda curl cu cea dig .

 #!/bin/bash

extaddr=$(dig @resolver1.opendns.com myip.opendns.com +short)

echo „Adresa IP externă este $extaddr (din dig)”

Salvați acest lucru ca script „getex2.sh” și faceți-l executabil cu chmod .

 chmod +x getex2.sh 

Realizarea unui script executabil cu chmod

Să executăm acest script.

 ./getex2.sh 

Rularea scriptului getex2.sh

Putem vedea din ieșirea celor două scripturi că, în ciuda comenzii dig care imprimă un caracter newline pe linia de comandă, în script nu există nicio linie nouă adăugată la variabila extaddr .

Mergeți pentru fiabilitate

Este întotdeauna mai sigur să utilizați un serviciu recunoscut, care este de renume și are un format de ieșire previzibil decât să utilizați un site web „neoficial”. Ca orice altceva de pe internet, uitați-vă bine la cine vă obțineți informațiile.

LEGATE: Cum să permiteți scripturilor Linux să detecteze că rulează în mașinile virtuale