Jak uzyskać publiczny adres IP w skrypcie Linux Bash?
Opublikowany: 2022-11-12Bę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.
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.
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.
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
Polecenie na Manjaro to:
sudo pacman -S curl
Możemy to wypróbować za pomocą pierwszego polecenia wymienionego na stronie ifconfig.me
.
curl 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.
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
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
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
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
Wykonajmy skrypt i zobaczmy, co otrzymamy.
./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
Wykonajmy ten skrypt.
./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?