Если я зарегистрирую Google , я могу видеть свой публичный IP-адрес. Есть ли что-то в командной строке Ubuntu, которая даст мне тот же ответ?
Если я зарегистрирую Google , я могу видеть свой публичный IP-адрес. Есть ли что-то в командной строке Ubuntu, которая даст мне тот же ответ?
Если вы не находитесь за маршрутизатором, вы можете найти его, используя ifconfig
. Р>
Если вы находитесь за маршрутизатором, ваш компьютер не будет знать об общедоступном IP-адресе, поскольку маршрутизатор выполняет трансляцию сетевых адресов. Вы можете спросить какой-нибудь веб-сайт, что ваш публичный IP-адрес использует curl
или wget
, и извлечь из него необходимую информацию:
curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
или короче
curl ipinfo.io/ip
Для поиска внешнего ip вы можете использовать внешние веб-сервисы или использовать системные методы. Легче использовать внешнюю службу, также решения на основе ifconfig
будут работать в вашей системе, только если вы не отстаете от NAT
. эти два метода подробно обсуждались ниже.
Самый простой способ - использовать внешнюю службу через браузер командной строки или инструмент загрузки. Поскольку wget
доступно по умолчанию в Ubuntu, мы можем использовать это.
Чтобы найти ваш ip, используйте
$ wget -qO- http://ipecho.net/plain ; echo
Предоставлено
Вы также можете использовать 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
Скопировано из: Ссылка
Введите в терминале следующее:
$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print }' | awk '{print }'
В приведенном выше примере замените <interface_name>
именем вашего фактического интерфейса, например: eth0
, eth1
, pp0
и т. д.
Пример использования
$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print }' | awk '{print }'
111.222.333.444
Введите в терминале следующее: это имя и IP-адрес каждого сетевого интерфейса в вашей системе:
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( == "inet" ) { print } else if ( == "Link" ) { printf "%s:" , } }' |awk -F: '{ print ": " }'
Пример использования
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( == "inet" ) { print } else if ( == "Link" ) { printf "%s:" , } }' |awk -F: '{ print ": " }'
lo: 127.0.0.1
ppp0: 111.222.333.444
N.B: Выводы являются индикативными и не реальными.
Предоставлено: Ссылка р>
ОБНОВЛЕНИЕ
LANG=c
добавлено к использованию ifconfig
, поэтому он всегда дает выход на английском языке, независимо от настройки локали. Мой любимый всегда был:
curl ifconfig.me
простой, простой в использовании.
Вам нужно будет сначала установить curl;)
Если ifconfig.me не работает, попробуйте icanhazip.com или или ipecho.net
curl icanhazip.com
или
curl ipecho.net
icanhazip.com - мой любимый.
curl icanhazip.com
Вы можете запросить IPv4 явно:
curl ipv4.icanhazip.com
Если у вас нет curl
, вы можете вместо этого использовать wget
:
wget -qO- icanhazip.com
Я нашел все, что было раздражающим и медленным, поэтому я написал свой собственный. Это просто и быстро.
Его API находится на Ссылка
Примеры: р>
curl ident.me
curl v4.ident.me
curl v6.ident.me
Вы можете использовать запрос DNS вместо HTTP-запроса, чтобы узнать свой публичный IP-адрес:
$ dig +short myip.opendns.com @resolver1.opendns.com
Он использует resolver1.opendns.com
dns server для разрешения магического myip.opendns.com
hostname на ваш IP-адрес.
Тот, который я использую, это:
wget -O - -q icanhazip.com
Да, у вас может быть ip: -)
Amazon AWS
curl http://checkip.amazonaws.com
Пример вывода:
123.123.123.123
Мне нравится, потому что:
Введите именно это, нажмите Enter , где указано:
telnet ipecho.net 80
Введите
GET /plain HTTP/1.1
Введите
HOST: ipecho.net
Введите
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
Еще один быстрый (может быть, самый быстрый, относительно)
curl ipecho.net/plain
У меня есть глупое обслуживание для этого по telnet. Что-то вроде этого:
telnet myip.gelma.net
Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx
Не стесняйтесь использовать его.
Для этого был изобретен 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: \(.*\):.*$//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
Вы можете прочитать веб-страницу, используя только 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
Используйте cURL с ipogre.com (поддерживаются IPv4 и IPv6).
IPv4 р>
curl ipv4.ipogre.com
IPv6 р>
curl ipv6.ipogre.com
Ссылка
Для тех из нас, кто имеет доступ к входам в наши маршрутизаторы, используя сценарий, чтобы спросить маршрутизатора, что его «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-запросы нужно сделать.
ifconfig
или для более короткого вывода:
ifconfig | grep inet
и р>
ip addr show
и, возможно:
hostname -I
wget http://smart-ip.net/myip -O - -q ; echo
N.B. Если вы не против установки curl
, это также:
curl http://smart-ip.net/myip
Если вы установили lynx в тип Ubuntu
lynx bot.whatismyipaddress.com
Многие домашние маршрутизаторы могут запрашивать 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}\>'
используйте ip
!
ip addr show
затем найдите соответствующий адаптер (не lo
и обычно eth0
) и найдите ip-адрес около inet
.
Если вы используете DD-WRT , то это работает для меня:
curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'
или р>
curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'
Где 192.168.1.1 является IP-адресом шлюза / маршрутизатора LAN маршрутизатора DD-WRT.
Компонент -s означает молчание (т. е. не отображает информацию о текучести закрутки).
Команда без зависимостей, за исключением того, что 8.8.8.8 является GOogle DNS:
echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
Просто выпустите 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" ) { print } }'
И выход ...
(199.21.149.1)
Я не думаю, что полагаюсь на PHP-скрипты, и сортировка - хорошая практика.