Estou tentando escrever um script que liste todos os hosts na minha LAN (há cerca de 20 deles) e grava o status do ping ao lado de cada host. Eu tenho o arquivo de concessões DHCP, então eu tenho todos os IPs (digamos, 10.0.0.1, 10.0.0.2, etc.), tudo que eu preciso é o status do ping para cada host.
Então, meu script lança um único ping para cada host:
ping -c 1 10.0.0.1
Infelizmente, quando um host está offline, o ping demora muito para expirar. Verifiquei man ping
, parece haver duas opções para definir o atraso do tempo limite: -w deadline
e -W timeout
. Acho que estou interessado no último.
Então eu tentei isso:
ping -c 1 -W 1 10.0.0.1
Mas esperar um segundo por host offline ainda é muito longo. Tentei configurá-lo para menos de um segundo, mas parece não levar o parâmetro em consideração:
ping -c 1 -W 0.1 10.0.0.1 # timeout option is ignored, apparently
Existe uma maneira de definir o tempo limite para um valor menor? Se não, existem alternativas?
Editar
- O sistema operacional é Debian Lenny.
- Os hosts que estou tentando fazer ping são na verdade pontos de acesso. Eles estão na mesma vlan e sub-rede que os usuários (para simplicidade de implantação e substituição). É por isso que não quero varrer toda a sub-rede (com um
ping -b
, por exemplo).
Editar #2
Aceitei a fping
solução (obrigado por todas as outras respostas). Este comando faz exatamente o que eu estava procurando:
fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
Este comando leva no máximo 500ms para ser concluído e me dá o status de ping de todos os hosts de uma só vez:
10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)
10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0
No Debian Lenny, a instalação é trivial:
aptitude update
aptitude install fping
Para quem procura uma solução que envolva
ping
o , use o-i
switch.Ou, se você quiser usar 0.1, precisará executá-lo como root
Não há necessidade de baixar utilitários extras.
fping pode ser uma ferramenta melhor do que o ping de estoque que você está usando. Em qual SO você está?
Exemplo:
-c
Número de pacotes de solicitação a serem enviados para cada destino.-t
Tempo limite de destino inicial em milissegundosVocê pode definir um tempo limite curto com o
timeout
comando no Ubuntu/Debian:Eu estaria usando o nmap para esta tarefa.
nmap -sP --max-retries=1 --host-timeout=1500ms 10.0.0.1
Consulte a documentação do nmap para obter mais detalhes sobre isso.
Use a opção -w , tanto no Windows quanto no Debian.
É uma maneira rápida de verificar se a máquina responde, assumindo que ela responderá em um tempo menor do que a quantidade especificada de segundos.
você pode querer ver a ferramenta arp ping se todos os seus hosts estiverem na LAN física. Ela faz a mesma coisa, mas usa pacotes arp da camada 2 para fazer o 'ping'. Você pode usar uma combinação de arpping e icmp ping ou, na verdade, tcp ping, para coletar qual é a falha. Exemplo é uma falha de pilha tcp, embora rara nos dias de hoje, poderíamos descobrir se uma pilha tcp da máquina havia travado, pois a máquina não responderia ao ping, no entanto, responderia ao arp (que é um pedaço de código diferente no host) .
usando uma combinação de arpping, tcpping e icmp ping, você pode descobrir se o serviço na máquina travou, a pilha tcp travou ou a máquina travou completamente. Se você gerenciou switches ethernet, pode obter dados de link físico, revelando se a máquina está realmente ligada ou se foi fisicamente desconectada. Tivemos uma situação em que as máquinas (clientes em salas públicas) seriam desligadas, reunimos esses dados e os pacotes wake on lan enviados, para ligar as máquinas. :-)
Quaisquer soluções que você construa, se sua rede estiver ocupada, pense em implementar algum tipo de qos , para que seus pacotes de monitoramento tenham prioridade na rede, perder pacotes de medição devido ao congestionamento da rede pode gerar falsos alarmes. Se você usar qos para monitorar pacotes, precisará pensar em coletar dados sobre a utilização da rede.
Assim, você pode tornar sua solução de monitoramento tão complexa ou fácil quanto quiser. Achamos que até o sistema de monitoramento mais elementar é um passo na direção certa, pelo menos algum administrador está de olho nas máquinas :-).
boa sorte!
@jordon-bedwell tem uma ótima sugestão.
@laszlo-valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linux explica que os tempos limite de ping só começam depois que o endereço IP foi determinado. Se você usa um dns e sua estação de trabalho está offline, o ping não pode determinar o endereço IP e, portanto, parece esperar aproximadamente 20+ segundos padrão antes de retornar falso.
O uso da ferramenta 'timeout' do linux fornece mais controle ao executar o ping com um nome de domínio.
Obrigado rapazes
Se você puder escanear sua sub-rede (ou parte dela) sem acionar alarmes de segurança e não se importar com um pouco de dados extras, o Angry IP Scanner é rápido, gratuito, permite que você clique para classificar por status e pode fornecer informações mais detalhadas .
Por que não iniciar o ping em segundo plano, com saída para um arquivo temporário, em paralelo para cada host? Em seguida, durma por um segundo, elimine quaisquer processos de ping que ainda estejam em execução e leia os arquivos para coletar a saída.
O tempo limite é um valor inteiro que indica quanto e por quanto tempo o pacote pode ser enviado. Valores abaixo de 1 não fazem sentido. Um valor de 1 indica que você está fazendo ping apenas para vizinhos imediatos.
A única maneira de acelerar as coisas é fazer uma verificação de antecedentes e colher os resultados. É isso que ferramentas como o Nagios fazem.