Мне нужно найти мой внешний IP-адрес из сценария оболочки. На данный момент я использую эту функцию:
myip () {
lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}
Но это зависит от того perl-libwww
, perl-html-format
, perl-html-tree
установлен. Какими еще способами я могу получить свой внешний IP?
linux
shell-script
ip
Евгений Ярмаш
источник
источник
Ответы:
Я бы порекомендовал получить его напрямую с DNS-сервера.
Большинство других ответов, приведенных ниже, связаны с передачей HTTP на удаленный сервер. Некоторые из них требовали парсинга вывода или полагались на заголовок User-Agent, чтобы сервер отвечал в виде простого текста. Они меняются довольно часто (уходят, меняют имя, размещают рекламу, могут изменить формат вывода и т. Д.).
Использование
dig
с OpenDNS в качестве резольвера:Возможно, псевдоним это в вашем,
bashrc
так что это легко запомнитьОтветы с простым IP-адресом:
Синтаксис
(Сокращено с https://ss64.com/bash/dig.html ) :
Тип
ANY
запроса возвращает либо AAAA, либо запись A. Для того, чтобы предпочитать IPv4 или IPv6 соединение, используйте соответственно опции-4
или-6
.Чтобы запрос был адресом IPv4, замените ЛЮБОЙ на
A
; для IPv6 замените его на.AAAA
Обратите внимание, что он может возвращать только адрес, используемый для соединения. Например, при подключении по IPv6 он не может вернуть адрес А.Альтернативные серверы и примеры
В дополнение к OpenDNS, существуют аналогичные службы DNS, предоставляемые Akamai и Google:
Пример псевдонима, который специально запрашивает адрес IPv4:
И для IPv6:
Поиск неисправностей
Если команда по какой-то причине не работает, возможно, возникла проблема с вышестоящим поставщиком, инструментом командной строки или чем-то еще. Чтобы понять, почему он не работает, запустите команду без
+short
опции, чтобы раскрыть детали DNS-запроса. Например:источник
myip.opendns.com
в Googles Public DNS?curl http://canhazip.com
. См. Askubuntu.com/a/427092/2273ПРИМЕЧАНИЕ. Речь идет о внешнем IP-адресе (тот, который серверы в Интернете видят при подключении к ним) - если вам нужен внутренний IP-адрес (тот, который ваш компьютер использует для соединений, которые могут отличаться), посмотрите это ответить .
TL; DR - Самые быстрые методы в 2015 году
Самый быстрый способ с использованием DNS:
или используя externalip :
Самый быстрый с использованием HTTP:
или используя externalip:
Самый быстрый с использованием HTTPS с действующим сертификатом:
или используя externalip:
Использование telnet:
С
nc
командой:или используя externalip:
С
telnet
командой:Используя FTP:
или используя externalip:
Все вышеперечисленное можно запустить, используя мой скрипт externalip :
Теперь длинная история ...
Существует множество опций для разных серверов, предоставляющих внешний IP, особенно через HTTP, размещенный здесь или в другом месте.
Я сделал тест, чтобы увидеть, является ли какой-либо из них лучше, чем другие, и я был удивлен результатами. Например, один из наиболее рекомендуемых файлов ifconfig.me был почти всегда самым медленным для меня, иногда на ответ приходилось много секунд. Многие не работают по HTTPS или работают, но имеют недействительные сертификаты. У некоторых очень противоречивые времена ответа.
Ориентиры
HTTP и HTTPS
Это источник моего скрипта externalip-benchmark, который я использовал:
Вы можете запустить его самостоятельно, чтобы увидеть, какие службы, упомянутые здесь, стоит использовать:
Мои результаты, которые я получил 2015-04-03 из Варшавы - адреса были изменены, чтобы защитить невинных:
Лучшее время отклика http:
Лучшие времена ответа https:
(Примечание: есть быстрые ответы с пустым содержимым - они недействительны.)
Лучшее среднее время пинга:
Вот результаты, которые я получил на 2015-04-03 из Амстердама:
Лучшее время отклика http:
Лучшие времена ответа https:
Лучшее среднее время пинга:
(Пинги 999999 означают 100% потерю пакетов.)
DNS
Для сравнения здесь приводятся примеры других методов, протестированных 2015-06-16 в Варшаве и Амстердаме.
С помощью:
обычно занимает (реальное время настенные часы) около:
На самом деле есть четыре резольвера, которые можно использовать таким образом:
Все они дают одинаковое время отклика в Варшаве и Амстердаме, но это может быть не так в других местах.
Использование 208.67.222.222 - IP-адрес resolver1.opendns.com вместо его доменного имени быстрее:
но может не сработать в будущем, если IP-адрес когда-либо изменится (хотя это может быть маловероятно для хорошо известного преобразователя DNS - возможно, мне следует использовать IP-адрес в моем скрипте externalip - прокомментируйте).
Telnet
Telnet с командой
nc
илиtelnet
(см. Выше) обычно принимает:(Между командами
nc
иtelnet
командами нет заметной разницы .)FTP
Доменные имена
Все методы будут быстрее (особенно при первом запуске), когда вместо доменных имен указанных служб будут использоваться IP-адреса (кроме HTTP, который может использовать виртуальные серверы на основе хоста и не работать с голым IP-адресом). не проверено), но перестанет работать, когда службы изменят IP-адрес, поэтому он может быть быстрее, но менее перспективным.
Комментарии
Если вы видите интересные результаты из своего местоположения, или если вы думаете, что некоторые другие хосты должны быть рекомендованы вместо тех, которые я выбрал, пожалуйста, оставьте комментарий. Если отсутствует какой-либо важный сервис, пожалуйста, прокомментируйте или опубликуйте проблему на GitHub. Я хотел бы, чтобы эта публикация была обновлена с текущим выбором наиболее эффективных услуг.
источник
myip.opendns.com
метод DNS как в ответе Кринкля ? В настоящее время кажется, что это победитель по умолчанию из-за того, что он не знает ни о каких других провайдерах для этого метода, но все равно было бы полезно сравнить с другими методами.dig +short myip.opendns.com @resolver1.opendns.com
(36.86.63.180),dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
(118.98.115.34) иcurl http://canhazip.com
(36.71.64.71). Как я могу решить, какой из них правильный?Заменен сайт на голландский рабочий.
источник
-s
опция необходима в этом случае? Я попробовал с / без него в своей Fedora 15 - Bash 4.2.10 (1), и это работало в обоих направлениях.whatismyip.com
удалил бесплатный сервис для проверки внешнего IP. Итак, я боюсь, что это больше не правильно.icanhazip.com
еще работает.Начиная с whatsmyip.org и ifconfig.me уже упоминалось:
источник
curl
решения (хотя и действительные) все еще зависят от внешней библиотеки (libcurl
).Вы можете использовать ifconfig.me в качестве альтернативы whatismyip.org.
Также ifconfig.me имеет дополнительный функционал. Чтобы узнать, какую еще информацию вы можете получить, посетите веб-сайт.
источник
источник
<img src='ipimg.php'/>
$ curl -s http://whatismyip.org | grep -o '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}'
Amazon AWS
Образец вывода:
Я люблю его, потому что:
источник
Я предпочитаю использовать curlmyip.com Это так просто, как:
curl curlmyip.com
Это коротко и просто для запоминания.
источник
bash
намерении OP» вы не можете обойтись без-s
опции, упомянутой в других ответах.-s
делает переключатель, это запускает его в бесшумном режиме, т.е. сообщения об ошибках не будут отображаться. Так что все сводится к тому, как он хочет, чтобы его скрипт обрабатывал ошибки. Сама команда вернет IP-адрес так же надежно, как и при использовании-s
.ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
ИЛИ ЖЕ
Ссылка
источник
источник
wget icanhazip.com
работает.| tail -n1
часть и посмотреть, что вы получаете от проксиnetcat icanhazip.com 80
. Похоже, он игнорирует$http_proxy
и друзей, потому что указание прокси и порта-x
только что привело к зависанию.netcat proxy 3128 <<<$'GET http://icanhazip.com/ HTTP/1.0\n\n' | tail -n 1
для основного HTTP-прокси (при условии, что он работает на порту 3128). Однако вы, очевидно, получите обратно IP-адрес прокси.Host:
заголовка запроса - виртуальный хостинг на основе имени был одним из главных улучшений в HTTP 1.1. Либо измените запрос, указав HTTP / 1.1, либо удалите заголовок Host (я рекомендую первый).Если после прочтения всех этих предложений вы захотите прочитать еще больше, вот, возможно, чрезмерно спроектированный скрипт Bash.
Он содержит список серверов DNS и HTTP, которые по состоянию на февраль 2017 года работают нормально.
Если у вас есть
dig
, он сначала пытается DNS, который почти на порядок быстрее, чем различные службы HTTP.Он выходит при первом полученном ответе.
Если у вас нет
dig
или если все DNS-серверы вышли из строя, он будет пытаться использовать службы HTTP, пока не получит ответ.Серверы перечислены в алфавитном порядке, но перед использованием они перемешиваются, чтобы не всегда использовать один и тот же.
Пример использования (я назвал скрипт
myip
):Закомментируйте
verbose
переменную в верхней части скрипта, чтобы не печатать используемый сервер.Обновление: этот скрипт теперь также на Github, где я мог бы обновлять его при необходимости:
https://github.com/mivk/myip
источник
Если вы хотите использовать HTTPS, чтобы избежать потенциальных ловушек:
источник
Вот еще одна альтернатива, которая зависит от хостов, которые решают бизнес вокруг управления динамическим IP, а не от сайтов "общего обслуживания", которые могут исчезнуть или изменить формат.
Чтобы получить IP-адрес в скрипте, просто выполните:
Отлично подходит для использования в задании cron, чтобы проверить, изменился ли динамический IP и нужно ли изменить некоторые записи конфигурации.
источник
Это всегда работает для меня, я использую его в моем conky, чтобы получить свой IP-адрес.
источник
amazonaws
. То есть, если у вас нет способа Google для этого. (даже неlynx
).Поскольку я не полагаюсь на соединение или службу, я использую следующий код, который пытается получить IP с помощью различных служб (не стесняйтесь добавлять больше):
Чтобы добавить больше надежности (например, если одна из служб меняет свой формат), вы можете проверить,
$IP
является ли действительный IP-адрес, используя следующую функцию :источник
ifcfg.me поддерживает:
IPv4 и IPv6, еще больше с curl: ifcfg.me/?
источник
nslookup
метод относится кdig
методу в ответе Кринкля ? Они оба используют DNS, верно? Так могу ли я передать какую-то опцию, чтобыdig
заставить ее получать ту же запись DNS, чтоnslookup
и здесь?dig +short . @ifcfg.me
если хотитеЯ запустил облачный сервис для своей семьи и сделал этот быстрый скрипт, который запускаю
cron
каждое утро в 5, потому что я дешевый и не буду покупать статический IP.Он захватывает общедоступный IP-адрес и отправляет его по электронной почте моим пользователям. Сделано это по электронной почте в формате гиперссылки, так что моя мама не должна вводить порты или что-нибудь. Может быть, кто-то еще может использовать его для.
источник
Это покажет текущий IP-адрес во всплывающем окне:
источник
Я настроил службу, которая возвращает IP-адрес в виде JSON / XML или простого текста. Вы можете найти их здесь
http://ipof.in/txt
Тот же URL с / json и / xml даст вам и другие форматы
Если вы хотите HTTPS, вы можете использовать те же URL-адреса с префиксом https. Преимущество в том, что даже если вы пользуетесь Wi-Fi, вы получите публичный адрес.
Таким образом, простой псевдоним myip = "curl https://ipof.in/txt " получит ваш IP
источник
В качестве альтернативы вы можете использовать STUN, который был изобретен для автоматического ответа на этот вопрос и широко используется в интернет-коммуникациях, например, SIP и WebRTC .
Используя stunclient (в debian / ubuntu do
apt-get install stuntman-client
) просто выполните:где
A.B.C.D
- IP-адрес вашей машины в локальной сети иW.X.Y.Z
серверы IP-адресов, которые веб-сайты видят снаружи (и тот, который вы ищете). Используяsed
вы можете уменьшить вывод выше только IP-адрес:Для альтернативного поиска STUN, использующего только основные инструменты командной строки, смотрите мой ответ на AskUbuntu (предназначенный как забавное упражнение, а не для производственного использования).
источник
W3m Plaintext-Browser отлично подходит для bash. Вы можете использовать
grep
иtail
сократить ответ следующим образом:источник
Используйте curl, чтобы поразить ip сервис shtuff.it
источник
Используя запрос DNS даже за NAT-маршрутизатором, транслирующим адреса DNS, это может работать:
или вместо этого вы можете использовать метод HTTP-запроса:
источник