Controllare se il cavo di rete è collegato senza aprire l'interfaccia


9

Sto cercando di identificare le NIC su ~ 20 server remoti (2-6 NIC su ogni server). Per cominciare, voglio identificare quelli pronti per l'uso e quelli gratuiti. Come posso controllare lo stato dei media fisici? So che alcuni modi, tra cui ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrier, ma tutti richiedono che l'interfaccia è attiva. Non voglio portare TUTTE le interfacce. Non so perché, ma non mi piace abilitare, ma non configurare le interfacce nella rete. C'è un modo per evitarlo?

Oppure sbaglio e non c'è niente di male nel fatto che tutte le interfacce siano attive (e non configurate)? Anche se sono collegati?

Risposte:


5

ip link show, per impostazione predefinita mostra tutte le interfacce, utilizzare ip link show upper mostrare solo le interfacce in esecuzione. È possibile utilizzare i filtri per ottenere la differenza.


Aha. E il cavo mancante apparirà come NO-CARRIER, giusto?
minaev,

Bingo. Grazie. E ip addr showaggiunge anche indirizzi IP all'output.
minaev,

2
Non funziona sulla mia macchina (compressione Debian, driver skge): ip link shownon mostra altro che "GIÙ". ipriporta le stesse informazioni di ifconfige /sys/class/net/in ogni caso, no? Ricevi informazioni sullo stato dei collegamenti da ipquelle diverse da quelle ottenute /sys/class/netdal ifconfigtuo computer o da cui ti trovi? O ricevi lo stato del link sulle interfacce che sono in /sys/class/net(I get /sys/class/net/eth0/carrier: Invalid argument)?
Gilles 'SO- smetti di essere malvagio' il

non funziona se l'interfaccia non è attiva.
Vladimir Kunschikov,

@Nikhil Mulley Cosa intendi con filtri?
Joe,

2

Ecco il mio script per aggiornare le route predefinite in base allo stato della connessione in tempo reale . (funziona in background) funziona con più interfacce, definisco le priorità nei /tmp/${iface}.metricfile, l'interfaccia "migliore" connessa verrà utilizzata per instradare il traffico predefinito.

#!/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

0

ip link show visualizza il flag "LOWER_UP" per indicare il cavo inserito. Puoi anche controllare per / sys / class / net / eth * / operstate o vettore. Tuttavia, tutti questi funzionano solo per un'interfaccia con un indirizzo IP associato.


1
Informazioni interessanti, ma in realtà non risponde a Post originale.
X Tian,

anche se non ho il plugin eth, dirà anche "up".
Kangear,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.