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