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

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

509 голосов | спросил kfmfe04 16 Jpm1000000pmMon, 16 Jan 2012 15:50:35 +040012 2012, 15:50:35

22 ответа


718

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

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

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

или короче

curl ipinfo.io/ip
ответил Michael K 16 Jpm1000000pmMon, 16 Jan 2012 15:56:26 +040012 2012, 15:56:26
359

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

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

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

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

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

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

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

$ curl ipecho.net/plain

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

$ curl ipecho.net/plain ; echo

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

  

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

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

Использование 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

N.B: Выводы являются индикативными и не реальными.

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

ответил saji89 1 J0000006Europe/Moscow 2012, 16:10:38
101

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

curl ifconfig.me

простой, простой в использовании.

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

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

curl icanhazip.com

или

curl ipecho.net
ответил Panther 1 J0000006Europe/Moscow 2012, 16:41:09
54

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

curl icanhazip.com

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

curl ipv4.icanhazip.com

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

wget -qO- icanhazip.com
ответил yprez 1 J0000006Europe/Moscow 2012, 21:23:25
43

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

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

Примеры:

curl ident.me
curl v4.ident.me
curl v6.ident.me
ответил Pierre Carrier 3 Jpm1000000pmThu, 03 Jan 2013 19:49:40 +040013 2013, 19:49:40
36

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

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

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

ответил jfs 27 FebruaryEurope/MoscowbThu, 27 Feb 2014 19:07:50 +0400000000pmThu, 27 Feb 2014 19:07:50 +040014 2014, 19:07:50
17

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

wget -O - -q icanhazip.com

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

ответил jflaflamme 16 Jpm1000000pmMon, 16 Jan 2012 18:20:36 +040012 2012, 18:20:36
15

Amazon AWS

curl http://checkip.amazonaws.com

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

123.123.123.123

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

  • он возвращает только IP-адрес открытого текста, ничего больше
  • это от известного поставщика, который вряд ли скоро отправится в автономный режим.
ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 22 TueEurope/Moscow2015-12-22T01:06:01+03:00Europe/Moscow12bEurope/MoscowTue, 22 Dec 2015 01:06:01 +0300 2015, 01:06:01
11

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

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

Это вручную отправляет 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
ответил Liam 2 J000000Tuesday13 2013, 10:38:28
8

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

curl ipecho.net/plain
ответил Mohnish 1 Jam1000000amWed, 01 Jan 2014 00:49:45 +040014 2014, 00:49:45
7

Для этого был изобретен 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, например:

sed

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

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

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

ответил Victor Klos 9 +03002015-10-09T20:21:52+03:00312015bEurope/MoscowFri, 09 Oct 2015 20:21:52 +0300 2015, 20:21:52
6

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

telnet myip.gelma.net

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

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

ответил Gelma 13 MarpmThu, 13 Mar 2014 16:37:15 +04002014-03-13T16:37:15+04:0004 2014, 16:37:15
4

Вы можете прочитать веб-страницу, используя только 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
ответил jfs 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 18 Sep 2014 14:47:04 +0400 2014, 14:47:04
2

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

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

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

ответил Jacob 31 TueEurope/Moscow2013-12-31T09:07:36+04:00Europe/Moscow12bEurope/MoscowTue, 31 Dec 2013 09:07:36 +0400 2013, 09:07:36
2

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

ответил KarlC 27 MaramThu, 27 Mar 2014 07:08:42 +04002014-03-27T07:08:42+04:0007 2014, 07:08:42
2

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

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
ответил Wilf 27 J0000006Europe/Moscow 2014, 20:08:37
1

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

lynx bot.whatismyipaddress.com
ответил Binny 9 Jpm1000000pmWed, 09 Jan 2013 16:35:48 +040013 2013, 16:35:48
1

Многие домашние маршрутизаторы могут запрашивать 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}\>'
ответил jms 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 18 Sep 2016 23:45:23 +0300 2016, 23:45:23
0

Если вы используете 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" .
ответил CMP 14 PMpFri, 14 Apr 2017 19:14:18 +030014Friday 2017, 19:14:18
-1

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

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
ответил Rolf 19 AM000000100000005931 2015, 10:57:59
-1

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

ip addr show

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

ответил Eliran Malka 16 AM00000020000005131 2016, 02:06:51
-2

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

sudo traceroute -I google.com

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

[email protected] ~ $ 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-скрипты, и сортировка - хорошая практика.

ответил woahguy 24 J000000Friday15 2015, 19:34:43

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

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

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