Verifique se o cabo de rede está conectado sem trazer a interface para cima

8

Eu estou tentando identificar NICs em ~ 20 servidores remotos (2-6 NICs em cada servidor). Para começar, quero identificar os que estão prontos para uso e os gratuitos. Como posso verificar o estado da mídia física? Conheço algumas maneiras, incluindo ifconfig|grep RUNNING , ethtool , cat /sys/class/net/eth0/carrier , mas todas elas exigem que a interface esteja ativa. Eu não quero trazer todas as interfaces para cima. Não tenho certeza porque, mas eu não gosto de ter ativado, mas não as interfaces configuradas na rede. Existe uma maneira de evitar isso?

Ou estou errado e não há nada de ruim em todas as interfaces estarem ativas (e não configuradas)? Mesmo se eles estiverem conectados?

    
por minaev 16.12.2011 / 12:08

3 respostas

5

ip link show , por padrão, mostra todas as interfaces, use ip link show up para mostrar apenas as interfaces em execução. Você poderia usar filtros para obter a diferença.

    
por 16.12.2011 / 12:28
1

Aqui está meu script para atualizar rotas padrão com base no estado da conexão em realtime . (corre em segundo plano) trabalha com múltiplas interfaces, defino prioridades nos arquivos /tmp/${iface}.metric , a interface conectada "melhor" será usada para rotear o tráfego padrão.

#!/bin/sh

/sbin/ip monitor link | while read -r line
do
    iface=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*//p')
    state=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*//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
    
por 21.01.2017 / 20:37
0

ip link show exibe o sinalizador "LOWER_UP" para indicar que o cabo está conectado. Você também pode verificar por / sys / class / net / eth * / operstate ou operadora. No entanto, todos eles funcionam apenas para uma interface com um endereço IP vinculado a ele.

    
por 21.03.2014 / 17:20