Я хотел бы узнать, какие из доступных сетевых служб (например, Ethernet или Wi-Fi ) в настоящее время активны. На этом скриншоте из сетевых настроек вы видите, что Wi-Fi в данный момент активен (зеленая точка):
Как я могу получить эту информацию из командной строки?
Команда networksetup
позволяет мне перечислить доступные сетевые сервисы:
$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Ethernet
FireWire
Wi-Fi
Он также может показать некоторые подробности об услуге, например, имя устройства:
$ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)
(2) FireWire
(Hardware Port: FireWire, Device: fw0)
(3) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)
К сожалению, информация об активном сервисе (зеленая точка на скриншоте) недоступна в этой информации. Есть ли другая команда, которую я мог бы использовать, чтобы получить эту информацию?
status
поле, которое имеетactive
илиinactive
имеет значение.ifconfig | grep $(networksetup -listnetworkserviceorder | grep 'Ethernet, Device' | sed -E "s/.*(en[0-9]).*/\1/")
, Затем я могу поменять местами на основе выше, будучи пустым.Собрав все воедино, я написал скрипт для выполнения этой задачи:
Сценарий сначала получает список служб из
networksetup
команды, а затем проверяет, находится ли каждая служба в активном состоянииifconfig
.Назовите сценарий,
networkservice.sh
например, затем выполните его, чтобы получить текущий сетевой сервис, на котором вы находитесь.источник
tac
перебрать интерфейсы в обратном порядке, потому что у меня часто подключен WiFi, а также USB-адаптер Ethernet (который является предпочтительным устройством в сети). В этом случае я хочу, чтобы наиболее предпочтительное активное устройство было напечатано:services=$(networksetup -listnetworkserviceorder | grep 'Hardware Port' | tac)
networksetup -listnetworkserviceorder
уже выводит «самое предпочтительное устройство» первым ...tac
так, чтобы более поздние (не предпочтительные) сервисы не перезаписывались$currentservice
. Должен был быть более ясным в этом оригинальном комментарии.Команда
scutil --dns
предоставляет вам всю информацию о сетевой маршрутизации, необходимую для сопоставления меток аппаратного интерфейса с сетевыми маршрутами.Немного
awk
иgrep
может это сделать, если вам нужно записать информацию или сократить ее. Начните с «if_index», если вам интересно.источник
Просто если кто-то наткнется на это, как я сделал, приведенный ниже код может быть больше того, что вы ищете.
Это чтобы расширить ответ PeterVP
Также виден на https://www.kittell.net/code/mac-os-x-get-network-information/
источник
set public (dig +short myip.opendns.com @resolver1.opendns.com)
что DNS-сервер (например, opendns) с меньшей вероятностью не работает, чем веб-сайт, и работает быстрее. И я удалил заявление сна. Не нужно ждать ответа DNS-сервера. Время выполнения моего скрипта 177 мс. Ваш занимает 5,237 секунды, но делает больше, конечно. Все еще большая разница.Я не буду притворяться, что ответ на этот вопрос рассортирован, но это может быть полезно.
Вы можете спросить, как он в данный момент будет перенаправлять пакеты на что-то:
И тогда вы можете спросить, какой «Сетевой сервис» управляет этим интерфейсом:
Но, честно говоря, я сомневаюсь, что «Сетевые сервисы» один на один с аппаратным портом. А некоторые интерфейсы, например tun0, не имеют «Сетевой сервис». Ну, по крайней мере, иногда они этого не делают.
источник
Взятые из Найти Детальнее Wi-Fi Подключение к истории из командной строки Mac OS X | OSXDaily :
Вы получаете много информации об истории подключений, в том числе информацию о текущем.
Не идеально, но вы получаете информацию, которую вы ищете - и много дополнительной информации больше!
источник
Вот сценарий рыбной раковины, который я написал:
Он показывает все активные сетевые интерфейсы и соответствующие данные.
Закомментируйте, что вам не нужно / нужно
источник
echo_italic
оболочки вместо того, чтобы заключать все эти вызовыecho
вset_color
вызовы.set_color
команды могут быть удалены. Они просто «декоративные».set_color
команды и помещены переменные в операторы echoНе уверен, что это кому-нибудь пригодится, но поскольку я возился с тем же вопросом, я пришел к такому решению:
ifconfig | grep flags=8863 | grep -v bridge
Вывод будет выглядеть примерно так, и в нем будут перечислены только активные порты Ethernet и Wi-Fi:
Если вы также хотите увидеть назначенный IPv4-адрес:
ifconfig | grep 'flags=8863\|inet ' | grep -v 'bridge\|127.0.0.1'
Который производит что-то вроде этого;
Другая альтернатива:
scutil --nwi
Который показывает сетевые сетевые устройства, последняя строка показывает текущие активные сетевые интерфейсы:
Дальнейшая обработка, если необходимо, зависит от вас. :-)
Замечания:
Напоминаю, что я не специалист по флагам (8863). Вы можете найти подробную информацию о флаге в заголовочном файле if.h - Spotlight - ваш друг в поиске «if.h». Я нашел мой, например, здесь:
который покажет вам, что означают флаги (имейте в виду: шестнадцатеричный);
источник