Если я проверю с помощью google, я могу увидеть свой публичный IP. Есть ли что-то в командной строке Ubuntu, что даст мне такой же ответ?
Если вы не находитесь за маршрутизатором, вы можете узнать это с помощью ifconfig
.
Если вы находитесь за маршрутизатором, то ваш компьютер не будет знать о публичном IP-адресе, так как маршрутизатор выполняет трансляцию сетевых адресов. Вы можете спросить у какого-нибудь сайта, каков ваш публичный IP-адрес, используя curl
или wget
и извлечь из него нужную информацию:
curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
или короче
curl https://ipinfo.io/ip
Для поиска внешнего ip можно использовать либо внешние веб-сервисы, либо системные методы. Проще использовать внешний сервис, также решения на основе ifconfig
будут работать в вашей системе, только если вы не находитесь за NAT
. Эти два метода подробно рассмотрены ниже.
Самый простой способ - использовать внешний сервис через браузер командной строки или инструмент загрузки. Поскольку 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. чтобы заставить сервер отвечать открытым текстом. Они также меняются довольно часто (закрываются, меняют название, размещают рекламу, могут менять формат вывода и т.д.).
- Протокол ответа DNS стандартизирован (формат останется совместимым).
- Исторически сложилось так, что службы DNS (OpenDNS, Google Public DNS, ...) существуют гораздо дольше и являются более стабильными, масштабируемыми и, как правило, выглядят >. после, чем любой новый "хипповый" HTTP-сервис whatismyip.com, который сегодня в тренде.
- (для тех гиков, которые заботятся о микро-оптимизации), этот метод должен быть изначально быстрее (будь то всего на несколько микросекунд).
Использование dig с OpenDNS в качестве резольвера:
$ dig +short myip.opendns.com @resolver1.opendns.com
111.222.333.444
Скопировано с: https://unix.stackexchange.com/a/81699/14497
Введите в терминале следующее:
$ 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
N.B: Выходные данные являются ориентировочными и не являются реальными.
Courtesy: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/
UPDATE
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
Если вы Don'т завиток
можно использовать девятое
вместо:
wget -qO- icanhazip.com
Я'вэ нашел все, чтобы быть раздражающим и медленно, поэтому я написал свой собственный. Это's простое и быстрое.
Его API на http://api.ident.me/
Примеры:
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-сервер для разрешения магическое myip.opendns.com
имя Ваш IP-адрес.
Амазон AWS
curl http://checkip.amazonaws.com
Пример вывода:
123.123.123.123
Мне нравится это, потому что:
Тот, который я использую -:
wget -O - -q icanhazip.com
Да, вы можете иметь ip :-)
Типа в этом точно, пресс <и>введите</КБД> где обозначено:
телнет ipecho.net 80
<и>введите</КБД>
Получить /обычный HTTP/1.1
<и>введите</КБД>
Хост: ipecho.net<и>введите</КБД>
Браузер: веб-набор`<и>введите</КБД>
<и>введите</КБД>
Это вручную отправляет HTTP-запрос, который будет возвращать ваш IP на дне НТТР/1.1 200 ОК ответ
Пример вывода:
$ 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
Для этого [оглушение][1] был изобретен. В качестве клиента вы можете отправить заявку на общедоступном сервере STUN и его вернуть IP-адрес его видит. Этакий низкий уровень whatismyip.com так как он использует не HTTP и не ловко созданный DNS-серверов, но невероятно быстро оглушить протокола.
Если у вас есть stunclient
установить (`apt-получить установку каскадер-клиента на Debian и Ubuntu) вы можете просто сделать:
$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541
где А. Б. С. D-это IP-адрес вашего компьютера в локальной сети и У. Х. Е. З- это адрес сервера IP как сайты посмотреть со стороны (и тот, который вы ищете). Используя
СЭД` вы можете сократить выше выход только IP-адреса:
stunclient stun.services.mozilla.com |
sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"
Однако, ваш вопрос был, как найти его с помощью командной строки, Что может исключить использование электрошокового клиента. Так интересно...
Баш
Электрошокер запрос может быть сделан вручную, послал к внешнему STUN-сервера с помощью netcat С и быть обработаны, используя ДД
, вывести
и СЭД
вот так:
$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/'
Эхо определяет двоичный запросу оглушение (0х0001 указывает обязательные запросу), имеющее длину 8 (0x0008) с 0xc00cee печенье и некоторые наклеены вещи с помощью Wireshark. Только четыре байта, представляющие внешний IP взяты из ответа, чистить и распечатать.
Работает, но не рекомендуется для использования в производстве :-)
P. S. Многие STUN сервера доступны, так как это основная технология для SIP и WebRTC. С помощью одного из Mozilla должна быть в безопасности частной жизни-мудрое, но также можно использовать любое другое: [список STUN сервер][2]
[1] я: https://tools.ietf.org/html/rfc5389 "в обход сессии утилиты для NAT (оглушение)&; [2]: http://olegh.ftp.sh/public-stun.txt на "список STUN-сервер используется в качестве ссылки в статье Википедии на оглушение и"
Вы можете читать веб-страницы, используя только Баш, без завиток
, девятое
:
$ 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
Для тех из нас, с выходом войти в наши маршрутизаторы, используя скрипт, чтобы задать маршрутизатора, что его' ш ш ш IP-адрес-самый эффективный способ для определения внешнего IP-адреса. Например, следующий скрипт Python выводит внешний IP для моего Медиалинк МЗН-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
Примечание Если вы не'т ум установкой завиток
, это, а также:
curl http://smart-ip.net/myip
Многие домашние маршрутизаторы могут быть запрошены по 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}\>'
Если вы используете ДД-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-адрес маршрутизатор DD-WRT на.
В -Х компонент означает молчание (т. е. не'т показать на скручиваемость прогресса).
О, я должен упомянуть, что я использую выше с "в ДД-WRT на v24-SP2 в (01/04/15) СТД" по.
используйте ИС
!
ip addr show
затем найдите соответствующий адаптер (не Ло
обычно для eth0
), и найдите IP-адрес рядом с инет
.
Может быть, я немного поздно, но 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-адреса и т. д. появится