Как получить свой публичный IP-адрес в сценарии Linux Bash

Опубликовано: 2022-11-12
Ноутбук на синем фоне с командной строкой Linux.
Фатмавати Ачмад Заэнури/Shutterstock.com
Вы можете получить свой внешний IP-адрес с веб-сайта с помощью команды curl, например «curl -s ifconfig.me». Однако веб-сайты могут меняться. Для более надежного ответа используйте команду dig, например «dig @resolver1.opendns.com myip.opendns.com +short», чтобы получить свой IP-адрес с DNS-сервера.

Вам понадобится ваш внешний IP-адрес, если вы хотите удаленно подключиться к вашему компьютеру. Найти его вручную легко, но вот как найти его из скрипта Linux.

Внутренние и внешние IP-адреса

Адреса интернет-протокола используются для идентификации устройств в сети. Это уникальная метка в сети, назначенная одному устройству. Если другое устройство хочет отправить данные на это устройство, оно может сделать это, используя свой IP-адрес.

Как работают IP-адреса?
СВЯЗАННЫЕ Как работают IP-адреса?

В ваш широкополосный модем встроен сетевой маршрутизатор, который направляет сетевой трафик по сети от одного устройства к другому. Это также местный орган, который выделяет IP-адреса устройствам, когда они присоединяются к сети. Он также поддерживает таблицу сетевых имен и IP-адресов. Это позволяет вам давать осмысленные имена компьютерам в вашей сети, потому что людям легче работать с именами, чем со списками номеров.

Устройства в Интернете также имеют IP-адрес. У некоторых из них тоже есть имена, например, веб-сайты. Поставщики услуг доменных имен автоматически ищут доменные имена веб-сайтов и обменивают их на IP-адреса.

Ваш широкополосный модем получает собственный выход в Интернет или внешний IP-адрес от вашего интернет-провайдера (ISP). Независимо от количества устройств, которые могут быть у вас дома, подключенных к Интернету, весь их общий трафик проходит через этот единственный IP-адрес.

Если вы находитесь за городом и хотите подключиться к службе, запущенной на одном из компьютеров в вашем доме, вам нужно будет использовать для этого свой внешний IP-адрес. Конечно, ваш маршрутизатор должен быть настроен для направления вашего запроса на подключение к соответствующему устройству в вашем доме.

Если вы ежемесячно не будете платить немного больше своему интернет-провайдеру за статический IP-адрес, ваш внешний IP-адрес может время от времени меняться. Перезагрузка вашего широкополосного модема вполне может привести к тому, что вы получите другой внешний IP-адрес. Поэтому, если вам нужно узнать свой внешний IP-адрес, вы не можете просто проверить его один раз и сохранить. Вам нужно будет периодически определять, что это такое.

Поиск вашего внешнего IP-адреса

Чтобы узнать свой внешний IP-адрес, нужно поговорить с чем-то, что находится за пределами вашей сети. Другими словами, доступ к чему-то в Интернете, который может дать нам нужную информацию. Нам нужно заглянуть в пустоту и увидеть, что смотрит на нас. А затем спросите у него наш внешний адрес.

Есть два способа сделать это. Один из способов связан с веб-сайтами. Есть много веб-сайтов, которые покажут вам, какой у вас внешний IP-адрес, а также кучу другой информации. Вы можете получить к ним доступ в своем браузере или использовать инструмент командной строки, такой как curl , который может выполнять HTTPS-запросы.

Другой способ — использовать специальную команду, например dig . Команда dig опрашивает DNS-серверы для получения информации.

Использование браузера

Конечно, использование браузера не является удобным для сценариев способом получения внешнего IP-адреса. Но просмотр веб-сайта, предоставляющего эту услугу, может дать нам полезную информацию. Раньше мы рекомендовали ip4.me, но сайт не был обновлен до HTTPS. Он по-прежнему использует старый, небезопасный HTTP. Сайт все еще работает, но теперь есть лучшие альтернативы.

Сайт ifconfig.me предоставляет хороший набор информации.

Веб-сайт ifconfig.me с внешним IP-адресом

Это сообщает о нашем внешнем IP-адресе как 178.238.11.140. Прокрутив веб-страницу вниз, вы найдете список команд, которые можно использовать для получения информации с сайта.

Веб-сайт ifconfig.me, отображающий набор команд cURL

Во всех примерах, которые они приводят, используется curl для опроса сайта. Итак, давайте посмотрим на использование curl .

Использование завитка

На наших тестовых машинах в Fedora 37 уже был установлен curl . Нам нужно было установить его на наши компьютеры Ubuntu и Manjaro.

Чтобы установить его на Ubuntu, введите:

 sudo apt установить завиток 

Установка завитка на Ubuntu

Команда на Манджаро:

 судо пакман -S завиток 

Установка curl на Manjaro

Мы можем попробовать это с помощью первой команды, указанной на веб-странице ifconfig.me .

 скручивание ifconfig.me 

Получение внешнего IP-адреса с помощью действия по умолчанию веб-сайта ifconfig.me

Наш внешний IP-адрес извлекается и отображается в окне терминала. Выход голые кости. После строки не печатается даже символ новой строки. Командная строка упирается в IP-адрес.

Как использовать curl для загрузки файлов из командной строки Linux
СВЯЗАННЫЕ Как использовать curl для загрузки файлов из командной строки Linux

Эта команда работает, потому что возврат IP-адреса является действием веб-сайта по умолчанию. Если действие по умолчанию когда-либо изменится, мы можем получить другой результат. Чтобы удовлетворить это, мы можем указать, что запрашиваем наш IP-адрес, добавив идентификатор «ip» к URL-адресу.

 завиток ifconfig.me/ip 

Получение внешнего IP-адреса с помощью веб-сайта ifconfig.me с указанием IP-адреса

Это возвращает IP-адрес, как и раньше.

Это иллюстрирует проблему использования веб-сайта в качестве источника вашего IP-адреса. Веб-сайты могут закрыться или изменить способ своей работы или формат возвращаемой информации. Эти изменения приведут к тому, что сценарии, зависящие от этих сайтов, будут либо сбоить, либо вести себя непредсказуемо.

Использование авторитетного и надежного ресурса, такого как DNS-сервер, является более надежным способом получения вашего внешнего IP-адреса. Чтобы запросить DNS-сервер, нам нужно использовать команду dig.

СВЯЗАННЫЕ С: Что такое DNS и стоит ли использовать другой DNS-сервер?

Использование команды копать

На этот раз dig был установлен на Fedora и Ubuntu, а нам нужно было установить его только на Manjaro.

Это обычная команда pacman , так что ничего удивительного, но имя пакета не то, что вы могли ожидать.

 sudo pacman -S инструменты привязки 

Установка dig на Manjaro

Чтобы использовать dig для обнаружения нашего внешнего IP-адреса, нам нужно указать его на DNS-сервер. Мы используем сервер OpenDNS, предоставленный Cisco.

Нам нужно указать имя DNS-сервера, который мы хотим использовать, которому предшествует знак «@». Нам также нужно указать тип записи, которую мы хотим получить. В данном случае это «myip». Опция +short гарантирует, что мы получим краткий, а не многословный ответ.

 копать @resolver1.opendns.com myip.opendns.com +короткий 

Получение внешнего IP-адреса с DNS-сервера с помощью команды dig

На этот раз после нашего IP-адреса напечатан символ новой строки. Как мы увидим, это печатается после строки IP-адреса и не является неотъемлемой частью самой строки.

СВЯЗАННЫЕ С: Как использовать команду dig в Linux

Использование их в скрипте

Есть много причин, по которым вы можете захотеть узнать свой внешний IP-адрес из скрипта. Возможно, у вас есть скрипт, который отслеживает, изменился ли ваш внешний IP-адрес, и уведомляет вас, когда это происходит. Или, возможно, сервер уведомляет своих клиентов, когда его адрес меняется. Какими бы ни были ваши причины, мы можем довольно легко реализовать команды, которые мы использовали в командной строке внутри скрипта.

Чтобы получить наш внешний IP-адрес и присвоить его переменной, нам нужно только обернуть команду внутри подстановки команд, $(...) и присвоить ее переменной, например:

 переменная=$(...)

Команда внутри круглых скобок выполняется, и возвращаемое значение заменяется выражением. В этом примере команда упрощена до «переменная=возвращаемое значение».

СВЯЗАННЫЕ С: Как работать с переменными в Bash

Вот это в сценарии. Мы добавили параметр -s (silent) в команду curl , чтобы она не сообщала о ходе извлечения данных.

 #!/бин/баш

extaddr=$(curl -s ifconfig.me)

echo "Внешний IP-адрес $extaddr (из cURL)"

Скопируйте этот скрипт в редактор и сохраните его как «getex1.sh» и сделайте его исполняемым с помощью команды chmod .

 chmod +x getex1.sh 

Делаем скрипт исполняемым с помощью chmod

Выполним скрипт и посмотрим, что у нас получится.

 ./getex1.sh 

Запуск скрипта getex1.sh

Чтобы сделать то же самое с более надежным вариантом использования DNS-сервера, а не веб-сайта, все, что нам нужно сделать, это заменить команду curl на команду dig .

 #!/бин/баш

extaddr=$(копать @resolver1.opendns.com myip.opendns.com +short)

echo "Внешний IP-адрес $extaddr (из dig)"

Сохраните это как скрипт «getex2.sh» и сделайте его исполняемым с помощью chmod .

 chmod +x getex2.sh 

Делаем скрипт исполняемым с помощью chmod

Давайте выполним этот скрипт.

 ./getex2.sh 

Запуск скрипта getex2.sh

Из вывода двух скриптов видно, что, несмотря на то, что команда dig печатает символ новой строки в командной строке, в скрипте нет новой строки, добавленной к переменной extaddr .

Стремитесь к надежности

Всегда безопаснее использовать признанный сервис с хорошей репутацией и предсказуемым форматом вывода, чем пользоваться «неофициальным» веб-сайтом. Как и все остальное в Интернете, внимательно посмотрите, от кого вы получаете информацию».

СВЯЗАННЫЕ С: Как разрешить сценариям Linux обнаруживать, что они работают на виртуальных машинах