Как правило, никогда не гарантируется, что система будет иметь только один IP-адрес, например, вы можете иметь как Ethernet, так и WLAN-соединения, а если у вас есть активное VPN-соединение, у вас будет еще один IP-адрес.
Linux
В Linux hostname -I
отобразит текущий IP-адрес (а).Полагаясь на то, что всегда возвращение только одного IP-адреса, скорее всего, не будет работать должным образом при некоторых сценариях (т. Е. Соединение VPN установлено), поэтому более надежным способом было бы преобразование результата в массив и последующее циклическое переключение элементов:
ips=($(hostname -I))
for ip in "${ips[@]}"
do
echo $ip
done
OSX
В OSX, , если вы знаете интерфейс , вы можете использовать:
~$ ipconfig getifaddr en0
192.168.1.123
, который вернет просто IP-адрес.
Или вы можете циклически перебирать возможные имена интерфейсов, начиная с суффикса, то есть en
:
for NUMBER in $(seq 0 5); do
ip=`ipconfig getifaddr en$NUMBER`
if [ -n "$ip" ]; then
myip="$ip"
break
fi
done
echo $myip
Кроме того, получение IP-адреса становится недетерминированнымв случае, если установлены как кабельные, так и Wi-Fi-соединения, когда у машины более одного Ethernet-интерфейса или когда присутствуют VPN-туннели.
Получение внешнего IP
Если вам нужен внешний IPзатем вы можете запросить службу в текстовом режиме, например, curl ipecho.net/plain
вернет простой текст external IP.