Одна команда для локального адреса
Самый короткий ответ на вопрос «какой у меня IP на Mac» даёт ipconfig getifaddr en0. Команда печатает один IPv4-адрес интерфейса без лишних слов, поэтому её удобно использовать в скриптах и в подстановках вроде $(ipconfig getifaddr en0).
Не путайте её с одноимённой командой Windows. В macOS у ipconfig другое назначение: это небольшая утилита для работы с настройками DHCP и адресами интерфейсов, и ключи у неё свои. Классический ifconfig тоже работает, но его вывод длиннее, а нужный адрес приходится искать глазами.
Если команда ничего не вывела, причин три. Либо у интерфейса нет IPv4-адреса, либо вы указали не тот интерфейс, либо сеть отключена. Пустой вывод означает отсутствие адреса у этого интерфейса. Код возврата можно посмотреть командой echo $?, его удобно проверять в скриптах.
Как найти правильное имя интерфейса
Имя en0 не закреплено за Wi-Fi. На многих ноутбуках так называется Wi-Fi, но на Mac с кабельным портом, на устройствах с адаптерами Thunderbolt или USB порядок может отличаться. Чтобы не гадать, выведите соответствие портов и устройств: networksetup -listallhardwareports.
В выводе для каждого порта указаны строки Hardware Port, Device и Ethernet Address. Найдите нужный порт, например Wi-Fi, и подставьте значение Device в команду. Так вы получите адрес именно того способа подключения, который вас интересует.
Ещё один путь — спросить систему, через какой интерфейс уходит весь трафик: route -n get default. Среди строк будет поле interface, это и есть интерфейс по умолчанию. Его адрес и называют обычно «IP этого компьютера в сети». Если подключены и Wi-Fi, и кабель, у каждого интерфейса будет свой адрес, и это нормально.
Что ещё умеет ipconfig в macOS
Помимо адреса, утилита показывает сведения, полученные от DHCP-сервера. Это помогает понять, откуда взялись шлюз и DNS, не заходя в панель роутера.
| Команда | Что выводит |
|---|---|
| ipconfig getifaddr en0 | IPv4-адрес интерфейса |
| ipconfig getpacket en0 | Содержимое последнего ответа DHCP: адрес, маска, шлюз, DNS, срок аренды |
| ipconfig getoption en0 subnet_mask | Одно значение из ответа DHCP, здесь маска сети |
| ipconfig getoption en0 router | Адрес шлюза, выданный сервером |
| ipconfig getoption en0 domain_name_server | Адреса DNS, выданные сервером |
Названия опций соответствуют полям DHCP. Если у интерфейса адрес задан вручную, а не получен автоматически, ответа DHCP у системы нет, и getpacket не покажет полезных данных. Это тоже признак: вы видите, настроен адрес автоматически или статически.
Срок аренды в выводе getpacket показывает, как долго сервер разрешил пользоваться адресом. Конкретные значения задаются на стороне роутера и у разных сетей отличаются.
Адрес, который видите вы, и адрес, который видят снаружи
Команда показывает локальный адрес внутри вашей сети. Обычно это значение вида 192.168.x.x, 10.x.x.x или 172.16–31.x.x. Он выдан роутером и за пределами дома или офиса не используется.
Внешний адрес, под которым ваша сеть выходит в интернет, команда не покажет. Его знает роутер, а также сервисы, которые отвечают на запрос вашим адресом. На странице статуса роутера внешний адрес обычно отображается в разделе о подключении к интернету, название раздела зависит от модели.
Бывает, что адрес на роутере начинается с 100.64 или в нём стоит частный диапазон: тогда провайдер выдаёт один внешний адрес нескольким абонентам, и узнавать его через роутер бессмысленно. Это особенность подключения у конкретного провайдера, уточнить подробности можно в его поддержке.
Если же вы получили адрес вида 169.254.x.x, система не получила ответ от DHCP и присвоила себе адрес сама. Подробный разбор этой ситуации есть на странице про самоназначенный IP в macOS.
Короткий порядок проверки сети с Mac
Когда нужно быстро понять, где обрыв, используйте цепочку из нескольких команд в терминале.
- networksetup -listallhardwareports — узнайте, какое устройство соответствует Wi-Fi или кабелю.
- ipconfig getifaddr en0 — есть ли адрес у выбранного интерфейса.
- ipconfig getoption en0 router — выдал ли сервер шлюз.
- ping шлюза — отвечает ли роутер.
- ping внешнего адреса по IP и затем по имени — различите проблему маршрута и проблему DNS.
Если на втором шаге адреса нет, дальше идти бессмысленно: сначала нужно решить вопрос с получением адреса, например переподключиться к сети или перезапустить роутер. Если адрес есть, а ping шлюза не проходит, смотрите уровень Wi-Fi и кабеля. Когда ping по IP проходит, а по имени нет, причина в DNS.
Использование в скриптах и псевдонимах
Короткий вывод команды удобен для автоматизации. Подстановка $(ipconfig getifaddr en0) вставляет адрес прямо в другую команду, например при запуске локального веб-сервера для проверки сайта с телефона в той же сети. Достаточно подставить адрес и порт, и страница откроется на другом устройстве по этому адресу.
Чтобы не печатать команду каждый раз, создайте псевдоним в файле настроек оболочки, например myip. Тогда вывод адреса будет занимать одно слово.
Если скрипт должен работать и по Wi-Fi, и по кабелю, проверяйте несколько интерфейсов по очереди и берите первый непустой результат. Не опирайтесь на то, что нужный интерфейс всегда называется одинаково: на другом компьютере порядок устройств может отличаться.
Помните и о том, что локальный адрес может измениться после переподключения, поскольку роутер выдаёт его на ограниченный срок. Для постоянного адреса в сети лучше настроить резервирование на роутере, а не полагаться на значение, полученное вчера.
Если ваша цель — подключиться к Mac с другого устройства в той же сети, например по SSH или к локальному веб-серверу, вам понадобится именно этот адрес. Сообщите его второму устройству и убедитесь, что оба находятся в одной сети: в гостевой сети роутера устройства часто не видят друг друга, и тогда адрес не поможет.