Введите точно это, нажмите Enter kbd>, где указано:
telnet ipecho.net 80
Enter kbd>
GET /plain HTTP/1.1
Enter kbd>
HOST: ipecho.net
Enter kbd>
BROWSER: web-kit
Enter kbd>
Enter kbd>
Это вручную отправляет 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
Команда без зависимостей, кроме 8.8.8.8, являющаяся GOogle DNS:
echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
Просто создайте трассировку для любого веб-сайта или службы.
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, и подобная практика является хорошей практикой.
Я обнаружил, что все раздражает и медленно, поэтому я написал свое. Это просто и быстро.
Его API находится на http://api.ident.me/
Примеры:
curl ident.me
curl v4.ident.me
curl v6.ident.me
time curl http://checkip.amazonaws.com
-> 0.91s
по сравнению с .241s
для ident.me
Let' s просто молятся, чтобы aws не понижался;)
– Diego Santa Cruz Mendezú
14.02.2020, 05:07
icanhazip.com мой любимый.
curl icanhazip.com
Вы можете запросить IPv4 явно:
curl ipv4.icanhazip.com
Если у вас нет curl
, вы можете использовать wget
вместо:
wget -qO- icanhazip.com
Я использую:
wget -O - -q icanhazip.com
Да, вы можете иметь IP: -)
curl icanhazip.com
иногда wget
, единственный доступный, но иногда никакой wget
доступно также, и curl
Ваша единственная опция (как OS/X). Так или иначе curl icanhazip.com
почти так же легко как curl ifconfig.me
, но намного более забавный;-)
– mkrl
14.02.2020, 05:07
Если вы используете 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 означает молчание (то есть не отображать информацию о ходе скручивания).
Моим любимым всегда было:
curl ifconfig.me
просто, легко напечатать.
Сначала вам нужно будет установить curl;)
Если ifconfig.me не работает, попробуйте icanhazip.com и или ipecho.net
curl icanhazip.com
или
curl ipecho.net
ifconfig.me
кажется вполне немного медленнее, чем ipecho.net
.
– Community
14.02.2020, 05:10
Для тех из нас, у кого есть логин и доступ к нашим маршрутизаторам, использование сценария для запроса у маршрутизатора, какой у него IP-адрес WAN, является наиболее эффективным способом определения внешнего 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-запросы нужно делать.
router = subprocess.check_output(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
.
– Neil Watson
14.02.2020, 05:10
Вы можете читать веб-страницы, используя только 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
checkip.amazonaws.com
, является самым быстрым для меня
– aloisdg
14.02.2020, 05:10
Многие домашние маршрутизаторы могут запрашивать 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}\>'
Если вы не находитесь за маршрутизатором, вы можете найти его, используя ifconfig
.
Если вы находитесь за маршрутизатором, ваш компьютер не будет знать об общедоступном IP-адресе, поскольку маршрутизатор выполняет преобразование сетевых адресов. Вы можете спросить какой-нибудь веб-сайт, какой ваш публичный IP-адрес использует curl
или wget
, и извлечь из него нужную вам информацию:
curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
или более короткий
curl https://ipinfo.io/ip
Может быть, я немного опоздал, но Инси может сделать это довольно легко.
Установить 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
Где сказано <filter>
, где будут отображаться ваш WAN IP, IPv4, MAC-адрес и т. Д.
ifconfig
или для более короткого вывода:
ifconfig | grep inet
также
ip addr show
и, вероятно:
[ 113]wget http://smart-ip.net/myip -O - -q ; echo
<час> NB Если вы не против установки curl
, это также:
curl http://smart-ip.net/myip
ifconfig | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*addr: *([^ ]+).*/\1,\2/p}'
распечатает локальные интерфейсы и соответствующий V4 IP' s
– Sajith Mantharath
14.02.2020, 05:14
ifconfig | sed -nre '/^[^ ]+/{N;N;s/^([^ ]+).*addr: *([^ ]+).*addr: *([^ ]+).*/\1,\2,\3/p}'
- v4 и v6 дюйм/с.
– Ogrish Man
14.02.2020, 05:14
Для поиска внешнего ip вы можете использовать внешние веб-сервисы или системные методы. Более простым является использование внешнего сервиса, также решения на основе ifconfig
будут работать в вашей системе, только если вы не находитесь за NAT
. эти два метода были подробно обсуждены ниже.
Самый простой способ - использовать внешний сервис через браузер командной строки или инструмент загрузки. Так как wget
доступен по умолчанию в Ubuntu, мы можем использовать это.
Чтобы найти свой ip, используйте-
$ wget -qO- https://ipecho.net/plain ; echo
Предоставлено :
Вы также можете использовать [1111 ] (браузер) или curl
вместо wget
с небольшими изменениями в приведенной выше команде, чтобы найти ваш внешний ip.
Используя curl
, чтобы найти IP:
$ curl https://ipecho.net/plain
. Для лучшего форматированного вывода используйте:
$ curl https://ipecho.net/plain ; echo
dig
с OpenDNS
as resolver: Все остальные ответы здесь идут по HTTP на удаленный сервер. Некоторые из них требуют анализа выходных данных или полагаются на заголовок User-Agent, чтобы сервер отвечал в виде простого текста. Они также меняются довольно часто (уходят, меняют свое имя, размещают рекламу, могут изменить формат вывода и т. Д.).
- Протокол ответа DNS стандартизирован (формат останется совместимым).
- Исторически службы DNS (OpenDNS, Google Public DNS и т. Д.), Как правило, живут дольше и являются более стабильными, масштабируемыми и обычно обслуживаемыми, чем любой новый хип-сервис whatismyip.com HTTP сегодня.
- (для тех гиков, которые заботятся о микрооптимизации), этот метод должен быть по своей природе быстрее (будь то всего на несколько микросекунд).
Использование dig с OpenDNS в качестве распознавателя:
blockquote>$ 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
[ 1164] Примечание: Выходы являются ориентировочными и не реальными.
Предоставлено: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/
[1157 ] ОБНОВЛЕНИЕ
LANG=c
было добавлено к основанным наifconfig
использованиям, так что оно всегда дает вывод на английском языке, независимо от настроек локали.
Amazon AWS
curl http://checkip.amazonaws.com
Пример вывода:
123.123.123.123
Мне нравится это, потому что:
Вы можете использовать DNS-запрос вместо HTTP-запроса, чтобы узнать ваш общедоступный IP-адрес:
$ dig +short myip.opendns.com @resolver1.opendns.com
Он использует resolver1.opendns.com
DNS-сервер для преобразования магического myip.opendns.com
имени хоста в вашего [ 113] IP-адрес.
curl
самостоятельно, чем dig
. Даже если бы они были переписаны, чтобы быть максимально подобными, то, curl
все еще было бы медленнее; это использует HTTP ( включая DNS) и dig
только DNS использования.
– Jeremy Moritz
14.02.2020, 05:17
curl icanhazip.com
. Среднее число для curl
версия: 174 мс. Среднее число для версии только для DNS: 9 мс. ~19x быстрее. См. также: unix.stackexchange.com/a/81699/8383
– Mephisto07
14.02.2020, 05:17