Estou ciente dos métodos em que você pode executar um for
loop Bash e ping
vários servidores. Existe uma ferramenta Linux CLI que eu possa usar que me permita fazer isso sem precisar recorrer à gravação de um script Bash em ping
uma lista de servidores um por vez?
Algo assim:
$ ping host1 host2 host3
NOTA: Estou procurando especificamente pelo CentOS / Fedora, mas se ele funcionar em outras distros, tudo bem também.
networking
ping
icmp
slm
fonte
fonte
Respostas:
Se você olhar para o projeto NMAP, verá que ele inclui ferramentas adicionais
nmap
. Uma dessas ferramentas é anping
que inclui a seguinte capacidade:nping
está nos repositórios EPEL padrão para inicializar.Uso
Para executar ping em vários servidores, basta informar
nping
os nomes / IPs e qual protocolo você deseja usar. Aqui, como queremos imitar o que aping
CLI tradicional faz, usaremos o ICMP.A única desvantagem que encontrei com esta ferramenta é o uso do modo ICMP que requer privilégios de root.
fonte
nmap
também suporta ICMP diretamente pela opção de especificar-sn
. Veja minha resposta para detalhes.O fping está em um pacote Fedora com o mesmo nome e permite muitos hosts ou um conjunto de endereços IP.
fonte
Descrição:
fonte
Eu sugeriria o uso do GNU Parallel
a saída será intercalada
fonte
Eu sei que é especificamente não o que você está pedindo, mas um script para fazer isso:
Isso usará seus pontos de extremidade como argumentos de linha de comando e enviará um ping de 5 contagens para cada um como um processo em segundo plano e, em seguida, espere que todos terminem antes de sair. Ele imprimirá as três últimas linhas da saída do ping, que contém estatísticas úteis sobre a taxa de sucesso e a latência.
fonte
wait
aguardará todos os processos filhos ativos, para que você possa evitar o segundo loop. Acho que parte da razão pela qual foi solicitado que não fosse necessário escrever um script bash é ter uma solução que funcione em qualquer máquina sem ter que carregar ou escrever um script. Torná-lo curto parece mais favorável, por isso acho melhor evitar essa atribuição de argumentos e apenas fazê-lofor host; do
no seu primeiro ciclo. Se isso fosse zsh, você poderia evitar odo
edone
e apenas fazer, interatively:for host in google.com; ping -c5 "$host" |& tail -3 & wait
command &
) em uma subcamada (embrulho ou seja, com parênteses) e comwait
a combinar qualquer número de comandos para um comando artificial, por exemplo:(for f in google.com yahoo.com microsoft.com; do ping $f & done; wait)
. Suas saídas serão intercaladas e, quando você pressionar Ctrl + c após este comando, todos os três processos filhos serão eliminados. O shell possui muitas construções poderosas de controle de tarefas e esse é um deles.Suponho que isso possa fazer por você?
Ele tira proveito da
printf
capacidade de "iterar automaticamente" seus argumentos enquanto reutiliza sua cadeia de caracteres de formato sobre cada argumento. Oprintf
item acima, portanto, produz uma sequência de seqüências deping <hostname> &
caracteres para cada host fornecido como argumento e alimenta essa sequência de comandos por meio da Substituição de Comando noeval
comando para executá-los imediatamente.printf
eeval
comandos são padrão POSIX, bem como substituição de comandos.Incluindo todo esse comando em um subshell compreendendo um e-ed
wait
como este:fornece a capacidade de interromper tudo à vontade com um simples Ctrl+C.
Caso contrário, você pode controlar cada
ping
comando individualmente através do controle de trabalho usual do shell.Se o seu shell também oferece suporte para Substituições de Processo, você também pode usar o seguinte:
por alguns caracteres a menos para digitar.
A essência é a mesma que para o
eval
, mas alimenta a sequência deping
s para o comando.
(akasource
) através da Substituição de Processo.fonte
O Nmap suporta varreduras de ping (ICMP) e vários hosts:
nmap -sn -n 127.0.0.1 8.8.8.8
Você também pode criar um arquivo contendo todos os seus IPs de destino (separados por espaços ou novas linhas) chamados
targets.txt
. Então corra:nmap -sn -n -iL targets.txt
Opções explicadas:
-sn
Ping Scan.-n
Desabilite a resolução DNS.-iL
Nome do arquivo de entrada.Outras opções interessantes, caso você queira executar ping em um número muito grande de destinos:
-T4
Aumente o tempo para reduzir a duração da verificação.--min-parallelism 100
Aumente o número de sondas paralelas.-oG <file>
Grave os resultados da verificação em um arquivo no formato Grepable.Sem criar um arquivo
Lembre-se de que você também pode renunciar à criação de um arquivo e usar a
-
para receber entradas de um canal|
ou através de métodos tradicionais para redirecionar a saída via STDIN.Exemplos:
-ou-
-ou-
Referências
fonte
Usando o
xargs
comando comum para construir uma execução de váriasping
solicitações:Onde
host1 host2 host3
pode haver um número variável de hosts (qualquer combinação de IP ou nome do host).Isso altera os
xargs
padrões para forçar 1 argumento de entrada por execução de ping e permitir um número ilimitado de processos filhos paralelos (1 por host ping). Provavelmente, é aconselhável definir-P
(também conhecido como--max-procs
) um valor sensato se pretender executar ping em um grande número de hosts (todos serão processados; apenas menos simultaneamente).É curto o suficiente para ser usado diretamente, pode ser adicionado como uma função ao seu perfil de shell ou arquivo rc ou transformado em um pequeno script no seu
$PATH
. Nos exemplos abaixo,-P
foi definido como 10 para evitar o consumo excessivo de recursos.Script de exemplo:
/usr/bin/mping
Exemplo de função dentro
~/.bashrc
E use como:
fonte
--max-procs
/-P
. No entanto, para contagens de host menores que-P
, todos os pings estão sendo executados em paralelo - o que significa que levará o tempo da execução de ping mais longa, em vez da soma de todos.Não sei exatamente o que você deseja, mas você pode alterar o último conjunto de 8 bits para o decimal 255, para que seus hosts recebam uma transmissão; na verdade, ele transmitirá pacotes de ping para todos os dispositivos existentes em uma rede.
fonte
Saída
fonte
&&
operador apenas permite que o segundo comando seja executado se o primeiro comando for concluído com êxito (ou seja, um código de saída 0) E 2) o primeiro ping nunca terminará sem um ^ C para interrompê-lo. Considere adicionar um parâmetro -c e -w. Bem vindo ao site!Apenas por diversão e lucro ...
Isso pode ser facilmente aprimorado. O que o torna bastante útil. :)
Para opções adicionais, consulte as páginas de manual para bsd ping e Linux ping
HTH
EDIT: ligeiramente atualizado para finalizar as consultas de ping @ 6 pings cada e adicionar opções da página de manual.
fonte
ping
chamada nunca retorna, a menos que atinja um erro fatal.Use abaixo o comando simples:
fonte