Я знаю, что вы можете сделать ifconfig | grep inet
, но это показывает вам несколько адресов IPv4. Как я могу получить конкретный для SSHing et al?
Я знаю, что вы можете сделать ifconfig | grep inet
, но это показывает вам несколько адресов IPv4. Как я могу получить конкретный для SSHing et al?
Ответы:
Используйте ipconfig getifaddr en1
для беспроводной или ipconfig getifaddr en0
для Ethernet.
Обновление :
ipconfig getifaddr en0
по умолчанию для интерфейса Wi-Fi.
ifconfig
показывает все интерфейсы и их IP-адреса
curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
Следующее работает для меня на 10,8 и 10,10 Йосемити.
ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'
Если вы обнаружите, что приведенное выше дает более одного ответа, сохраните следующее в сценарии и запустите его вместо
#!/usr/bin/env bash
dumpIpForInterface()
{
IT=$(ifconfig "$1")
if [[ "$IT" != *"status: active"* ]]; then
return
fi
if [[ "$IT" != *" broadcast "* ]]; then
return
fi
echo "$IT" | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
}
main()
{
# snagged from here: https://superuser.com/a/627581/38941
DEFAULT_ROUTE=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
if [ -n "$DEFAULT_ROUTE" ]; then
dumpIpForInterface "$DEFAULT_ROUTE"
else
for i in $(ifconfig -s | awk '{print $1}' | awk '{if(NR>1)print}')
do
if [[ $i != *"vboxnet"* ]]; then
dumpIpForInterface "$i"
fi
done
fi
}
main
Просто введите curl ifconfig.me
в терминал.
ipconfig getifaddr en0
для локального IP.
Вы можете сделать следующее:
Тип ifconfig
или ifconfig -a
. Эта команда показывает вам список интерфейсов вместе с их IP и MAC-адресами (последний только, если применимо). Вы также можете ввести ifconfig en0
или ifconfig en1
для конфигурации только определенного интерфейса (как кто-то сказал в своих ответах, en0 - это обычно проводной Ethernet, а en1 - интерфейс WiFi).
В качестве альтернативы, netstat -i
перечислит все интерфейсы и покажет вам IP-адреса, которые вы назначили каждому из них.
Как правило, когда у вас на сервере работает демон SSH, он будет прослушивать все доступные интерфейсы, т.е. Вы можете использовать любой IP-адрес, настроенный на вашем компьютере, для подключения к этому компьютеру через SSH (это, очевидно, подчиняется правилам брандмауэра). Если вам нужно то, что ОС называет основным интерфейсом и основным IP-адресом, вы можете использовать scutil
команду следующим образом:
MacBook:~ scutil
> show State:/Network/Global/IPv4
<dictionary> {
PrimaryInterface : en0
PrimaryService : C0550F84-5C07-484F-8D62-C8B90DC977D8
Router : 10.103.4.1
}
> show State:/Network/Interface/en0/IPv4
<dictionary> {
Addresses : <array> {
0 : 10.103.4.234
}
BroadcastAddresses : <array> {
0 : 10.103.4.255
}
SubnetMasks : <array> {
0 : 255.255.255.0
}
}
Обратите внимание, что вышеприведенное, хотя и является командой командной строки, также является интерактивным (поэтому вы запускаете, scutil
а затем вводите в него свои собственные команды). Первая show
команда сообщает вам имя основного интерфейса для ОС (т. Е. Это будет верхний список в окне «Системные настройки / Сетевые настройки»), а также IP-адрес маршрутизатора по умолчанию. Вторая show
команда принимает State:/Network/Interface/<ifname>/IPv4
аргумент (в данном случае en0
) и дает вам назначенные ей IP-адреса. Вы ищете адрес в массиве адресов, две другие записи - широковещательные адреса и маски сети.
Надеюсь, это поможет, но если что-то не ясно, дайте мне знать.
echo "show State:/Network/Interface/$(echo 'show State:/Network/Global/IPv4' | scutil | grep 'PrimaryInterface ' | sed 's/ PrimaryInterface : //')/IPv4" | scutil | pcregrep -Mo1 " Addresses : <array> {\n 0 : ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"
Чтобы получить IP-адрес вашего компьютера, подключенного к Интернету, вот рабочий рецепт:
if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'`
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'
Он должен работать, даже если у вас есть несколько активных интерфейсов, даже если у вас есть интерфейсы, вы не знаете, какой из них является шлюзом по умолчанию.
192.168.0.*)
, не внешний, доступный для Интернета.
netstat -nr | grep default
?
Просто для записи, вы можете сделать bash-скрипт со следующим содержимым, которое даст вам ваш внешний IP-адрес
#!/bin/bash
wget -qO - http://ipecho.net/plain; echo
wget
не является частью macOS и должен быть установлен из стороннего источника.
curl -s http://ipecho.net/plain; echo