Je connais les méthodes où vous pouvez exécuter une for
boucle Bash et ping
plusieurs serveurs, existe-t-il un outil CLI Linux que je peux utiliser qui me permettra de le faire sans avoir à recourir à l'écriture d'un script Bash sur ping
une liste de serveurs un à la fois?
Quelque chose comme ça:
$ ping host1 host2 host3
REMARQUE: je recherche spécifiquement CentOS / Fedora, mais si cela fonctionne sur d'autres distributions, c'est bien aussi.
networking
ping
icmp
slm
la source
la source
Réponses:
Si vous regardez le projet NMAP, vous constaterez qu'il comprend des outils supplémentaires en plus de juste
nmap
. L'un de ces outils estnping
, qui comprend la capacité suivante:nping
se trouve dans les dépôts EPEL standard pour démarrer.Usage
Pour envoyer un ping à plusieurs serveurs, vous n'avez qu'à indiquer
nping
les noms / IP et le protocole que vous souhaitez utiliser. Ici, puisque nous voulons imiter ce que fait laping
CLI traditionnelle, nous utiliserons ICMP.Le seul inconvénient que j'ai trouvé avec cet outil est l'utilisation du mode ICMP nécessitant des privilèges root.
la source
nmap
prend également en charge ICMP directement en spécifiant l'option-sn
. Voir ma réponse pour plus de détails.fping est dans un paquet Fedora du même nom, et permet de nombreux hôtes, ou un ensemble d'adresses IP.
la source
La description:
la source
Je suggère d'utiliser GNU Parallel
la sortie sera entrelacée
la source
Je sais que ce n'est pas spécifiquement ce que vous demandez, mais un script bash pour accomplir cela:
Cela prendra vos points de terminaison comme arguments de ligne de commande et enverra un ping de 5 points à chacun en tant que processus d'arrière-plan, puis attendra que tout se termine avant de quitter. Il affichera les trois dernières lignes de la sortie ping qui contient des statistiques utiles sur le taux de réussite et la latence.
la source
wait
attendra tous les processus enfants actifs, vous pouvez donc éviter la deuxième boucle. Je pense qu'une partie de la raison pour laquelle il a été demandé de ne pas exiger l'écriture d'un script bash est d'avoir une solution qui fonctionne sur n'importe quelle machine sans avoir à transporter ou à écrire un script. Faire court semble plus favorable, donc je pense qu'il vaut mieux éviter cette affectation d'argument et le fairefor host; do
dans votre première boucle. Si c'était zsh, vous pourriez éviter ledo
etdone
et juste le faire, de manière interactive:for host in google.com; ping -c5 "$host" |& tail -3 & wait
command &
) dans un sous - shell ( à savoir l' emballage avec des parenthèses) etwait
à combiner un certain nombre de commandes en une commande artificielle, par exemple:(for f in google.com yahoo.com microsoft.com; do ping $f & done; wait)
. Leurs sorties seront entrelacées, et lorsque vous ctrl + c ceci après cette commande, les trois processus enfants seront tués. Le shell a beaucoup de puissantes constructions de contrôle des tâches et c'est l'une d'entre elles.Je suppose que cela peut vous aider?
Il tire parti de
printf
la capacité de "auto-itérer" ses arguments tout en réutilisant sa chaîne de formatage sur chaque argument. Parprintf
conséquent, ce qui précède produit une séquence deping <hostname> &
chaînes pour chaque hôte fourni en argument, et transmet cette séquence de commandes via la substitution de commande à laeval
commande pour les exécuter immédiatement.printf
et leseval
commandes sont standard POSIX, ainsi que la substitution de commande.Enfermant une telle commande dans un sous-shell comprenant un and-ed
wait
comme ceci:offre la possibilité d'interrompre tout à volonté avec un simple Ctrl+C.
Sinon, vous pouvez contrôler chaque
ping
commande individuellement via le contrôle de tâche habituel du shell.Si votre shell prend également en charge les substitutions de processus, vous pouvez également utiliser les éléments suivants:
pour quelques caractères de moins à taper.
L'essentiel est le même que pour le
eval
, mais alimente la séquence deping
s à la commande.
(akasource
) via la substitution de processus.la source
Nmap prend en charge les analyses ping (ICMP) et plusieurs hôtes:
nmap -sn -n 127.0.0.1 8.8.8.8
Vous pouvez également créer un fichier contenant toutes vos adresses IP cibles (séparées par des espaces ou des nouvelles lignes) appelées
targets.txt
. Exécutez ensuite:nmap -sn -n -iL targets.txt
Options expliquées:
-sn
Ping Scan.-n
Désactivez la résolution DNS.-iL
Entrez le nom du fichier.Autres options intéressantes au cas où vous voudriez envoyer un ping à un très grand nombre de cibles:
-T4
Augmentez le timing pour réduire la durée du scan.--min-parallelism 100
Augmentez le nombre de sondes parallèles.-oG <file>
Écrivez les résultats de l'analyse dans un fichier au format Grepable.Sans créer de fichier
Gardez à l'esprit que vous pouvez également renoncer à la création d'un fichier et utiliser un
-
pour prendre une entrée depuis un tube,|
, ou via des méthodes traditionnelles pour rediriger la sortie via STDIN.Exemples:
-ou-
-ou-
Les références
la source
En utilisant la
xargs
commande commune pour créer et exécuter plusieursping
requêtes:Où
host1 host2 host3
peut être un nombre variable d'hôtes (toute combinaison d'IP ou de nom d'hôte).Cela modifie les
xargs
valeurs par défaut pour forcer 1 argument d'entrée par exécution de ping et autoriser un nombre illimité de processus enfants parallèles (1 par hôte ping). Il est probablement judicieux de définir-P
(aka--max-procs
) sur une valeur saine si vous avez l'intention d'envoyer une requête ping à un grand nombre d'hôtes (ils seront tous traités; un peu moins simultanément).Son assez court pour être utilisé directement, pourrait être ajouté en tant que fonction à votre profil shell ou fichier rc, ou transformé en un petit script dans votre
$PATH
. Dans les exemples ci-dessous,-P
a été défini sur 10 pour éviter une consommation excessive de ressources.Exemple de script:
/usr/bin/mping
Exemple de fonction dans
~/.bashrc
Et utiliser comme:
la source
--max-procs
/-P
. Cependant, pour les nombres d'hôtes inférieurs à-P
, tous les pings sont exécutés en parallèle - ce qui signifie que cela prendra aussi longtemps que la seule exécution de ping la plus longue, plutôt que la somme de tous.Je ne sais pas exactement ce que vous voulez mais vous pouvez changer le dernier 8 bits en 255 décimal, donc vos hôtes recevront une diffusion, en fait, ils transmettront des paquets ping à tous les appareils qui existent dans un réseau.
la source
Sortie
la source
&&
opérateur ne permet à la deuxième commande de s'exécuter que si la première commande s'est terminée avec succès, (c'est-à-dire un code de sortie de 0) Et 2) le premier ping ne se terminera jamais sans un ^ C pour l'interrompre. Pensez à ajouter un paramètre -c et un paramètre -w. Bienvenue sur le site!Juste pour le plaisir et le profit ...
Cela pourrait être facilement amélioré. Ce qui le rend assez utile. :)
Pour des options supplémentaires, veuillez consulter les pages de manuel pour le ping bsd et le ping Linux
HTH
EDIT: légèrement mis à jour pour terminer les requêtes ping @ 6 pings chacune, et ajouter des options de page de manuel.
la source
ping
appel ne revient jamais sauf s'il rencontre une erreur fatale.Utilisez la commande simple ci-dessous:
la source