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

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

750
задан 23 November 2012 в 15:00

22 ответа

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

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

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

или короче

curl https://ipinfo.io/ip
1020
ответ дан 23 November 2012 в 15:00

Получат локальные IPs:

ifconfig

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

ifconfig | grep inet

также

ip addr show

и возможно:

hostname -I

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

wget http://smart-ip.net/myip -O - -q ; echo

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

curl http://smart-ip.net/myip
4
ответ дан 23 November 2012 в 15:00

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

ip addr show

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

1
ответ дан 23 November 2012 в 15:00

Возможно, я немного опоздал, но inxi может сделать это довольно легко.

Установите 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

Где написано - это ваш IP-адрес в глобальной сети Появится IPv4, MAC-адрес и т. Д.

0
ответ дан 23 November 2012 в 15:00

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

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 и их сортировка - хорошая практика.

-2
ответ дан 23 November 2012 в 15:00

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

lynx bot.whatismyipaddress.com
2
ответ дан 23 November 2012 в 15:00

Вы можете читать веб-страницу, используя только 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
6
ответ дан 23 November 2012 в 15:00

Если вы используете 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» .
3
ответ дан 23 November 2012 в 15:00

Для тех из нас, у кого есть доступ к нашим маршрутизаторам, использование сценария для запроса маршрутизатора, какой у него 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-запросы делать.

3
ответ дан 23 November 2012 в 15:00

Многие домашние маршрутизаторы могут быть опрошены с помощью 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

Затем введите с помощью команды grep IP-адрес из ответа.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
3
ответ дан 23 November 2012 в 15:00

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

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
-2
ответ дан 23 November 2012 в 15:00

У меня есть дурацкая служба для этого по telnet. Примерно так:

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

Не стесняйтесь использовать.

8
ответ дан 23 November 2012 в 15:00

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

curl ipecho.net/plain
10
ответ дан 23 November 2012 в 15:00

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

telnet ipecho.net 80 Введите
GET / plain HTTP / 1.1 Введите
HOST: ipecho.net Введите
BROWSER: web-kit Введите
Введите

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

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

$ 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
13
ответ дан 23 November 2012 в 15:00

Я использую:

wget -O - -q icanhazip.com

Да, у вас может быть IP: -)

19
ответ дан 23 November 2012 в 15:00

Amazon AWS

curl https://checkip.amazonaws.com

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

123.123.123.123

Также работает в браузере: http://checkip.amazonaws.com

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

  • это возвращает только IP-адрес в виде открытого текста в теле ответа, ничего больше
  • это от известного провайдера, который вряд ли скоро отключится
29
ответ дан 23 November 2012 в 15:00

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

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

Он использует resolver1.opendns.com dns-сервер для разрешения магического myip. opendns.com имя хоста на ip адрес ваш.

49
ответ дан 23 November 2012 в 15:00

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

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

Примеры:

curl ident.me
curl v4.ident.me
curl v6.ident.me
51
ответ дан 23 November 2012 в 15:00

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

curl icanhazip.com

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

curl ipv4.icanhazip.com

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

wget -qO- icanhazip.com
64
ответ дан 23 November 2012 в 15:00

Мне всегда нравились:

curl ifconfig.me

простой, легкий для ввода.

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

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

curl icanhazip.com

или

curl ipecho.net
128
ответ дан 23 November 2012 в 15:00

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

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

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

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

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

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

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

$ curl https://ipecho.net/plain

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

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

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

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

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

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

111.222.333.444

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

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

  • Если вы знаете свой сетевой интерфейс name

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

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

В приведенном выше примере замените на имя вашего фактического интерфейса, например: 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

Примечание: Выводы являются ориентировочными, а не настоящими.

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

UPDATE

  1. LANG = c был добавлен в использование ifconfig , так что он всегда дает вывод на английском языке, независимо от настройки локали.
397
ответ дан 23 November 2012 в 15:00

Для этого был придуман STUN. Как клиент вы можете послать запрос на общедоступный сервер STUN и заставить его вернуть IP-адрес, который он видит. Это своего рода низкоуровневый whatismyip.com, так как он не использует HTTP и интеллектуальные DNS-серверы, а молниеносно быстрый протокол STUN.

Используя stunclient

, если у вас установлен stunclient (apt-get install stuntman-client на debian/ubuntu), вы можете просто сделать:

$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

где A. B.C.D - это IP-адрес вашей машины в локальной сети, а W.X.Y.Z - это серверы IP-адресов, такие как веб-сайты, которые видны извне (и тот, который вы ищете). Используя sed, вы можете уменьшить вывод, приведенный выше, только до IP-адреса:

stunclient stun.services.mozilla.com |
    sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"

Однако, ваш вопрос заключался в том, как найти его с помощью командной строки, что может исключить использование клиента STUN. Поэтому мне интересно...

Используя bash

Запрос STUN может быть обработан вручную, отправлен на внешний сервер STUN с помощью netcat и обработан пост-обработкой с помощью dd, hexdump и sed подобным образом:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

Эхо определяет двоичный STUN-запрос (0x0001 указывает Binding Request) длиной 8 (0x0008) с кукисом 0xc00cee и некоторыми вставленными вещицами от проволочной акулы. Только четыре байта, представляющие внешний IP, берутся из ответа, очищаются и распечатываются.

Работает, но не рекомендуется для производственного использования :-)

P.S. Доступно много серверов STUN, так как это основная технология для SIP и WebRTC. Использование одного из них от Mozilla должно быть безопасным с личной точки зрения, но вы также можете использовать и другой: Список серверов STUN

11
ответ дан 23 November 2012 в 15:00

Другие вопросы по тегам:

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