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 dans un sous-réseau? Comme

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

pour appliquer la résolution de l'arp?

38
demandé sur Max Ried 2009-02-02 16:16:34

14 réponses

je suggère l'utilisation de fping avec l'option mask, puisque vous ne vous limitez pas à 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
...

Note: L'utilisation de l'argument -a limitera la sortie aux adresses ip accessibles, vous pouvez vouloir l'utiliser sinon fping imprimera également des adresses inaccessibles:

fping -a -g 192.168.1.0/24

de man:

fping diffère de ping en ce que vous pouvez spécifier un nombre quelconque de cibles sur la ligne de commande ou spécifiez un fichier contenant les listes de cibles pings. Au lieu d'Envoyer à une cible jusqu'à ce qu'il chronomètre ou réponses, fping va envoyer un paquet ping et passer à la suivante cible à la manière d'un tournoi à la ronde.

plus d'information: http://fping.org /

33
répondu Kyr 2016-04-14 14:04:07

toutes les machines n'ont pas nmap disponible, mais c'est un outil merveilleux pour toute découverte du réseau, et certainement mieux que itérer par l'intermédiaire de commandes indépendantes ping .

$ nmap -n -sP 10.0.0.0/24

Starting Nmap 4.20 ( http://insecure.org ) at 2009-02-02 07:41 CST
Host 10.0.0.1 appears to be up.
Host 10.0.0.10 appears to be up.
Host 10.0.0.104 appears to be up.
Host 10.0.0.124 appears to be up.
Host 10.0.0.125 appears to be up.
Host 10.0.0.129 appears to be up.
Nmap finished: 256 IP addresses (6 hosts up) scanned in 2.365 seconds
97
répondu Tom 2009-02-02 13:48:28

Émission 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 151910920" sous Linux)

38
répondu Ryan McGeary 2009-02-02 13:25:53

Dans le shell Bash:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
   ping 192.168.1.$COUNTER -c 1
   COUNTER=$(( $COUNTER + 1 ))
done
16
répondu David Rodríguez - dribeas 2013-12-17 16:22:39

l'utilitaire de ligne de commande nmap peut faire cela aussi:

nmap -sP 192.168.1.*
8
répondu Christian Studer 2017-02-07 14:11:38

il s'agit d'une modification de la réponse de @david-rodríguez-dribeas ci-dessus, qui exécute tous les pings en parallèle (beaucoup plus rapidement) et montre seulement la sortie pour les adresses ip qui renvoient le ping.

export COUNTER=1
while [ $COUNTER -lt 255 ]
do
    ping $COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" &
    COUNTER=$(( $COUNTER + 1 ))
done
6
répondu Adam Brown 2015-11-18 15:25:42

je viens de répondre à cette question, mais les réponses ne m'ont pas satisfait. Alors j'ai roulé le mien:

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 1s (" -W 1 "). Ainsi il finira en 1s:)
  • Avantage 3: la sortie est comme ceci
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 le même script, pour quand votre xargs n'ont pas l'option-P, comme c'est le cas dans openwrt (je viens de découvrir)

for i in $(seq 255);
do
 ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done
6
répondu zabeltech 2016-02-23 14:19:19
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

ajoutant un -t 1 attend seulement une seconde avant de quitter. Cela améliore la vitesse beaucoup si vous avez juste quelques appareils connectés à ce sous-réseau.

5
répondu JKalok 2018-07-03 15:30:31
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
3
répondu PCFixerGuy 2014-01-23 22:07:16

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.* ) cependant IIRC qui ne fonctionne pas sous windows.

2
répondu Axelle Ziegler 2009-02-02 13:25:06

Vérifiez si ce blog a ce qu'il vous faut.

1
répondu Ólafur Waage 2009-02-02 13:18:10
#!/bin/sh

COUNTER=

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
répondu Christopher Infante 2013-04-07 01:10:59

je suis arrivé en retard mais voici un petit script que j'ai fait dans ce but que J'exécute dans Windows PowerShell. Vous devriez pouvoir le copier et le coller dans L'ISE. Cela lancera ensuite la commande arp et sauvegardera les résultats dans A.ouvrir le fichier txt 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
répondu cxp cxd 2018-01-21 02:58:53
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done
-3
répondu usbdongle 2015-10-21 13:55:17