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

Это может или не поможет в вашем случае, но в моем случае у меня не хватило места на корневом разделе моего жесткого диска. Я продолжал получать сообщения о том, что у меня меньше свободного места. Тогда эта проблема возникла. Таким образом, очистка места и перезапуск сделали волшебство.

Также следите за любыми проблемами, которые произошли примерно в то же время, которые могли вызвать это. то есть приложения, которые вы, возможно, установили, добавили новое оборудование, обновленные драйверы и т. д.

1
задан 23 November 2012 в 17:00

21 ответ

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

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

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

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

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

http://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address. html http://ipecho.net/plain

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

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

$ curl ipecho.net/plain

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

$ curl ipecho.net/plain ; echo

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

Другие ответы здесь все передают HTTP на удаленный сервер. Некоторые из них требуют разбора вывода или полагаются на заголовок User-Agent, чтобы сервер отвечал простым текстом. Они также часто меняются (спускайтесь, меняйте свое имя, размещайте рекламу, можете изменить формат вывода и т. Д.). Протокол ответа DNS стандартизирован (формат будет оставаться совместимым). Исторически службы DNS (OpenDNS, Google Public DNS, ..) имеют тенденцию к выживанию намного дольше и более стабильны, масштабируемы и обычно ухаживают за тем, чем сейчас работает новый сервис hip whatismyip.com HTTP. (для тех выродков, которые заботятся о микро-оптимизации), этот метод должен быть по своей природе быстрее (будь то всего несколько микросекунд). Использование dig с OpenDNS в качестве преобразователя:
$ dig +short myip.opendns.com @resolver1.opendns.com

111.222.333.444

Courtesy https://unix.stackexchange.com/a/81699/14497

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

http://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address.html [d29 ] Введите в терминале следующее:

$ 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

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

NB: https://unix.stackexchange.com/a/81699/14497

UPDATE [!d44 ] LANG=c был добавлен в ifconfig на основе использования, так что он всегда дает выход на английский язык, независимо от настройки локали.

353
ответ дан 25 May 2018 в 15:08
  • 1
    @ Z9iT, конечно. Он должен работать в любом дистрибутиве Linux, если у вас установлен wget. Как сказано, если у вас уже есть завиток или рысь, используйте это вместо этого. Вам необходимо установить права root для установки, поэтому используйте sudo apt-get install wget – saji89 1 June 2012 в 17:19
  • 2
    Команды с ifconfig работают только, если вы не за NAT. – lukassteiner 23 January 2013 в 21:52
  • 3
    просто используйте параметр -w curl вместо echo :) curl -w '\n' ident.me – drAlberT 11 June 2014 в 13:17
  • 4
    Это предложение, использующее dig, довольно приятно unix.stackexchange.com/questions/22615/… – binaryanomaly 14 March 2015 в 19:31
  • 5
    @saji ifconfig если устарели, используйте iproute2; ^). Команда будет ip -o -4 a s eth0 | awk '{sub(/\/.*/, "", $4);print $4}'. – bufh 12 June 2015 в 00:28

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

curl ifconfig.me

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

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

Если ifconfig .me is down try icanhazip.com и или ipecho.net

curl icanhazip.com

или

curl ipecho.net
97
ответ дан 25 May 2018 в 15:08
  • 1
    @ Z9iT, я просто проверил это сейчас. Да, он выводит внешний ip в вашем терминале. – saji89 1 June 2012 в 18:13
  • 2
    Время отклика от ifconfig.me кажется довольно медленным, чем ipecho.net. – Drew Noakes 25 October 2013 в 19:57
  • 3
    Если у вас нет curl, но есть wget: wget -U curl -qO- ifconfig.me – Stéphane Chazelas 15 August 2014 в 01:16
  • 4
    ifconfig.me, похоже, не отвечает :( – Asfand Qazi 20 January 2016 в 15:51
  • 5
    @AsfandYarQazi - работает здесь. Вы можете попробовать один из альтернатив, icanhazip.com – Panther 20 January 2016 в 16:48

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

curl icanhazip.com

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

curl ipv4.icanhazip.com

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

wget -qO- icanhazip.com
53
ответ дан 25 May 2018 в 15:08

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

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

Примеры:

curl ident.me
curl v4.ident.me
curl v6.ident.me
43
ответ дан 25 May 2018 в 15:08
  • 1
    Woah, это было действительно быстро! – waldyrious 7 December 2013 в 10:19
  • 2
    Я нахожу решение icanhazip.com быстрее, и он включает в себя новую строку на выходе. – Tyler Collier 19 August 2014 в 05:00
  • 3
    Да, в последнее время это было действительно быстрее. Просто изменил мое решение. – Pierre Carrier 9 September 2014 в 18:53
  • 4
    Престижность! 2 года, и вы все еще поддерживаете его. Отлично сработано. «IDENTify ME», это то, что приходит мне на ум, когда мне нужно проверить ip :) – Mohnish 28 September 2015 в 04:37
  • 5
    @PierreCarrier v6.ident.me не работает – SebMa 30 March 2018 в 20:22

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

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

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

35
ответ дан 25 May 2018 в 15:08
  • 1
    Это действительно быстро. Я сделал одно разминку, затем 10 казней каждый из них и curl icanhazip.com. Среднее значение для версии curl: 174 мс. Среднее значение для DNS-версии: 9 мс. ~ 19 раз быстрее. См. Также: unix.stackexchange.com/a/81699/8383 – Adam Monsen 11 March 2015 в 01:06
  • 2
    @AdamMonsen Спасибо за ссылку. Точка использования DNS (как ответ, о котором вы говорили) говорит о том, что ответ является стандартным (и вряд ли изменится), и служба (OpenDNS) может придерживаться дольше, чем большинство ее альтернатив http. Время, необходимое для запроса, может быть затенено временем запуска команды. – jfs 11 March 2015 в 04:40
  • 3
    Ага. Я не удивлюсь, если curl будет медленнее, чем dig. Даже если они были переписаны как можно более схожие, curl все равно будет медленнее; он использует HTTP (, включая DNS), а dig использует только DNS. – Adam Monsen 11 March 2015 в 08:16

Тот, который я использую, это:

wget -O - -q icanhazip.com

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

17
ответ дан 25 May 2018 в 15:08
  • 1
    Я предпочитаю curl icanhazip.com, иногда wget является единственным доступным, но иногда нет wget, а curl - ваш единственный вариант (например, OS / X). В любом случае curl icanhazip.com почти так же легко, как curl ifconfig.me, но гораздо смешнее ;-) – TryTryAgain 26 August 2012 в 01:38

Amazon AWS

curl http://checkip.amazonaws.com

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

123.123.123.123

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

он возвращает только IP-адрес открытого текста, ничего больше от известного поставщика, который вряд ли скоро отключится в сети
15
ответ дан 25 May 2018 в 15:08

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

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

[d12 ] Это вручную отправляет 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
11
ответ дан 25 May 2018 в 15:08
  • 1
    Приятно, что это сработало, не нужно было устанавливать завиток, было для меня преимуществом: один лайнер: printf " GET / plain HTTP / 1.1 \ nHOST: ipecho.net \ nBROWSER: web-kit \ n \ n " | nc ipecho.net 80 – Ozone 19 March 2014 в 11:32
  • 2
    отличный ответ. узнал – prayagupd 24 May 2017 в 21:17

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

curl ipecho.net/plain
8
ответ дан 25 May 2018 в 15:08

Для этого был изобретен 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/'

Echo определяет бинарный запрос STUN (0x0001 указывает запрос привязки), имеющий длину 8 (0x0008) с файлом cookie 0xc00cee и некоторые вставленные вещи из wirehark. Только четыре байта, представляющие внешний IP, берутся из ответа, очищаются и печатаются.

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

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

7
ответ дан 25 May 2018 в 15:08
  • 1
    +1 для geekiest и на самом деле самой популярной технологией. Работает http-запрос, который я использую всю свою жизнь, но мне нравится, что на самом деле была какая-то мысль. Я этого не знал. Благодаря! – Mike S 18 October 2016 в 20:47

У меня есть глупое обслуживание для этого по telnet. Что-то вроде этого:

telnet myip.gelma.net

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

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

6
ответ дан 25 May 2018 в 15:08

Вы можете прочитать веб-страницу, используя только 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
4
ответ дан 25 May 2018 в 15:08

Использовать cURL с ipogre.com (поддерживаются IPv4 и IPv6).

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

http: // www.ipogre.com/faqs/linux.php

2
ответ дан 25 May 2018 в 15:08

Для тех из нас, кто имеет доступ к входам в наши маршрутизаторы, используя скрипт, чтобы спросить маршрутизатора, что его «WAN IP-адрес» является наиболее эффективным способом определения внешнего 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-запросы должны быть сделаны.

2
ответ дан 25 May 2018 в 15:08
  • 1
    Вы должны попытаться получить IP-адрес маршрутизатора грамматически. Например router = subprocess.check_output(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]. – Cristian Ciupitu 2 June 2014 в 07:26

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

ifconfig

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

ifconfig | grep inet

также

ip addr show

и, возможно: [ ! d3]

hostname -I

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

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

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

curl http://smart-ip.net/myip
2
ответ дан 25 May 2018 в 15:08
  • 1
    ifconfig | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*addr: *([^ ]+).*/\1,\2/p}' будет печатать локальные интерфейсы и соответствующие V4 IP – Hannu 27 June 2014 в 23:09
  • 2
    ifconfig | sed -nre '/^[^ ]+/{N;N;s/^([^ ]+).*addr: *([^ ]+).*addr: *([^ ]+).*/\1,\2,\3/p}' - v4 и v6 IP. – Hannu 27 June 2014 в 23:15

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

lynx bot.whatismyipaddress.com
1
ответ дан 25 May 2018 в 15:08

Многие домашние маршрутизаторы могут быть запрошены 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}\>'
1
ответ дан 25 May 2018 в 15:08

Если вы используете 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
ответ дан 25 May 2018 в 15:08

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

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
-1
ответ дан 25 May 2018 в 15:08
  • 1
    Это укажет только IP-адрес локального исходящего интерфейса. – guntbert 17 September 2015 в 19:15
  • 2
    команда показывает открытый IP-адрес, если я запускаю его на сервере облака. wasn; t что вопрос? – Rolf 17 September 2015 в 23:48
  • 3
    Нет, где вы видите «облачный сервер» ?? – guntbert 17 September 2015 в 23:52

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

ip addr show

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

-1
ответ дан 25 May 2018 в 15:08

Просто выпустите 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
ответ дан 25 May 2018 в 15:08
  • 1
    это интересно, хотя и очень медленное и не получает мой внешний ip, как это – rubo77 5 October 2015 в 05:46
  • 2
    Этот ответ слишком неточен, чтобы быть полезным. В моей корпоративной среде я вообще не получаю свой IP-адрес. Единственный способ, которым это работает, - понять, как создаются ваши локальные маршрутизаторы и коммутаторы, и даже тогда это может быть не в строке 2 в зависимости от количества переходов локальных переходов. Невозможно сделать из этого метода последовательный алгоритм, и здесь есть много других решений, которые проще и получат правильный ответ каждый раз. – Mike S 18 October 2016 в 20:52
  • 3
    Хотя он может работать в некоторых специальных конфигурациях, я никогда не видел внешний IP-адрес в traceroute. Обычно это либо мой шлюз (если я не за NAT), либо шлюз моего маршрутизатора, а в основном другой другой маршрутизатор. – mivk 14 February 2017 в 15:52
  • 4
    alias ip = 'lynx --dump ipecho.net/plain' ; – phildobbin 14 September 2017 в 20:26

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

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