Compruebe si el cable de red está enchufado sin activar la interfaz

9

Estoy tratando de identificar NIC en ~ 20 servidores remotos (2-6 NIC en cada servidor). Para empezar, quiero identificar aquellos listos para usar y los gratuitos. ¿Cómo puedo verificar el estado de los medios físicos? Sé que algunas maneras, incluyendo ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrier, pero todos ellos requieren que la interfaz está activa. No quiero abrir TODAS las interfaces. No estoy seguro de por qué, pero no me gusta tener habilitadas, pero no interfaces configuradas en la red. ¿Hay alguna manera de evitar esto?

¿O simplemente estoy equivocado y no hay nada malo en que todas las interfaces estén activas (y no configuradas)? ¿Incluso si están enchufados?

minaev
fuente

Respuestas:

5

ip link show, muestra de forma predeterminada todas las interfaces, se usa ip link show uppara mostrar solo las interfaces en ejecución. Podrías usar filtros para obtener la diferencia.

Nikhil Mulley
fuente
Ajá. Y el cable faltante aparecerá como NO-CARRIER, ¿verdad?
minaev
Bingo. Gracias. E ip addr showincluso agrega direcciones IP a la salida.
minaev
2
Eso no funciona en mi máquina (Debian squeeze, skge driver): ip link showno muestra nada más que "ABAJO". ipinforma la misma información que, ifconfigy /sys/class/net/en cualquier caso, ¿no? ¿Obtiene información del estado del enlace ipque es diferente de lo que obtiene debajo /sys/class/neto de ifconfigsu máquina? ¿O obtiene el estado del enlace sobre las interfaces que están inactivas /sys/class/net(obtengo /sys/class/net/eth0/carrier: Invalid argument)?
Gilles 'SO- deja de ser malvado'
no funciona si la interfaz está inactiva.
Vladimir Kunschikov
@Nikhil Mulley ¿Qué quieres decir con filtros?
Joe
2

Aquí está mi script para actualizar las rutas predeterminadas en función del estado de la conexión en tiempo real . (se ejecuta en segundo plano) funciona con múltiples interfaces, defino prioridades en los /tmp/${iface}.metricarchivos, la "mejor" interfaz conectada se utilizará para enrutar el tráfico predeterminado.

#!/bin/sh

/sbin/ip monitor link | while read -r line
do
    iface=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\1/p')
    state=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\2/p')
    if [ "$iface" != "" ] ; then
        echo "$iface is $state"
        if [ -f /tmp/${iface}.metric ] ; then
                echo "updating default route for ${iface}"
                if [ "$state" = "DOWN" ] ; then
                        ip route del default dev "${iface}"
                else
                        ip route add default dev "${iface}" metric `cat /tmp/${iface}.metric`
                fi
        fi
    fi
done
usuario211708
fuente
0

ip link show muestra la bandera "LOWER_UP" para indicar que el cable está enchufado. También puede verificar / sys / class / net / eth * / operstate o carrier. Sin embargo, todo esto solo funciona para una interfaz con una dirección IP vinculada.

julien
fuente
1
Información interesante, pero realmente no responde a la publicación original.
X Tian
incluso si no tengo plugin eth, también dirá "arriba".
kangear