34 votos

¿Cómo encontrar el servicio de red actualmente conectado desde la línea de comandos?

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 Wi-Fi está actualmente activo (el punto verde):

Network Preferences

¿Cómo puedo obtener esa información desde la línea de comandos?

El networksetup me permite listar 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)

Por desgracia, la información sobre qué servicio está activo (el punto verde de la captura de pantalla) no está disponible en esta información. ¿Hay algún otro comando que pueda utilizar para obtener esta información?

24voto

Reorx Puntos 111

Poniendo todo junto, escribí un script para realizar esta tarea:

#!/bin/bash

while read -r line; do
    sname=$(echo "$line" | awk -F  "(, )|(: )|[)]" '{print $2}')
    sdev=$(echo "$line" | awk -F  "(, )|(: )|[)]" '{print $4}')
    #echo "Current service: $sname, $sdev, $currentservice"
    if [ -n "$sdev" ]; then
        ifout="$(ifconfig "$sdev" 2>/dev/null)"
        echo "$ifout" | grep 'status: active' > /dev/null 2>&1
        rc="$?"
        if [ "$rc" -eq 0 ]; then
            currentservice="$sname"
            currentdevice="$sdev"
            currentmac=$(echo "$ifout" | awk '/ether/{print $2}')

            # may have multiple active devices, so echo it here
            echo "$currentservice, $currentdevice, $currentmac"
        fi
    fi
done <<< "$(networksetup -listnetworkserviceorder | grep 'Hardware Port')"

if [ -z "$currentservice" ]; then
    >&2 echo "Could not find current service"
    exit 1
fi

El scriptobtiene primero una lista de servicios de networksetup y, a continuación, comprueba si cada servicio está en estado activo desde ifconfig .

Nombra el script para networkservice.sh por ejemplo, y ejecutarlo para obtener el servicio de red actual en el que se encuentra.

$ bash networkservice.sh
USB 10/100/1000 LAN, en4, 00:e0:4a:6b:4d:0c
Wi-Fi, en0, 8c:85:90:a0:4b:ec

20voto

Ben Hyde Puntos 106

No pretendo tener la respuesta a esta pregunta resuelta, pero esto puede ser útil.

Puedes preguntar cómo enrutará actualmente los paquetes hacia algo:

$ route get example.com | grep interface
interface: en8

Y entonces puedes preguntar qué "Servicio de Red" está gestionando esa interfaz:

$ networksetup -listnetworkserviceorder | grep en8
(Hardware Port: Broadcom NetXtreme Gigabit Ethernet Controller, Device: en8)

Pero honestamente, dudo que un "Servicio 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 tienen.

8voto

Michael Zhou Puntos 167

Simplemente emite

    ifconfig

Enumera todas las interfaces de red y su estado.

8voto

Oskar Puntos 1242

El scutil --dns le proporciona toda la información de enrutamiento de red que necesitará para asignar etiquetas de interfaz de hardware a las rutas de red.

Un poco awk y grep puede ponerlo en orden si necesita scribir la información o reducirla. Empieza por agarrarte a "if_index" si tienes curiosidad.

3voto

David Kittell Puntos 31

En caso de que alguien más se tropiece con esto como lo hice yo, el código de abajo 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/

#!/bin/sh

clear
sExternalMACALService="http://dns.kittell.net/macaltext.php?address="

# List all Network ports
NetworkPorts=$(ifconfig -uv | grep '^\[a-z0-9\]' | awk -F : '{print $1}')
#echo $NetworkPorts

# Function to convert IP Subnet Mask to CIDR
mask2cdr ()
{
# Assumes there's no "255." after a non-255 byte in the mask
local x=${1##\*255.}
set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})\*2 )) ${x%%.\*}
x=${1%%$3\*}
echo $(( $2 + (${#x}/4) ))
}

# Get remote/public IP address
remoteip=$(dig +short myip.opendns.com @resolver1.opendns.com)

# Get computer name
computername=$(scutil --get ComputerName)

# Get serial number
sSerialNumber=$(system\_profiler SPHardwareDataType |grep "Serial Number (system)" |awk '{print $4}'  | cut -d/ -f1)
#echo $sSerialNumber

# Get operating system name and version - Start
OSvers1=$( sw\_vers -productVersion | cut -d. -f1 )
OSvers2=$( sw\_vers -productVersion | cut -d. -f2 )
OSvers3=$( sw\_vers -productVersion | cut -d. -f3 )
case $OSvers2 in
8)
OSName="Mountain Lion"
;;
9)
OSName="Mavericks"
;;
10)
OSName="Yosemite"
;;
11)
OSName="El Capitan"
;;
12)
OSName="Sierra"
;;
default)
OSName="Unknown"
;;
esac
# Get operating system name and version - Stop

echo "$computername"
echo "--------------"
echo "      Computer OS:  Mac OS X - $OSName $OSvers1.$OSvers2.$OSvers3"
echo "    Computer Name:  $computername"
echo "Current User Name:  $(whoami)"
echo "    Serial Number:  $sSerialNumber"

if \[\[ $remoteip \]\]; then
echo "Remote IP Address:  $remoteip\\n"
else
echo "Remote IP Address:  Unable To Determine\\n"
fi

for val in $NetworkPorts; do   # Get for all available hardware ports their status
activated=$(ifconfig -uv "$val" | grep 'status: ' | awk '{print $2}')
#echo $activated
label=$(ifconfig -uv "$val" | grep 'type' | awk '{print $2}')
#echo $label
#ActiveNetwork=$(route get default | grep interface | awk '{print $2}')
ActiveNetworkName=$(networksetup -listallhardwareports | grep -B 1 "$label" | awk '/Hardware Port/{ print }'|cut -d " " -f3- | uniq)
#echo $ActiveNetwork
#echo $ActiveNetworkName
state=$(ifconfig -uv "$val" | grep 'status: ' | awk '{print $2}')
#echo $state
ipaddress=$(ifconfig -uv "$val" | grep 'inet ' | awk '{print $2}')
# echo $ipaddress

if \[\[ -z $(ifconfig -uv "$val" | grep 'link rate: ' | awk '{print $3, $4}' | sed 'N;s/\\n/ up /' ) \]\]; then
networkspeed="$(ifconfig -uv "$val" | grep 'link rate: ' | awk '{print $3}' ) up/down"
else
networkspeed="$(ifconfig -uv "$val" | grep 'link rate: ' | awk '{print $3, $4}' | sed 'N;s/\\n/ up /' ) down"
fi

#echo $networkspeed
macaddress=$(ifconfig -uv "$val" | grep 'ether ' | awk '{print $2}')
#echo $macaddress
macal=$(curl -s "$sExternalMACALService$macaddress")
#echo $macal
quality=$(ifconfig -uv "$val" | grep 'link quality:' | awk '{print $3, $4}')
#echo $quality
netmask=$(ipconfig getpacket "$val" | grep 'subnet\_mask (ip):' | awk '{print $3}')
#echo $netmask
router=$(ipconfig getpacket "$val" | grep 'router (ip\_mult):' | sed 's/.\*router (ip\_mult): {\\(\[^}\]\*\\)}.\*/\\1/')
#echo $router
DHCPActive=$(networksetup -getinfo "Wi-Fi" | grep DHCP)
#echo $DHCPActive
dnsserver=$(networksetup -getdnsservers "$ActiveNetworkName" | awk '{print $1, $2}' | sed 'N;s/\\n//' )
#echo $dnsserver

if \[ "$activated" = 'active' \]; then
#echo "Network Port is Active"
if \[\[ $ipaddress \]\]; then
echo "$ActiveNetworkName ($val)"
echo "--------------"
# Is this a WiFi associated port? If so, then we want the network name
if \[ "$label" = "Wi-Fi" \]; then
WiFiName=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | grep '\\sSSID:' | sed 's/.\*: //')
#echo $WiFiName
echo "     Network Name:  $WiFiName"
fi

echo "       IP Address:  $ipaddress"
echo "      Subnet Mask:  $netmask"
echo "           Router:  $router"
echo "          IP CIDR:  $ipaddress/$(mask2cdr $netmask)"

if \[\[ -z $dnsserver \]\]; then
if \[\[ $DHCPActive \]\]; then
echo "       DNS Server:  Set With DHCP"
else
echo "       DNS Server:  Unknown"
fi
else
echo "       DNS Server:  $dnsserver"
fi

echo "      MAC-address:  $macaddress ($macal)"
echo "    Network Speed:  $networkspeed"
echo "     Link quality:  $quality"
echo " "
fi

# Don't display the inactive ports.
fi

done

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X