Ответ 1
curl ipinfo.io/ip
или
wget -qO- ipinfo.io/ip
или
lynx -source ipinfo.io/ip
Как часть установки script, я хочу сделать "обоснованное предположение" об IP-адресе public. Он должен быть максимально прочным, работая на различных хостах и платформах. Вот пример:
https://gist.github.com/4669037
Этот script использует 3 метода, а затем по умолчанию используется значение /etc/hostname
. До сих пор я тестировал это только на Ubuntu. Будет ли это работать над другими дистрибутивами? Есть ли дополнительные методы, которые я мог бы добавить?
curl ipinfo.io/ip
или
wget -qO- ipinfo.io/ip
или
lynx -source ipinfo.io/ip
curl ifconfig.me
будет лучшим выбором, если у вас нет завитка:
wget -qO- ifconfig.me/ip
Сколько публичного публичного IP-адреса вы ищете? Что делать, если машина находится за NAT?
curl
/wget
/netcat
(nc
) <URL>
, который содержит адрес реквестера: должен работать большую часть времени, но может ли сайт быть недоступен с машины (будь то брандмауэр или временная/постоянная недоступность). Вы получите самый доступный IP-адрес.
ifconfig
: должен выполняться как root, иначе вам придется попробовать /sbin/ifconfig
или /usr/sbin/ifconfig
. Что делать, если в машине больше сетевых адаптеров? Как вы узнаете, какой IP-адрес правильный? Что делать, если только IPv6 используется в локальной сети? В любом случае вы получите наименее открытый IP-адрес (и, возможно, неправильный, если на компьютере настроено больше интерфейсов), что часто бывает в наши дни с вездесущей виртуализацией с использованием устройств сетевого подключения и/или).
/etc/hostname
: не нужно существовать, на многих системах он /etc/hostname
, и он не содержит IP-адрес, а должен содержать имя хоста (обычно это FQDN).
Дело в том, что способы, с помощью которых он может терпеть неудачу, многочисленны, и вам, вероятно, следует рассмотреть либо a) уточнение того, какие системы вы планируете, либо b) действительно ли вам нужно знать IP вообще - это решение что, похоже, работает в простых случаях, которые стоит использовать, когда он терпит неудачу в немного более сложной настройке? Если вы считаете, что вам нужен IP-адрес, подготовьте способ грамотно обрабатывать неудачи в тех случаях, когда вы либо не получаете IP вообще, либо получаете неправильный.
Это решение не работает, если вы отстаете от nat или чего-то еще. Это помогает без стороннего сервиса. Он работает, если на нем установлено соединение, например сервер или соединение ppp.
Вы можете получить (первый) маршрут по умолчанию от route -n
, найти интерфейс, который он использует, и найти его ip.
MAINIF=$( route -n | grep '^0\.0\.0\.0' | head -n 1 | awk '{print $NF}' )
IP=$( ifconfig $MAINIF | { IFS=' :';read r;read r r a r;echo $a; } )
Попробуйте выполнить следующую команду:
wget -O - -q icanhazip.com
Используйте завиток, чтобы попасть служба shtuff.it IP
curl http://shtuff.it/myip/short
Используйте ipify API:
curl 'https://api.ipify.org?format=json'
Bash script:
#!/bin/bash
ip=$(curl -s https://api.ipify.org)
echo "My public IP address is: $ip"
Использование только bash (с помощью icanhazip.com):
exec 3<>/dev/tcp/icanhazip.com/80
echo -e 'GET / HTTP/1.0\r\nhost: icanhazip.com\r\n\r' >&3
while read i
do
[ "$i" ] && myip="$i"
done <&3
echo "$myip"
bash открывает открытый сокет для icanhazip и отправляет HTTP-запрос, IP-адрес возвращается в последней непустой строке возвращаемых данных. (предыдущие строки являются заголовками http)
Это позволяет избежать необходимости в http-клиенте, например wget или curl.
Если на AWS EC2 вы можете использовать:
curl checkip.amazonaws.com
ПРИМЕЧАНИЕ. Эта услуга может использоваться любым веб-клиентом.