Jak uzyskać publiczny adres IP w skrypcie Linux Bash?

Opublikowany: 2022-11-12
Laptop na niebieskim tle z wierszem poleceń systemu Linux.
fatmawati achmad zaenuri/Shutterstock.com
Możesz uzyskać swój zewnętrzny adres IP ze strony internetowej za pomocą polecenia curl, takiego jak „curl -s ifconfig.me”. Jednak strony internetowe mogą się zmienić. Aby uzyskać bardziej wiarygodną odpowiedź, użyj polecenia dig, takiego jak „dig @resolver1.opendns.com myip.opendns.com +short”, aby uzyskać swój adres IP z serwera DNS.

Będziesz potrzebować zewnętrznego adresu IP, jeśli chcesz zdalnie połączyć się z komputerem. Znalezienie go ręcznie jest łatwe, ale oto jak go znaleźć w skrypcie Linuksa.

Wewnętrzne i zewnętrzne adresy IP

Adresy protokołu internetowego służą do identyfikacji urządzeń w sieci. To unikalna etykieta w sieci, przypisana do jednego urządzenia. Jeśli inne urządzenie chce wysłać dane do tego urządzenia, może to zrobić przy użyciu swojego adresu IP.

Jak działają adresy IP?
POWIĄZANE Jak działają adresy IP?

Twój modem szerokopasmowy ma wbudowany router sieciowy, który kieruje ruch sieciowy w sieci od urządzenia do urządzenia. Jest to również władza lokalna, która przydziela adresy IP urządzeniom, które dołączają do sieci. Utrzymuje również tabelę nazw sieciowych i adresów IP. Pozwala to na nadanie znaczących nazw komputerom w sieci, ponieważ — dla ludzi — łatwiej jest pracować z nazwami niż listami liczb.

Urządzenia w Internecie również mają adres IP. Niektóre z nich też mają nazwy, np. strony internetowe. Dostawcy usług nazw domen wyszukują nazwy domen witryn internetowych i automatycznie zamieniają je na adresy IP.

Twój modem szerokopasmowy otrzymuje od dostawcy usług internetowych (ISP) własny adres IP lub zewnętrzny adres IP. Niezależnie od liczby urządzeń, które możesz mieć w domu, które są połączone z Internetem, ich łączny ruch odbywa się przez ten pojedynczy adres IP.

Jeśli jesteś poza miastem i chcesz połączyć się z usługą uruchomioną na jednym z komputerów w domu, musisz w tym celu użyć zewnętrznego adresu IP. Oczywiście router będzie musiał zostać skonfigurowany, aby przekierować żądanie połączenia do odpowiedniego urządzenia w domu.

O ile nie płacisz co miesiąc dostawcy usług internetowych za statyczny adres IP, Twój zewnętrzny adres IP może się od czasu do czasu zmieniać. Ponowne uruchomienie modemu szerokopasmowego może spowodować uzyskanie innego zewnętrznego adresu IP. Jeśli więc potrzebujesz znać swój zewnętrzny adres IP, nie możesz go tylko raz sprawdzić i zapisać. Będziesz musiał okresowo określać, co to jest.

Znajdowanie zewnętrznego adresu IP

Odkrycie zewnętrznego adresu IP oznacza rozmowę z czymś, co znajduje się poza siecią. Innymi słowy, dostęp do czegoś w Internecie, co może dostarczyć nam potrzebnych informacji. Musimy zajrzeć w pustkę i zobaczyć, co na nas patrzy. A potem poproś go o nasz adres zewnętrzny.

Możemy to zrobić na dwa sposoby. Jednym ze sposobów są strony internetowe. Istnieje wiele stron internetowych, które pokażą Ci, jaki jest Twój zewnętrzny adres IP, a także kilka innych informacji. Możesz uzyskać do nich dostęp w przeglądarce lub użyć narzędzia wiersza poleceń, takiego jak curl , które może wysyłać żądania HTTPS.

Innym sposobem jest użycie dedykowanego polecenia, takiego jak dig . Polecenie dig odpytuje serwery DNS w celu uzyskania informacji.

Korzystanie z przeglądarki

Oczywiście korzystanie z przeglądarki nie jest przyjaznym dla skryptów sposobem uzyskania zewnętrznego adresu IP. Jednak patrzenie na witrynę, która dostarcza tę usługę, może dostarczyć nam przydatnych informacji. Kiedyś polecaliśmy ip4.me, ale strona nie została zaktualizowana do HTTPS. Nadal używa starszego, niezabezpieczonego protokołu HTTP. Strona nadal działa, ale są teraz lepsze alternatywy.

Witryna ifconfig.me zapewnia dobry zestaw informacji.

Witryna ifconfig.me wyświetlająca zewnętrzny adres IP

To zgłasza nasz zewnętrzny adres IP jako 178.238.11.140. Przewijając stronę w dół, znajdziesz listę poleceń, których możesz użyć do pobrania informacji z witryny.

Strona ifconfig.me wyświetlająca zestaw cURLcommands

Wszystkie przykłady, które podają, używają curl do przesłuchania witryny. Przyjrzyjmy się więc używaniu curl .

Korzystanie z curl

Na naszych testowych maszynach Fedora 37 miała już zainstalowaną curl . Musieliśmy zainstalować go na naszych komputerach Ubuntu i Manjaro.

Aby zainstalować go na Ubuntu wpisz:

 sudo apt zainstaluj curl 

Instalowanie curl na Ubuntu

Polecenie na Manjaro to:

 sudo pacman -S curl 

Instalowanie curl na Manjaro

Możemy to wypróbować za pomocą pierwszego polecenia wymienionego na stronie ifconfig.me .

 curl ifconfig.me 

Pobieranie zewnętrznego adresu IP przy użyciu domyślnej akcji witryny ifconfig.me

Nasz zewnętrzny adres IP jest pobierany i wyświetlany w oknie terminala. Wyjście jest gołe. Po łańcuchu nie ma nawet znaku nowej linii. Wiersz polecenia jest połączony z adresem IP.

Jak używać curl do pobierania plików z wiersza poleceń systemu Linux?
POWIĄZANE Jak używać curl do pobierania plików z wiersza poleceń systemu Linux

To polecenie działa, ponieważ zwracanie adresu IP jest domyślną akcją witryny. Jeśli domyślna akcja kiedykolwiek się zmieni, możemy otrzymać inny wynik zwrócony do nas. Aby temu zaradzić, możemy określić, że żądamy naszego adresu IP, dodając identyfikator „ip” do adresu URL.

 curl ifconfig.me/ip 

Pobieranie zewnętrznego adresu IP za pomocą strony ifconfig.me ze specyfikacją ip

Zwraca adres IP jak poprzednio.

Ilustruje to problem z wykorzystaniem strony internetowej jako źródła twojego adresu IP. Strony internetowe mogą zostać zamknięte lub mogą zmienić sposób działania lub format zwracanych informacji. Zmiany te spowodują, że skrypty zależne od tych witryn albo zawiodą, albo będą zachowywać się nieprzewidywalnie.

Korzystanie z renomowanego i niezawodnego zasobu, takiego jak serwer DNS, jest bardziej niezawodnym sposobem uzyskania zewnętrznego adresu IP. Aby wysłać zapytanie do serwera DNS, musimy użyć polecenia dig.

POWIĄZANE: Co to jest DNS i czy powinienem używać innego serwera DNS?

Korzystanie z polecenia kopania

Tym razem dig został zainstalowany na Fedorze i Ubuntu, a my musieliśmy zainstalować go tylko na Manjaro.

Polecenie jest zwykłym poleceniem pacman , więc nie ma tu niespodzianek, ale nazwa pakietu nie jest taka, jakiej można by się spodziewać.

 sudo pacman -S bind-tools 

Instalowanie dig na Manjaro

Aby użyć dig do wykrycia naszego zewnętrznego adresu IP, musimy wskazać go na serwer DNS. Korzystamy z serwera OpenDNS, który jest dostarczany przez Cisco.

Musimy określić nazwę serwera DNS, którego chcemy użyć, poprzedzoną znakiem „@”. Musimy również nazwać typ rekordu, który chcemy pobrać. W tym przypadku jest to „myip”. Opcja +short zapewnia otrzymanie odpowiedzi zwięzłej, a nie pełnej.

 dig @resolver1.opendns.com myip.opendns.com +krótki 

Pobieranie zewnętrznego adresu IP z serwera DNS za pomocą polecenia dig

Tym razem nasz adres IP ma wydrukowany po nim znak nowej linii. Jak zobaczymy, jest to wypisywane po ciągu adresu IP, nie jest integralną częścią samego ciągu.

POWIĄZANE: Jak korzystać z polecenia dig w systemie Linux

Używanie tych w skrypcie

Istnieje wiele powodów, dla których możesz chcieć poznać swój zewnętrzny adres IP z wnętrza skryptu. Być może masz skrypt, który monitoruje, czy Twój zewnętrzny adres IP uległ zmianie, i powiadamia Cię, gdy to nastąpi. A może serwer powiadamia swoich klientów o zmianie adresu. Bez względu na powody, możemy dość łatwo zaimplementować polecenia, których użyliśmy w wierszu poleceń, w skrypcie.

Aby pobrać nasz zewnętrzny adres IP i przypisać go do zmiennej, musimy tylko owinąć polecenie wewnątrz podstawienia polecenia, $(...) i przypisać je do zmiennej, w następujący sposób:

 zmienna=$(...)

Polecenie wewnątrz nawiasów jest wykonywane, a zwracana wartość jest zastępowana wyrażeniem. W tym przykładzie polecenie zostało uproszczone do „zmienna=wartość zwracana”.

POWIĄZANE: Jak pracować ze zmiennymi w Bash

Tutaj jest w skrypcie. Dodaliśmy opcję -s (silent) do polecenia curl , aby zapobiec raportowaniu postępu pobierania danych.

 #!/kosz/bash

extaddr=$(curl -s ifconfig.me)

echo "Zewnętrzny adres IP to $extaddr (z cURL)"

Skopiuj ten skrypt do edytora i zapisz go jako „getex1.sh” i spraw, aby był wykonywalny za pomocą polecenia chmod .

 chmod +x getex1.sh 

Tworzenie skryptu wykonywalnego za pomocą chmod

Wykonajmy skrypt i zobaczmy, co otrzymamy.

 ./getex1.sh 

Uruchamianie skryptu getex1.sh

Aby zrobić to samo z bardziej niezawodną opcją korzystania z serwera DNS zamiast strony internetowej, wystarczy zastąpić polecenie curl poleceniem dig .

 #!/kosz/bash

extaddr=$(dig @resolver1.opendns.com myip.opendns.com +krótki)

echo "Zewnętrzny adres IP to $extaddr (z dig)"

Zapisz to jako skrypt „getex2.sh” i spraw, aby był wykonywalny za pomocą chmod .

 chmod +x getex2.sh 

Tworzenie skryptu wykonywalnego za pomocą chmod

Wykonajmy ten skrypt.

 ./getex2.sh 

Uruchamianie skryptu getex2.sh

Z wyników obu skryptów widać, że pomimo polecenia dig wypisującego znak nowej linii w linii poleceń, w skrypcie nie ma nowej linii dodanej do zmiennej extaddr .

Postaw na niezawodność

Zawsze bezpieczniej jest korzystać z uznanej usługi, która ma dobrą reputację i ma przewidywalny format wyjściowy, niż korzystanie z „nieoficjalnej” strony internetowej. Jak wszystko inne w Internecie, dobrze przyjrzyj się, od kogo otrzymujesz informacje”.

POWIĄZANE: Jak pozwolić skryptom Linuksa wykryć, że działają w maszynach wirtualnych?