Envoyer un ping à chaque IP sur un sous-réseau
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 /
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
É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)
Dans le shell Bash:
#!/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 faire cela aussi:
nmap -sP 192.168.1.*
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
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
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.
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
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.
#!/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
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