web-dev-qa-db-fra.com

Envoyer un ping à chaque IP sur un sous-réseau

Existe-t-il un moyen basé sur la ligne de commande pour envoyer des pings à chaque ordinateur d’un sous-réseau?

for(int i = 1; i < 254; i++)
    ping(192.168.1.i);

appliquer la résolution ARP?

42
Max Ried

Je suggérerais l'utilisation de fping avec l'option de masque, puisque vous ne vous limitez pas au ping.

fping -g 192.168.1.0/24

La réponse sera facile à analyser dans un script:

192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.5 is alive
...
192.168.1.4 is unreachable
192.168.1.6 is unreachable
192.168.1.7 is unreachable
...

Remarque: L'utilisation de l'argument -a limitera la sortie aux adresses ip accessibles, sinon vous voudrez bien l'utiliser. Fping affichera également les adresses inaccessibles

fping -a -g 192.168.1.0/24

De l'homme:

fping diffère de ping en ce que vous pouvez spécifier autant de cibles que vous le souhaitez sur la ligne de commande, ou spécifiez un fichier contenant les listes de cibles faire un ping. Au lieu d’envoyer à une cible jusqu’à expiration du délai ou réponses, fping enverra un paquet ping et passera au prochain cibler à la ronde.

Plus d'infos: http://fping.org/

38
Kyr

nmap n'est pas disponible sur toutes les machines, mais c'est un outil formidable pour toute découverte de réseau et certainement meilleur que l'itération via des commandes ping indépendantes.

nmap -n -sP 10.0.0.0/24

 À partir du Nmap 4.20 (http://insecure.org) le 2009-02-02 07:41 CST
Host 10.0.0.1 semble être opérationnel .
 Host 10.0. 0.10 semble être en hausse .
 L'hôte 10.0.0.104 semble en être en hausse ..
 L'hôte 10.0.0.124 semble en être en hausse .
 être en place .
 Nmap terminé: 256 adresses IP (6 en place) analysées en 2.365 secondes 
98
Tom

Diffusion ping:

$ ping 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.154: icmp_seq=0 ttl=64 time=0.104 ms
64 bytes from 192.168.1.51: icmp_seq=0 ttl=64 time=2.058 ms (DUP!)
64 bytes from 192.168.1.151: icmp_seq=0 ttl=64 time=2.135 ms (DUP!)
...

(Ajouter une option -b sous Linux)

38
Ryan McGeary

Dans Bash Shell:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
   ping 192.168.1.$COUNTER -c 1
   COUNTER=$(( $COUNTER + 1 ))
done

L'utilitaire de ligne de commande nmap peut également le faire:

nmap -sP 192.168.1.*
9
Christian Studer

Je viens juste de répondre à cette question, mais les réponses ne me satisfont pas… donc je me suis lancée:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
  • Avantage 1: vous n'avez pas besoin d'installer un outil supplémentaire
  • Avantage 2: c'est rapide. Il fait tout en parallèle avec un timout pour chaque ping de 1 ("-W 1"). Donc ça va finir en 1s :)
  • Avantage 3: La sortie est comme ça
64 bytes from 192.168.0.16: icmp_seq=1 ttl=64 time=0.019 ms
64 bytes from 192.168.0.12: icmp_seq=1 ttl=64 time=1.78 ms
64 bytes from 192.168.0.21: icmp_seq=1 ttl=64 time=2.43 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.97 ms
64 bytes from 192.168.0.11: icmp_seq=1 ttl=64 time=619 ms

Edit: Et voici la même chose que le script, car lorsque vos xargs n’ont pas le drapeau -P, comme c’est le cas dans openwrt (je viens de le découvrir)

for i in $(seq 255);
do
 ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done
7
zabeltech

Ceci est une modification de la réponse @ david-rodríguez-dribeas ci-dessus, qui exécute toutes les requêtes ping en parallèle (beaucoup plus rapidement) et affiche uniquement le résultat des adresses IP qui renvoient le ping.

export COUNTER=1
while [ $COUNTER -lt 255 ]
do
    ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" &
    COUNTER=$(( $COUNTER + 1 ))
done
6
Adam Brown
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

L'ajout d'un -t 1 n'attend qu'une seconde avant de quitter. Cela améliore beaucoup la vitesse si vous n'avez que quelques périphériques connectés à ce sous-réseau.

5
JKalok
FOR /L %i in (1,1,254) DO PING 192.168.1.%i -n 1 -w 100 | for /f "tokens=3 delims=: " %j in ('find /i "TTL="') do echo %j>>IPsOnline.txt
4
PCFixerGuy

Sous linux, je pense que ping -b 192.168.1.255 fonctionnera (192.168.1.255 est l’adresse de diffusion pour 192.168.1. *) Mais le code IIRC qui ne fonctionne pas sous Windows.

2
Axelle Ziegler

Vérifiez si cet article de blog a ce dont vous avez besoin.

1
Ólafur Waage
#!/bin/sh

COUNTER=$1

while [ $COUNTER -lt 254 ]
do
 echo $COUNTER
 ping -c 1 192.168.1.$COUNTER | grep 'ms'
 COUNTER=$(( $COUNTER + 1 ))
done

#specify start number like this: ./ping.sh 1
#then run another few instances to cover more ground
#aka one at 1, another at 100, another at 200
#this just finds addresses quicker. will only print ttl info when an address resolves
0

Je suis arrivé en retard mais voici un petit script que j'ai créé à cet effet et que je lance dans Windows PowerShell. Vous devriez pouvoir le copier et le coller dans l'ISE. Cela exécutera ensuite la commande arp, sauvegardera les résultats dans un fichier .txt et l'ouvrira dans le bloc-notes.

# Declare Variables
$MyIpAddress
$MyIpAddressLast

# Declare Variable And Get User Inputs
$IpFirstThree=Read-Host 'What is the first three octects of you IP addresses please include the last period?'
$IpStart=Read-Host 'Which IP Address do you want to start with? Include NO periods.'
$IpEnd=Read-Host 'Which IP Address do you want to end with? Include NO periods.'
$SaveMyFilePath=Read-Host 'Enter the file path and name you want for the text file results.'
$PingTries=Read-Host 'Enter the number of times you want to try pinging each address.'

#Run from start ip and ping
#Run the arp -a and output the results to a text file
#Then launch notepad and open the results file
Foreach($MyIpAddressLast in $IpStart..$IpEnd)
{$MyIpAddress=$IpFirstThree+$MyIpAddressLast
    Test-Connection -computername $MyIpAddress -Count $PingTries}
arp -a | Out-File $SaveMyFilePath
notepad.exe $SaveMyFilePath
0
cxp cxd