Me gustaría saber cuál de los servicios de red disponibles (por ejemplo, Ethernet o Wi-Fi ) está actualmente activo. En esta captura de pantalla de las Preferencias de red, puede ver que el Wi-Fi está actualmente activo (el punto verde):
¿Cómo puedo obtener esa información desde la línea de comando?
El networksetup
comando me permite enumerar los servicios de red disponibles:
$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Ethernet
FireWire
Wi-Fi
También puede mostrar algunos detalles sobre el servicio, como el nombre del dispositivo:
$ 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)
Desafortunadamente, la información sobre qué servicio está activo (el punto verde de la captura de pantalla) no está disponible en esta información. ¿Hay otro comando que pueda usar para obtener esta información?
status
campo que tieneactive
oinactive
como un valor.ifconfig | grep $(networksetup -listnetworkserviceorder | grep 'Ethernet, Device' | sed -E "s/.*(en[0-9]).*/\1/")
. Entonces puedo cambiar ubicaciones en base a que lo anterior está vacío.En conjunto, escribí un script para lograr esta tarea:
El script primero obtiene una lista de servicios del
networksetup
comando, luego verifica si cada servicio está en estado activoifconfig
.Asigne un nombre al script,
networkservice.sh
por ejemplo, luego ejecútelo para obtener el servicio de red actual en el que se encuentra.fuente
tac
iterar a través de las interfaces en orden inverso porque a menudo tengo WiFi conectado, así como un adaptador de ethernet USB (que es el dispositivo preferido en la red). En este caso, quiero que se imprima elservices=$(networksetup -listnetworkserviceorder | grep 'Hardware Port' | tac)
networksetup -listnetworkserviceorder
ya genera "el dispositivo más preferido" primero ...tac
para que los servicios posteriores (no preferidos) no se sobrescribieran$currentservice
. Debería haber sido más claro en ese comentario original.El
scutil --dns
comando le brinda toda la información de enrutamiento de red que necesitará para asignar etiquetas de interfaz de hardware a rutas de red.Un poco
awk
ygrep
puede mejorarlo si necesita escribir la información o reducirla. Comience con agarre para "if_index" si tiene curiosidad.fuente
Solo en caso de que alguien más se encuentre con esto como hice, el código a continuación puede ser más de lo que está buscando.
Esto es para ampliar la respuesta de PeterVP
También visible en https://www.kittell.net/code/mac-os-x-get-network-information/
fuente
set public (dig +short myip.opendns.com @resolver1.opendns.com)
Mi razonamiento es que un servidor dns (como opendns) tiene menos probabilidades de estar inactivo que un sitio web y es más rápido. Y eliminé la declaración de sueño. No es necesario esperar la respuesta del servidor dns. Tiempo de ejecución para mi script 177 ms. El tuyo tarda 5.237 segundos, pero hace más, por supuesto. Sigue siendo una gran diferencia.No pretendo tener la respuesta a esta pregunta ordenada, pero esto, pero esto puede ser útil.
Puede preguntar cómo enrutará actualmente los paquetes a algo:
Y luego puede preguntar qué "Servicio de red" está administrando esa interfaz:
Pero, sinceramente, dudo que un "Servicios de red" sea uno a uno con un puerto de hardware. Y algunas interfaces, tun0 por ejemplo, no tienen un "Servicio de red". Bueno, al menos a veces no lo hacen.
fuente
Tomado de Buscar historial de conexión Wi-Fi detallado desde la línea de comandos de Mac OS X | OSXDaily :
Obtiene mucha información sobre el historial de conexiones, incluidos los detalles de la actual.
No es perfecto, pero obtienes la información que estás buscando, ¡y mucha más información adicional!
fuente
Aquí hay un script de concha de pez que escribí:
Muestra todas las interfaces de red activas y los datos relevantes.
Comenta lo que no quieres / necesitas
fuente
echo_italic
función de shell en lugar de envolver todos estosecho
s enset_color
llamadas.set_color
comandos pueden ser eliminados. Son simplemente "decorativos".set_color
Comandos eliminados y poner variables dentro de las declaraciones de ecoNo estoy seguro de si esto es útil para alguien, pero como estaba jugando con la misma pregunta, llegué a esta solución:
ifconfig | grep flags=8863 | grep -v bridge
La salida se verá más o menos así, y solo enumera los puertos ethernet y wifi que están en uso activo:
Si desea ver también la dirección IPv4 asignada:
ifconfig | grep 'flags=8863\|inet ' | grep -v 'bridge\|127.0.0.1'
Lo que produce algo como esto;
Otra alternativa:
scutil --nwi
Que muestra los dispositivos de red en línea, la última línea muestra las interfaces de red actualmente activas:
El procesamiento adicional, si es necesario, depende de usted. :-)
Nota:
Eso sí, no soy un experto en las banderas (8863). Puede encontrar los detalles del indicador en el archivo de encabezado if.h : Spotlight es su amigo para encontrar "if.h". Encontré el mío por ejemplo aquí:
que le mostrará lo que significan las banderas (tenga en cuenta: hexadecimal);
fuente