Enviar um único pacote e aguardar uma resposta será uma das maneiras mais rápidas possíveis, e o ping é uma ótima maneira de fazer isso. De fato, dependendo do seu caso de uso, eu diria que é muito rápido , já que ele não diz realmente se o sistema está realmente fazendo algo útil, apenas que o subsistema de rede do kernel está vivo e configurado.
Mas supondo que isso seja bom o suficiente, você pode fazer algumas melhorias. Primeiro, você pode usar -W1
para diminuir o tempo limite do ping para um segundo. Segundo, você poderia fazer com que o seu script pingasse os diferentes hosts de forma assíncrona (em um thread de segundo plano) e verificar os resultados conforme necessário, em vez de esperar.
Como alternativa, você pode repensar a abordagem e fazer com que os sistemas remotos façam o check-in de alguma forma quando estiverem ativos e, se um sistema não tiver feito o check-in, você pode supor que está inativo.