Команда для определения моего публичного IP?

Если я проверю в Google , я увижу свой общедоступный IP-адрес. Есть ли что-то в командной строке Ubuntu, которое даст мне тот же ответ?

595
задан 14.02.2020, 05:04

20 ответов

Введите точно это, нажмите Enter , где указано:

telnet ipecho.net 80 Enter
GET /plain HTTP/1.1 Enter
HOST: ipecho.net Enter
BROWSER: web-kit Enter
Enter

Это вручную отправляет HTTP-запрос, который возвращает ваш IP-адрес в нижней части HTTP/1.1 200 OK reply

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

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0
0
ответ дан 14.02.2020, 05:04
  • 1
    Хороший, это работало хорошо, не имение необходимость установить завихрение было преимуществом для меня: один лайнер: printf " ПОЛУЧИТЕ / простой HTTP/1.1\nHOST: ipecho.net \nBROWSER: web-kit\n\n" | nc ipecho.net 80 – felixfbecker 14.02.2020, 05:04

Команда без зависимостей, кроме 8.8.8.8, являющаяся GOogle DNS:

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
0
ответ дан 14.02.2020, 05:05
  • 1
    Это только говорит Вам IP-адрес Вашего локального исходящего интерфейса. – Sebas 14.02.2020, 05:06
  • 2
    Нет, где делают Вы видите " облако server"? – Rory O'Kane 14.02.2020, 05:06
  • 3
    команда действительно показывает общедоступный IP-адрес, если я выполняю его на облачном сервере. wasn; t, что вопрос? – juliangonzalez 14.02.2020, 05:06

Просто создайте трассировку для любого веб-сайта или службы.

sudo traceroute -I google.com

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

user@user-PC ~ $ sudo traceroute -I google.com
traceroute to google.com (173.194.46.104), 30 hops max, 60 byte packets
 1  25.0.8.1 (25.0.8.1)  230.739 ms  231.416 ms  237.819 ms
 2  199.21.149.1 (199.21.149.1)  249.136 ms  250.754 ms  253.994 ms**

Итак, сделайте команду bash.

sudo traceroute -I google.com | awk -F '[ ]' '{ if ( $2 ="2" ) { print $5 } }'

И выход ...

(199.21.149.1)

Я не думаю, что полагаться на сценарии PHP, и подобная практика является хорошей практикой.

0
ответ дан 14.02.2020, 05:05
  • 1
    это интересно, хотя действительно замедляются и doesn' t получают мой внешний IP как это – Jared Wadsworth 14.02.2020, 05:06
  • 2
    В то время как это может работать в некоторых специальных конфигурациях, я на самом деле никогда не видел свой внешний IP в traceroute. Это - обычно любой мой шлюз (если я не нахожусь позади NAT), или мой router' s шлюз, но главным образом некоторый другой маршрутизатор еще дальше. – Mertcan Diken 14.02.2020, 05:06
  • 3
    Этот ответ слишком неточен, чтобы быть полезным. В моей корпоративной среде I don' t получают мой IP-адрес вообще. Единственным путем это работает, то, если Вы понимаете, как обрабатываются Ваши локальные маршрутизаторы и переключатели, и даже тогда это не может быть на строке 2 в зависимости от количества локальных транзитных участков, Вы переходите через. There' s никакой способ сделать когерентный алгоритм из этой техники, и существует много других решений здесь, которые более просты и получат Вас надлежащий ответ каждый раз. – Michael P. Bazos 14.02.2020, 05:07
  • 4
    исказите IP =' рысь - дамп ipecho.net/plain ' – mp3por 14.02.2020, 05:07

Я обнаружил, что все раздражает и медленно, поэтому я написал свое. Это просто и быстро.

Его API находится на http://api.ident.me/

Примеры:

curl ident.me
curl v4.ident.me
curl v6.ident.me
0
ответ дан 14.02.2020, 05:06
  • 1
    Я нахожу решение icanhazip.com быстрее, и оно включает новую строку в вывод. – Kamil Kiełczewski 14.02.2020, 05:07
  • 2
    aws быстрее time curl http://checkip.amazonaws.com-> 0.91s по сравнению с .241s для ident.me Let' s просто молятся, чтобы aws не понижался;) – Diego Santa Cruz Mendezú 14.02.2020, 05:07
  • 3
    Престижность! 2 года и Вы все еще поддерживаете его.Ай да молодец. " ОПРЕДЕЛИТЕ ME" то, что прибывает по моему мнению, когда мне нужна IP проверка:) – Martin Dawson 14.02.2020, 05:07
  • 4
    Woah, который был действительно быстро! – Kamil Kiełczewski 14.02.2020, 05:08
  • 5
    Да, это было действительно быстрее в последнее время. Просто настроенный мое решение. – ndey96 14.02.2020, 05:08

icanhazip.com мой любимый.

curl icanhazip.com

Вы можете запросить IPv4 явно:

curl ipv4.icanhazip.com

Если у вас нет curl, вы можете использовать wget вместо:

wget -qO- icanhazip.com
0
ответ дан 14.02.2020, 05:07
  • 1
    Спасибо! я должен был попробовать, многие предложили выше, пока я не нашел некоторых, который способен к IPv6. It' s позор, что такие сервисы обычно все еще только для IPv4. – Lewis 14.02.2020, 05:07

Я использую:

wget -O - -q icanhazip.com

Да, вы можете иметь IP: -)

0
ответ дан 14.02.2020, 05:07
  • 1
    Я предпочитаю curl icanhazip.com иногда wget, единственный доступный, но иногда никакой wget доступно также, и curl Ваша единственная опция (как OS/X). Так или иначе curl icanhazip.com почти так же легко как curl ifconfig.me, но намного более забавный;-) – mkrl 14.02.2020, 05:07

Если вы используете DD-WRT , то это работает для меня:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'

или

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
  • Где 192.168. 1.1 - это IP-адрес шлюза / маршрутизатора LAN маршрутизатора DD-WRT.

  • Компонент -s означает молчание (то есть не отображать информацию о ходе скручивания).

  • О, я должен упомянуть, что я использую вышеупомянутое с «DD-WRT v24-sp2 (01/04/15) std» .
0
ответ дан 14.02.2020, 05:08

Моим любимым всегда было:

curl ifconfig.me

просто, легко напечатать.

Сначала вам нужно будет установить curl;)

Если ifconfig.me не работает, попробуйте icanhazip.com и или ipecho.net

curl icanhazip.com

или

curl ipecho.net
0
ответ дан 14.02.2020, 05:09
  • 1
    ifconfig.me, кажется, не отвечает: ( – kmonsoor 14.02.2020, 05:09
  • 2
    Время отклика от ifconfig.me кажется вполне немного медленнее, чем ipecho.net. – Community 14.02.2020, 05:10
  • 3
    @AsfandYarQazi - работа здесь. Можно попробовать одну из альтернатив, icanhazip.com – Vin S 14.02.2020, 05:10
  • 4
    @Z9iT, я просто проверил это теперь. Да, это произвело бы внешний IP в Вашем терминале. – Robin van Baalen 14.02.2020, 05:10
  • 5
    Если Вы don' t имеют curl, но имеют wget: wget -U curl -qO- ifconfig.me – Martin 14.02.2020, 05:10

Для тех из нас, у кого есть логин и доступ к нашим маршрутизаторам, использование сценария для запроса у маршрутизатора, какой у него IP-адрес WAN, является наиболее эффективным способом определения внешнего IP-адреса. Например, следующий скрипт python распечатывает внешний IP-адрес для моего маршрутизатора Medialink MWN-WAPR300N:

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

Обратите внимание, что это не очень безопасно (как в случае с учетными данными открытого текста и входом в большинство маршрутизаторов). ), и, конечно, не является переносимым (необходимо изменить для каждого маршрутизатора). Однако это очень быстрое и совершенно разумное решение для физически защищенной домашней сети.

Чтобы настроить скрипт для другого маршрутизатора, я рекомендую использовать дополнение tamperdata в firefox, чтобы определить, какие HTTP-запросы нужно делать.

0
ответ дан 14.02.2020, 05:09
  • 1
    Необходимо попытаться получить IP-адрес маршрутизатора грамматически. Например router = subprocess.check_output(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]. – Neil Watson 14.02.2020, 05:10

Вы можете читать веб-страницы, используя только bash, без curl, wget:

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd
0
ответ дан 14.02.2020, 05:10

используйте ip!

ip addr show

, затем найдите соответствующий адаптер (не lo, а обычно eth0) и найдите IP-адрес рядом с inet.

0
ответ дан 14.02.2020, 05:11
  • 1
    Вопросом являются об общественности не внутренние IP-адреса – Junaid 14.02.2020, 05:11

Многие домашние маршрутизаторы могут запрашивать UPnP:

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

Затем извлеките IP-адрес из ответа.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
0
ответ дан 14.02.2020, 05:11

Если вы не находитесь за маршрутизатором, вы можете найти его, используя ifconfig.

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

curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

или более короткий

curl https://ipinfo.io/ip
0
ответ дан 14.02.2020, 05:12
  • 1
    Exacly как Giovanni P указанный. OP должен изменить принятый anwser. – spiegelm 14.02.2020, 05:12
  • 2
    вихревой-s ipinfo.io/ip – regnar 14.02.2020, 05:13
  • 3
    Разъясниться: Это было взломом и очень ужасным в этом, таким образом, я сделал редактирование для создания его более простым и что-то, что могут помнить люди. – Hemant Sankhla 14.02.2020, 05:14
  • 4
    уверенный - можно добавить его к ответу – destroy-everything 14.02.2020, 05:14

Может быть, я немного опоздал, но Инси может сделать это довольно легко.

Установить inxi

sudo apt install inxi

Затем выполните следующую команду

inxi -i

Пример с моей информацией, заблокированной с помощью опции z для копирования и вставки на сайты, подобные этой :

~$ inxi -iz
Network:   Card: NVIDIA MCP77 Ethernet driver: forcedeth
           IF: eth0 state: up speed: 1000 Mbps duplex: full mac: <filter>
           WAN IP: <filter>
           IF: eth0 ip-v4: <filter> ip-v6-link: N/A

Где сказано <filter>, где будут отображаться ваш WAN IP, IPv4, MAC-адрес и т. Д.

0
ответ дан 14.02.2020, 05:12

Они получат локальные IP-адреса:

ifconfig

или для более короткого вывода:

ifconfig | grep inet

также

ip addr show

и, вероятно:

[ 113]

Это должно получить внешний IP

wget http://smart-ip.net/myip -O - -q ; echo
<час>

NB Если вы не против установки curl, это также:

curl http://smart-ip.net/myip
0
ответ дан 14.02.2020, 05:13
  • 1
    ifconfig | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*addr: *([^ ]+).*/\1,\2/p}' распечатает локальные интерфейсы и соответствующий V4 IP' s – Sajith Mantharath 14.02.2020, 05:14
  • 2
    ifconfig | sed -nre '/^[^ ]+/{N;N;s/^([^ ]+).*addr: *([^ ]+).*addr: *([^ ]+).*/\1,\2,\3/p}' - v4 и v6 дюйм/с. – Ogrish Man 14.02.2020, 05:14

Еще один быстрый (может быть, самый быстрый, относительно)

curl ipecho.net/plain
0
ответ дан 14.02.2020, 05:14

Для поиска внешнего ip вы можете использовать внешние веб-сервисы или системные методы. Более простым является использование внешнего сервиса, также решения на основе ifconfig будут работать в вашей системе, только если вы не находитесь за NAT. эти два метода были подробно обсуждены ниже.

Поиск внешнего IP с использованием внешних сервисов

Самый простой способ - использовать внешний сервис через браузер командной строки или инструмент загрузки. Так как wget доступен по умолчанию в Ubuntu, мы можем использовать это.
Чтобы найти свой ip, используйте-

$ wget -qO- https://ipecho.net/plain ; echo

Предоставлено :

Вы также можете использовать [1111 ] (браузер) или curl вместо wget с небольшими изменениями в приведенной выше команде, чтобы найти ваш внешний ip.

Используя curl, чтобы найти IP:

$ curl https://ipecho.net/plain

. Для лучшего форматированного вывода используйте:

$ curl https://ipecho.net/plain ; echo

Более быстрый (возможно, самый быстрый) метод с использованием dig с OpenDNS as resolver:

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

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

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

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

111.222.333.444

Скопировано из: https://unix.stackexchange.com/a/ 81699/14497

Поиск внешнего IP-адреса без использования внешних служб

  • Если вам известно имя сетевого интерфейса

] Введите в своем терминале следующее:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

В приведенном выше тексте замените <interface_name> именем вашего фактического интерфейса, например: eth0, eth1, pp0 и т. Д. . [тысяча сто пятьдесят-один]

Пример использования:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
  • Если вы не знаете имя сетевого интерфейса

Тип следующее в вашем терминале (это получает имя и IP-адрес каждого сетевого интерфейса в вашей системе):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'

Пример использования:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
lo: 127.0.0.1
ppp0: 111.222.333.444

[ 1164] Примечание: Выходы являются ориентировочными и не реальными.

Предоставлено: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/

[1157 ] ОБНОВЛЕНИЕ

  1. LANG=c было добавлено к основанным на ifconfig использованиям, так что оно всегда дает вывод на английском языке, независимо от настроек локали.
0
ответ дан 14.02.2020, 05:15

Amazon AWS

curl http://checkip.amazonaws.com

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

123.123.123.123

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

  • он возвращает только открытый IP, ничего больше
  • от известного провайдера, который вряд ли скоро отключится
0
ответ дан 14.02.2020, 05:16

Вы можете использовать DNS-запрос вместо HTTP-запроса, чтобы узнать ваш общедоступный IP-адрес:

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

Он использует resolver1.opendns.com DNS-сервер для преобразования магического myip.opendns.com имени хоста в вашего [ 113] IP-адрес.

0
ответ дан 14.02.2020, 05:16
  • 1
    Да. Я wouldn' t быть удивленным, медленнее ли curl самостоятельно, чем dig. Даже если бы они были переписаны, чтобы быть максимально подобными, то, curl все еще было бы медленнее; это использует HTTP ( включая DNS) и dig только DNS использования. – Jeremy Moritz 14.02.2020, 05:17
  • 2
    Спасибо @AdamMonsen за ссылку. Точка использования DNS (как ответ это you' связанный ve говорит), то, что ответ является стандартным (и вряд ли измениться), и сервис (OpenDNS) мог бы слоняться поблизости дольше, чем большинство его http альтернатив. Время, которое требуется для выполнения запроса, могло бы быть затенено ко времени запуска команды. – Kamil Kiełczewski 14.02.2020, 05:17
  • 3
    Это действительно быстро. Я сделал одно выполнение прогрева, тогда 10 выполнения каждое из этого и curl icanhazip.com. Среднее число для curl версия: 174 мс. Среднее число для версии только для DNS: 9 мс. ~19x быстрее. См. также: unix.stackexchange.com/a/81699/8383 – Mephisto07 14.02.2020, 05:17

Если вы установили lynx в Ubuntu типа

lynx bot.whatismyipaddress.com
0
ответ дан 14.02.2020, 05:17

Теги

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