Estou escrevendo um script wake on lan para um conjunto de nossos computadores de laboratório. Temos o sqlite db com uma lista dos nomes de host, IPs e MACs do computador, e atualmente eu sigo cada um deles com '-c1' para que não funcione infinitamente - mas mesmo que isso leve alguma espera, existe uma maneira mais rápida de obter responder em vez de ping? O uso do ping parece diminuir bastante o script, pois ele precisa das respostas para continuar.
Muito obrigado por todas as sugestões!
fonte
É para isso que o fping foi projetado. http://fping.sourceforge.net/
Você precisa analisar a saída posteriormente, em vez de confiar em um código de retorno, mas é muito mais rápido do que executar ping normal.
fonte
Isso funcionaria apenas para um ou dois computadores, mas se você os conectar diretamente ao computador responsável por verificar seu status, poderá usar
ethtool
para verificar se o link está ativo ou não.fonte
ethtool {network_interface} | grep "Link detected" | cut -f 3 -d ' '
retornaráyes
se uma máquina estiver conectada eno
se não estiver.O que você pode fazer é executar ping no endereço de broadcast, o que deve fazer com que todos os computadores retornem. Em seguida, você pode cruzar esta lista com o que você possui no SQLite para garantir que todos os computadores estejam funcionando.
Além disso, um ping é provavelmente a maneira mais rápida de garantir que um computador esteja ativo em uma rede. Como mencionado na outra resposta, isso não fornece dados realmente úteis. Se você tiver a capacidade de instalar scripts, poderá adicionar um cronjob para executar ping em um servidor central, executar uma tarefa ou apenas fazer eco da lista de processos em um servidor central que registrará a solicitação. Em seguida, basta verificar se você tem algum problema sem precisar verificar manualmente todas as vezes.
fonte
O Ganglia usa tráfego multicast para monitorar muitos hosts em um cluster; talvez você possa usar algo semelhante? Isso pressupõe que seu hardware de rede permita tráfego multicast entre todos os hosts e seu sistema de monitoramento.
fonte
Eu tive o mesmo problema e criei o seguinte script (rápido e sujo). Isso emite essencialmente todos os pings como trabalhos separados em paralelo e varrerá uma sub-rede inteira / 24 em 3 segundos; note que, por algum motivo, não me dei ao trabalho de descobrir que não podia usar o código de resultado do ping aqui, mas o grep -v fez o trabalho:
fonte
Em C,
fonte
Eu descobri
fping -r0 ...
para fornecer a resposta mais rápida.A
-r
opção (repetição) parece mais rápida que a similar-c
(contagem). O uso de-r0
resultados em apenas um ping sendo enviado e a saída é muito abreviada em comparação com outras opções.No meu sistema ...
Resulta em...
Um pouco de massagem para me livrar da
ICMP
(s) mensagem (s) me dá ...Quanto à velocidade, o
fping
antigo Intel Dual-Core de 1,8 GHz com 4 GB de RAM é ...E o
grep
esort
parece adicionar apenas 0.001-0.004s ao tempo ...NOTAS
ICMP
mensagem não ocorre em todas as execuções.2>&1
é necessário para evitar aICMP
mensagem de aparecendo na saída como ele é enviado parastderr
em vez destdout
.fonte