Как я могу получить внешний IP-адрес в сценарии оболочки?

Мне нужно найти внешний IP-адрес из сценария оболочки. В данный момент я использую эту функцию:

myip () {
    lwp-request -o текст checkip.dyndns.org | awk '{print $ NF}'
}

Но это зависит от установленного perl-libwww, perl-html-format, perl-html-tree. Какие еще способы получить внешний IP-адрес?

231 голос | спросил Eugene Yarmash 14 +04002011-10-14T18:40:00+04:00312011bEurope/MoscowFri, 14 Oct 2011 18:40:00 +0400 2011, 18:40:00

23 ответа


375

Я бы рекомендовал получить его непосредственно с DNS-сервера.

Большинство ответов здесь все передают HTTP на удаленный сервер. Некоторые из них требуют разбора вывода или полагаются на заголовок User-Agent, чтобы сервер отвечал простым текстом. Они также часто меняются (спускайтесь, меняйте свое имя, размещайте рекламу, можете изменить формат вывода и т. Д.).

  1. Протокол ответа DNS стандартизирован (формат будет оставаться совместимым).
  2. Исторически DNS-сервисы ( OpenDNS , Google Public DNS , ..) имеют тенденцию выживать намного дольше и более стабильны, более масштабируемы и, как правило, более внимательны, чем любой новый hip whatismyip.com Служба HTTP сегодня горячая.
  3. (Для тех, кто заботится о микро-оптимизации), этот метод должен быть по своей природе быстрее (будь то всего несколько миллисекунд).

Используя dig с OpenDNS как распознаватель:

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

Возможно, это псевдоним в вашем bashrc, поэтому его легко запомнить

alias wanip = 'dig + short myip.opendns.com @ resolver1.opendns.com'

Отвечает с простым IP-адресом:

$ wanip
80.100.192.168
ответил Krinkle 4 J000000Thursday13 2013, 06:53:53
119

ПРИМЕЧАНИЕ. Это примерно внешний IP-адрес (тот, который видят серверы в Интернете при подключении к ним) - если вы хотите внутренний IP-адрес адрес (тот, который ваш собственный компьютер использует для соединений, которые могут быть разными) см. этот ответ .

TL; DR - самые быстрые методы в 2015 году

Самый быстрый метод с использованием DNS:

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

или с помощью externalip :

externalip dns

Самый быстрый с использованием HTTP:

curl -s http://whatismyip.akamai.com/

или с помощью externalip:

externalip http

Самый быстрый с использованием HTTPS с действующим сертификатом:

curl -s https://4.ifcfg.me/

или с помощью externalip:

externalip https

Использование telnet:

С помощью команды nc:

nc 4.ifcfg.me 23 | grep IPv4 | cut -d '' -f4

или с помощью externalip:

externalip telnet

С помощью команды telnet:

telnet 4.ifcfg.me 2 & 1 | grep IPv4 | cut -d '' -f4

Использование FTP:

echo close | ftp 4.ifcfg.me | awk '{print $ 4; Выход}'

или с помощью externalip:

externalip ftp

Все вышеперечисленное может быть запущено с помощью внешнего скрипта :

externalip dns
externalip http
externalip https
внешний telnet
externalip ftp

Теперь длинная история ...

Существует множество опций разных серверов, обеспечивающих внешний IP-адрес, особенно через HTTP, размещенный здесь или в другом месте.

Я сделал контрольный показатель, чтобы убедиться, что кто-то из них лучше других, и я был удивлен результатами. Например. один из наиболее рекомендуемых ifconfig.me был почти всегда самым медленным для меня, иногда занимая много секунд, чтобы ответить. Многие из них не работают над HTTPS или работают, но имеют недействительные сертификаты. Некоторые из них имеют очень непоследовательное время отклика.

Бенчмарки

HTTP и HTTPS

Это источник моего скрипта внешнего тестирования, который я использовал:

Вы можете запустить его самостоятельно, чтобы увидеть, какие сервисы, упомянутые здесь, заслуживают использования:

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a + x externalip-benchmark
./externalip-benchmark

Мои результаты, которые я получил в 2015-04-03 из Варшавы - адреса были изменены, чтобы защитить невинных:

Лучшее время ответа HTTP:

0.086s http://ip.tyk.nu/- answer = '172.31.133.7'
0.089s http://whatismyip.akamai.com/- answer = '172.31.133.7'
0.091s http://tnx.nl/ip - answer = '172.31.133.7'
0.117s http://ifcfg.me/- answer = '172.31.133.7'
0.156s http://l2.io/ip - answer = '172.31.133.7'
0.317s http://ip.appspot.com/- answer = '172.31.133.7'
0.336s http://ident.me/- answer = '172.31.133.7'
0.338s http://ipof.in/txt - answer = '172.31.133.7'
0.347s http://icanhazip.com/- answer = '172.31.133.7'
0.496s http://curlmyip.com/- answer = '172.31.133.7'
0.527s http://wgetip.com/- answer = '172.31.133.7'
0.548s http://curlmyip.com/- answer = '172.31.133.7'
0.665s http://bot.whatismyipaddress.com/- answer = '172.31.133.7'
0,665s http://eth0.me/- answer = '172.31.133.7'
1.041s http://ifconfig.me/- answer = '172.31.133.7'
1.049s http://corz.org/ip - answer = '172.31.133.7'
1.598s http://ipecho.net/plain - answer = '172.31.133.7'

Наилучшее время ответа https:

0.028s https://curlmyip.com/- answer = ''
0.028s https://curlmyip.com/- answer = ''
0.029s https://l2.io/ip - answer = ''
0.029s https://tnx.nl/ip - answer = ''
0.072s https://whatismyip.akamai.com/- answer = ''
0.113s https://ipecho.net/plain - answer = ''
0.117s https://ident.me/- answer = ''
0.207s https://ip.tyk.nu/- answer = '172.31.133.7'
0.214s https://ipof.in/txt - answer = '172.31.133.7'
0.259s https://ifcfg.me/- answer = '172.31.133.7'
0.289s https://corz.org/ip - answer = ''
0,436s https://ip.appspot.com/- answer = '172.31.133.7'
0.448s https://bot.whatismyipaddress.com/- answer = ''
0.454s https://eth0.me/- answer = ''
0.673s https://icanhazip.com/- answer = '172.31.133.7'
5.255s https://ifconfig.me/- answer = ''
10.000s https://wgetip.com/- answer = ''

(Примечание: есть несколько быстрых ответов с пустым содержимым - они недопустимы.)

Среднее время пинга:

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40,967//ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

Вот результаты, которые я получил от 2015-04-03 из Амстердама:

Лучшее время ответа HTTP:

0.021s http://ipecho.net/plain - answer = '172.31.13.37'
0.027s http://tnx.nl/ip - answer = '172.31.13.37'
0.035s http://whatismyip.akamai.com/- answer = '172.31.13.37'
0.039s http://ifcfg.me/- answer = '172.31.13.37'
0.045s http://l2.io/ip - answer = '172.31.13.37'
0,142 http://ident.me/- answer = '172.31.13.37'
0.144s http://ipof.in/txt - answer = '172.31.13.37'
0.150s http://ip.appspot.com/- answer = '172.31.13.37'
0.150s http://ip.tyk.nu/- answer = '172.31.13.37'
0.170s http://icanhazip.com/- answer = '172.31.13.37'
0.190s http://eth0.me/- answer = '172.31.13.37'
0.191s http://wgetip.com/- answer = '172.31.13.37'
0.301s http://curlmyip.com/- answer = '172.31.13.37'
0.330s http://bot.whatismyipaddress.com/- answer = '172.31.13.37'
0.343s http://curlmyip.com/- answer = '172.31.13.37'
0,485s http://corz.org/ip - answer = '172.31.13.37'
3.549s http://ifconfig.me/- answer = '172.31.13.37'

Наилучшее время ответа https:

0.004s https://curlmyip.com/- answer = ''
0.012s https://curlmyip.com/- answer = ''
0.012s https://tnx.nl/ip - answer = ''
0.016s https://ipecho.net/plain - answer = ''
0.071s https://whatismyip.akamai.com/- answer = ''
0.096s https://ifcfg.me/- answer = '172.31.13.37'
0.097s https://ident.me/- answer = ''
0.187s https://corz.org/ip - answer = ''
0.187s https://ip.appspot.com/- answer = '172.31.13.37'
0.189s https://ip.tyk.nu/- answer = '172.31.13.37'
0.195s https://eth0.me/- answer = ''
0.253s https://l2.io/ip - answer = ''
0.300s https://ipof.in/txt - answer = '172.31.13.37'
0.324s https://bot.whatismyipaddress.com/- answer = ''
0.512s https://icanhazip.com/- answer = '172.31.13.37'
1.272s https://ifconfig.me/- answer = ''
10.002s https://wgetip.com/- answer = ''

Среднее время пинга:

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

(999999 пинг означает 100% потерю пакетов.)

DNS

Для сравнения здесь время, которое другие методы берут на тестирование в 2015-06-16 из Варшавы и Амстердама.

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

time dig + short myip.opendns.com @ resolver1.opendns.com

обычно принимает (реальное время настенных часов) о:

  • 0.035s из Варшавы
  • 0.015s из Амстердама

Существуют фактически четыре резольвера, которые можно использовать следующим образом:

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

Все они дают одинаковое время отклика в Варшаве и Амстердаме, но это может быть не так в других местах.

Использование 208.67.222.222 - IP-адрес resolver1.opendns.com вместо его имени домена быстрее:

  • 0.023s из Варшавы
  • 0.009s из Амстердама

, но может не работать в будущем, если IP когда-либо изменится (хотя это может быть маловероятным для известного DNS-преобразователя - возможно, я должен использовать IP-адрес в моем externalip - прокомментируйте).

Telnet

Telnet с командой nc или telnet (см. выше) обычно занимает:

  • 0.103s из Варшавы
  • 0.035s из Амстердама

(Нет заметной разницы между командами nc и telnet.)

FTP

  • 0.104s из Варшавы
  • 0.036s из Амстердама

Доменные имена

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

Комментарии

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

ответил rsp 3 AMpFri, 03 Apr 2015 04:37:43 +030037Friday 2015, 04:37:43
77
curl -s http://whatismijnip.nl | cut -d "" -f 5

Замененный сайт голландским рабочим.

ответил Maciek Sawicki 14 +04002011-10-14T18:49:56+04:00312011bEurope/MoscowFri, 14 Oct 2011 18:49:56 +0400 2011, 18:49:56
51

Поскольку whatsmyip.org и ifconfig.me уже были упоминалось:

curl -s icanhazip.com
ответил joschi 6 72011vEurope/Moscow11bEurope/MoscowSun, 06 Nov 2011 14:52:39 +0400 2011, 14:52:39
18

Вы можете использовать ifconfig.me как альтернативу whatismyip.org.

curl -s http://ifconfig.me

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

ответил Mr. Deathless 29 +04002011-10-29T01:10:54+04:00312011bEurope/MoscowSat, 29 Oct 2011 01:10:54 +0400 2011, 01:10:54
15
wget -O - -q http://whatismyip.org/
ответил ztank1013 14 +04002011-10-14T19:34:53+04:00312011bEurope/MoscowFri, 14 Oct 2011 19:34:53 +0400 2011, 19:34:53
9

Я предпочитаю использовать curlmyip.com. Это просто:

curl curlmyip.com

Это коротко и просто запомнить.

ответил Garrett Fogerlie 15 Mayam13 2013, 05:32:30
8
curl ident.me

ИЛИ

curl ifconfig.me

ИЛИ

curl tnx.nl/ip

ИЛИ

curl ipecho.net/plain

ИЛИ

curl ip.appspot.com

ИЛИ

curl whatismyip.akamai.com

ИЛИ

curl icanhazip.com

ИЛИ

curl wgetip.com

ИЛИ

curl ip.tyk.nu

ИЛИ

curl curlmyip.com

ИЛИ

curl corz.org/ip

ИЛИ

curl bot.whatismyipaddress.com

Ссылка

ответил Mandar Shinde 6 Maypm14 2014, 14:45:20
7

Amazon AWS

curl https://checkip.amazonaws.com

Пример вывода:

123.123.123.123

Мне нравится, потому что:

  • он возвращает только IP-адрес открытого текста, ничего больше
  • это от известного поставщика, который вряд ли скоро отправится в автономный режим.
ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 22 TueEurope/Moscow2015-12-22T01:09:11+03:00Europe/Moscow12bEurope/MoscowTue, 22 Dec 2015 01:09:11 +0300 2015, 01:09:11
6
netcat icanhazip.com 80 <$ 'GET /HTTP /1.1 \ nHost: icanhazip.com \ n \ n' | tail -n1
ответил Eugene Yarmash 21 +04002011-10-21T13:11:50+04:00312011bEurope/MoscowFri, 21 Oct 2011 13:11:50 +0400 2011, 13:11:50
3

Если вы хотите использовать HTTPS, чтобы избежать возможных ловушек:

_result = $ (wget -qO- https://ipcheckit.com/)
_result = "$ {_ result ## * Ваш IP-адрес равен <br> <b>}"
printf '% s \ n' "$ {_ result %% </b> </p> *}"
ответил Chris Down 6 72011vEurope/Moscow11bEurope/MoscowSun, 06 Nov 2011 16:27:50 +0400 2011, 16:27:50
3

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

  1. Зарегистрируйте свой сервер в одной из многочисленных бесплатных динамических служб DNS (например, no-ip.com). Это даст вам запись DNS, например xxx.no-ip.org.
  2. Установите инструмент динамического обновления службы (сообщает об изменениях в IP-услуге).

Чтобы получить IP-адрес в скрипте, просто выполните:

external_ip = `dig + short xxx.no-ip.org`

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

ответил cgmonroe 20 MarpmWed, 20 Mar 2013 22:24:03 +04002013-03-20T22:24:03+04:0010 2013, 22:24:03
3

Это всегда работает для меня, я использую его в своем conky, чтобы получить свой IP-адрес.

wget -q -O - checkip.dyndns.org | sed -e 's /[^ [: digit:] \ |.] //g'
ответил Dai_Trying 4 J000000Thursday13 2013, 23:42:50
3

Поскольку я не полагаюсь на соединение или на службу, я использую следующий код, который пытается получить IP-адрес с помощью разных сервисов (не стесняйтесь добавлять больше):

# Получите мой IP-адрес и вставьте файл
declare -a arr = ("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP = $ (curl -s --retry 3 --retry-delay 10 ipecho.net/plain)

while [-z "$ IP"] # Если IP не найден, продолжайте пытаться!
делать
    сон 30
    IP = $ (curl -s -retry 3 --retry-delay 10 $ {arr [$ ((RANDOM% $ {# arr [@]}))]})
сделанный

echo -n "$ IP"> /root/clientIP.txt #puts ip-адрес в clientIP.txt
эхо "Наш адрес $ IP"

Чтобы повысить надежность (например, если одна из служб меняет свой формат), вы можете проверить, что $ IP является допустимым IP-адресом, используя следующий :

# Убедитесь, что переданный параметр является IP-адресом:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Мариос Зиндилис
# @License: Creative Commons Attribution-ShareAlike 4.0 Международная лицензия.
# @ Дата: 2013-05-10
функция is_IP () {
если [`echo $ 1 | grep -o '\.' | wc -l` -ne 3]; тогда
        echo "Параметр« $ 1 »не похож на IP-адрес (не содержит 3 точки).";
        выход 1;
elif [`echo $ 1 | tr '.' '' | wc -w` -ne 4]; тогда
        echo "Параметр« $ 1 »не похож на IP-адрес (не содержит 4 октета).";
        выход 1;
еще
        для OCTET в `echo $ 1 | tr '.' '' `; делать
                если ! [[$ OCTET = ~ ^ [0-9] + $]]; тогда
                        echo «Параметр« $ 1 »не похож на IP-адрес (октет« $ OCTET »не является числовым).»;
                        выход 1;
                elif [[$ OCTET -lt 0 || $ OCTET -gt 255]]; тогда
                        echo «Параметр« $ 1 »не похож на IP-адрес (октет« $ OCTET »не в диапазоне 0-255).»;
                        выход 1;
                фи
        сделанный
фи

return 0;
}
ответил Franck Dernoncourt 29 J000000Tuesday14 2014, 05:04:37
3

ifcfg.me поддерживает:

curl ifcfg.me
nslookup. ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ ifcfg.me

IPv4 и IPv6, еще больше материала с завитком: ifcfg.me/?

ответил Eun 17 WedEurope/Moscow2014-12-17T17:06:56+03:00Europe/Moscow12bEurope/MoscowWed, 17 Dec 2014 17:06:56 +0300 2014, 17:06:56
2

Я запускаю облачную службу для своей семьи, и я сделал этот быстрый скрипт, который я запускал в cron каждое утро в 5, потому что я дешев и не покупаю статический IP-адрес.

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

#! /Bin /Баш
ipvariable = $ (wget http://ipecho.net/plain -O -q);

echo "Сегодня местоположение http: //$ ipvariable: 123456 /foldertheyreach" | mail -s «От вашего дружественного поставщика облачных услуг» [email protected], [email protected]
ответил Will 22 +04002014-10-22T11:30:38+04:00312014bEurope/MoscowWed, 22 Oct 2014 11:30:38 +0400 2014, 11:30:38
2

Если после прочтения всех этих предложений, которые вы хотите прочитать еще больше, вот, возможно, слишком переработанный сценарий Bash.

Он содержит список DNS и HTTP-серверов, которые, похоже, работают нормально с февраля 2017 года.

Если у вас есть dig, он сначала пытается DNS, что на порядок быстрее, чем различные службы HTTP.

Он выходит при первом ответе, который он получает.

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

Серверы перечислены в алфавитном порядке, но перетасовываются перед использованием, чтобы избежать использования одного и того же.

 #! /bin /bash

## Получите мой внешний IP-адрес

timeout = 2 # секунды ожидания ответа перед попыткой следующего сервера
verbose = 1 # печатает, какой сервер использовался для STDERR

dnslist = (
    "dig + short myip.opendns.com @ resolver1.opendns.com"
    "dig + short myip.opendns.com @ resolver2.opendns.com"
    "dig + short myip.opendns.com @ resolver3.opendns.com"
    "dig + short myip.opendns.com @ resolver4.opendns.com"
    "dig + short -t txt o-o.myaddr.l.google.com @ ns1.google.com"
    "dig + short -4 -t a whoami.akamai.net @ ns1-1.akamaitech.net"
    "dig + short whoami.akamai.net @ ns1-1.akamaitech.net"
)

httplist = (
    4.ifcfg.me
    alma.ch/myip.cgi
    api.infoip.io/ip
    api.ipify.org
    bot.whatismyipaddress.com
    canhazip.com
    checkip.amazonaws.com
    eth0.me
    icanhazip.com
    ident.me
    ipecho.net/plain
    ipinfo.io/ip
    ipof.in/txt
    ip.tyk.nu
    l2.io/ip
    smart-ip.net/myip
    tnx.nl/ip
    wgetip.com
    whatismyip.akamai.com
)



#, чтобы перетасовать глобальный массив "array"
shuffle () {
   локальный размер i tmp max rand
   размер = $ {# массив [*]}
   max = $ ((32768 /размер * размер))
   для ((i = size-1; i> 0; i--)); делать
      while (((rand = $ RANDOM)> = max)); делать :; сделанный
      rand = $ ((rand% (i + 1)))
      tmp = $ {array [i]} array [i] = $ {array [rand]} array [rand] = $ tmp
   сделанный
}


## если у нас есть копать и список методов dns, попробуйте это сначала
если хэш-код 2> /dev /null & & & [$ {# dnslist [*]} -gt 0]; тогда
    eval array = (\ "\ $ {dnslist [@]} \")
    шарканье

    для cmd в "$ {array [@]}"; делать
        ["$ verbose" == 1] & & & echo Trying: $ cmd 1 & 2
        ip = $ (timeout $ timeout $ cmd)
        если [-n "$ ip"]; тогда
            echo $ ip
            Выход
        фи
    сделанный
фи


# если нам не удалось с DNS, попробуйте HTTP

if [$ {# httplist [*]} == 0]; тогда
    echo "Нет хостов в массиве httplist!" > & амп; 2
    выход 1
фи

# используйте curl или wget, в зависимости от того, который мы находим
curl_or_wget = $ (если hash curl 2> /dev /null, тогда echo curl; elif hash wget 2 gt; /dev /null, затем echo "wget ​​-qO-"; fi);

если [-z "$ curl_or_wget"]; тогда
    echo "Ни завиток, ни wget не найдены. Невозможно использовать метод http." > & амп; 2
    выход 1
фи

eval array = (\ "\ $ {httplist [@]} \")
шарканье

для url в "$ {array [@]}"; делать
    ["$ verbose" == 1] & & & echo Trying: $ curl_or_wget -s "$ url" 1 & 2
    ip = $ (timeout $ timeout $ curl_or_wget -s "$ url")
    если [-n "$ ip"]; тогда
        echo $ ip
        Выход
    фи
сделанный

Пример использования (я назвал скрипт myip):

$ myip
Попытка: dig + short -t txt o-o.myaddr.l.google.com @ ns1.google.com
"151.101.65.69"

$ ip = $ (myip); echo "IP = '$ ip'"
Попытка: dig + short myip.opendns.com @ resolver1.opendns.com
IP = '151.101.65.69'

Прокомментируйте переменную verbose в верхней части скрипта, чтобы избежать печати используемого сервера.

ответил mivk 14 FebruaryEurope/MoscowbTue, 14 Feb 2017 22:02:07 +0300000000pmTue, 14 Feb 2017 22:02:07 +030017 2017, 22:02:07
1

В всплывающем окне отобразится текущий IP-адрес:

zenity -info --text "$ (curl -s icanhazip.com)"
ответил basic6 10 Jpm1000000pmSat, 10 Jan 2015 21:54:54 +030015 2015, 21:54:54
1

Я установил службу, которая возвращает IP-адрес как JSON /XML или обычный текст. Вы можете найти их здесь.

http://ipof.in/txt

Тот же URL-адрес с /json и /xml также предоставит вам другие форматы

Если вы хотите HTTPS, вы можете использовать одни и те же URL-адреса с префиксом https. Преимущество состоит в том, что даже если вы находитесь на Wi-Fi, вы получите публичный адрес.

Итак, простой псевдоним myip = "curl https://ipof.in/txt " будет получите свой IP

ответил vivekv 6 Jpm1000000pmTue, 06 Jan 2015 17:21:18 +030015 2015, 17:21:18
1

В качестве альтернативы вы можете использовать STUN который был изобретен, чтобы ответить на этот вопрос автоматическим способом и широко используется в интернет-коммуникациях, например SIP и WebRTC .

Использование stunclient (на debian /ubuntu do apt-get install stuntman-client) просто:

$ stunclient stun.services.mozilla.com
Проверка привязки: успех
Местный адрес: A.B.C.D .: 42541
Mapped адрес: W.X.Y.Z: 42541

где ABCD - это IP-адрес вашего компьютера в локальной сети, а WXYZ - это серверы IP-адресов, такие как веб-сайты, которые видны снаружи (и тот, который вы смотрите для). Используя sed, вы можете уменьшить вывод выше только на IP-адрес:

stunclient stun.services.mozilla.com |
    sed -ne "s /^ Отображенный адрес: \ (. * \):. * $ /\ 1 /p"

Для альтернативного поиска STUN, используя только основные средства командной строки, см. ответил Victor Klos 11 +03002015-10-11T17:33:20+03:00312015bEurope/MoscowSun, 11 Oct 2015 17:33:20 +0300 2015, 17:33:20

0

W3m Plaintext-Browser отлично подходит для bash. Вы можете использовать grep и tail, чтобы сократить ответ следующим образом:

w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Ваш IP:" | tail -n 1
ответил McPeppr 3 WedEurope/Moscow2014-12-03T16:44:56+03:00Europe/Moscow12bEurope/MoscowWed, 03 Dec 2014 16:44:56 +0300 2014, 16:44:56
0

Используйте curl для доступа к ip-сервису shtuff.it

curl -s https://shtuff.it/myip/short
ответил Chris Montanaro 2 J000000Tuesday13 2013, 18:23:07
0

Используя DNS-запрос даже за NAT-маршрутизатором, переводящим DNS-адреса, это может работать:

$ dig + short -t txt o-o.myaddr.l.google.com @ ns1.google.com | cut -d '"' -f2
x.y.z.t

однако я рекомендую вместо этого использовать метод HTTP-запроса:

$ curl -s ipinfo.io/ip
x.y.z.t
ответил SebMa 17 PMpTue, 17 Apr 2018 16:31:54 +030031Tuesday 2018, 16:31:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132