Verifique se o cabo de rede está conectado sem abrir a interface


9

Estou tentando identificar NICs em ~ 20 servidores remotos (2-6 NICs em todos os servidores). Para começar, quero identificar aqueles prontos para uso e gratuitos. Como posso verificar o estado da mídia física? Sei que algumas maneiras, incluindo ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrier, mas todos eles exigem que a interface é para cima. Não quero trazer TODAS as interfaces. Não sei por que, mas não gosto de ativar, mas não configurar interfaces na rede. Existe uma maneira de evitar isso?

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

Respostas:


5

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


Aha. E o cabo ausente aparecerá como NO-CARRIER, certo?
Minaev

Bingo. Obrigado. E ip addr showaté adiciona endereços IP à saída.
Minaev

2
Isso não funciona na minha máquina (squeeze Debian, driver do skge): ip link showmostra nada mais do que "DOWN". iprelata as mesmas informações ifconfige /sys/class/net/, em qualquer caso, não é? Você recebe informações de status link de ipque é diferente do que você ficar sob /sys/class/netou a partir ifconfigda sua máquina? Ou você obtém o status do link sobre interfaces que estão desativadas /sys/class/net(entendo /sys/class/net/eth0/carrier: Invalid argument)?
Gilles 'SO- stop be evil'

não funciona se a interface estiver inativa.
Vladimir Kunschikov 02/12/2015

@ Nikhil Mulley O que você quer dizer com filtros?
Joe

2

Aqui está o meu script para atualizar rotas padrão com base no estado da conexão em tempo real . (executado em segundo plano) funciona com várias interfaces, defino prioridades nos /tmp/${iface}.metricarquivos, a 'melhor' interface conectada 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 \([^ ]*\).*/\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 exibe a bandeira "LOWER_UP" para indicar o cabo conectado. Você também pode procurar por / sys / class / net / eth * / operstate ou carrier. No entanto, tudo isso funciona apenas para uma interface com um endereço IP associado a ela.


11
Informações interessantes, mas realmente não respondem à postagem original.
X Tian

mesmo que eu não tenha o plugin eth, ele também dirá "up".
kangear
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.