Estou tentando escrever um script que lista todos os hosts da minha LAN (há cerca de 20 deles) e grava o status de ping ao lado de cada host. Eu tenho o arquivo de concessões DHCP, então tenho todos os IPs (por exemplo, 10.0.0.1, 10.0.0.2 etc.), tudo o que preciso é o status de ping para cada host.
Portanto, 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 tempo. Eu verifiquei man ping
, parece haver duas opções para definir o atraso do tempo limite: -w deadline
e -W timeout
. Eu 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 ele não parece levar em consideração o parâmetro:
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? Caso contrário, existem alternativas?
Editar
- O sistema operacional é o Debian Lenny.
- Os hosts que estou tentando executar ping são, na verdade, pontos de acesso. Eles estão na mesma vlan e sub-rede que os usuários (para simplificar a implantação e a 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 fornece 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 pessoas que procuram uma solução que envolva
ping
, 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.
fonte
ping
vai esperar por uma resposta - sim, apenas envia pings consecutivos mais rápido ....Você pode definir um tempo limite curto com o
timeout
comando no Ubuntu / Debian:fonte
timeout (GNU coreutils) 8.4
.DURATION is a floating point number with an optional suffix: 's' for seconds (the default),
... Nos meusman timeout
relatos de casoGNU coreutils 8.26
. BWT, estou usando o Ubuntu 17.04.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.
fonte
você pode querer olhar para a ferramenta arp ping se todos os seus hosts estiverem na LAN física. Ele faz a mesma coisa, mas usa pacotes arp da camada 2 para fazer o 'ping'. Você pode usar uma combinação de arpping e ping icmp, ou de fato tcp ping, para reunir qual é a falha. Por exemplo, é um travamento da pilha tcp, embora seja raro hoje em dia, poderíamos descobrir se uma pilha tcp da máquina falhou, pois a máquina não responderia ao ping, mas responderia ao arp (que é um trecho 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ê gerencia comutadores Ethernet, pode obter dados do link físico, revelando se a máquina está realmente ligada ou se foi desconectada fisicamente. Tivemos uma situação em que as máquinas (clientes em salas públicas) seriam desligadas, reunimos esses dados e a ativação de pacotes LAN para ativar as máquinas. :-)
Quaisquer que sejam as soluções criadas, se sua rede estiver ocupada, pense em implementar algum tipo de qo, para que seus pacotes de monitoramento tenham prioridade na rede, a perda de pacotes de medição devido ao congestionamento da rede pode gerar alarmes falsos. 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 desejar. Nós 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!
fonte
@ Jordan-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 do ping são iniciados somente após o endereço IP ter sido 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 uns 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
fonte
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 tempo menor que a quantidade especificada de segundos.
fonte
Se você pode digitalizar sua sub-rede (ou parte dela) sem disparar alarmes de segurança e não se importar com um pouco de dados extras, o Angry IP Scanner é rápido, gratuito, permite clicar para classificar por status e pode fornecer informações mais detalhadas .
fonte
Por que não iniciar o ping em segundo plano, com saída para um arquivo temporário, em paralelo para cada host? Depois durma por um segundo, interrompa todos os processos de ping que ainda estão em execução e leia os arquivos para coletar a saída.
fonte
O tempo limite é um valor inteiro indicando quanto tempo e quanto tempo o pacote pode ser enviado. Valores abaixo de 1 não têm sentido. Um valor 1 indica que você está executando ping apenas em vizinhos imediatos.
A única maneira de acelerar as coisas é executar uma verificação de antecedentes e coletar os resultados. É isso que ferramentas como o Nagios fazem.
fonte
Você poderia tentar algo assim. Mas leva 15 minutos para ser executado.
fonte
nmap
seria a ferramenta certa para o trabalho.tente isto:
fonte
fping
?O ping possui as opções [-t timeout] e [-W waittime] para que você possa fazer:
fonte