2009-02-02 4 views
37

Existe-t-il une méthode basée sur une ligne de commande pour envoyer des pings à chaque ordinateur d'un sous-réseau? CommeEnvoi d'un ping à chaque adresse IP sur un sous-réseau

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

pour appliquer la résolution arp?

+1

pour i dans $ (seq 1 254); fais ping -c1 -t 1 192.168.11. $ i; done' - son natif, sans outils tiers. – YumYumYum

Répondre

26

je suggère l'utilisation de fping avec l'option de masque, puisque vous n'êtes pas vous restreignez dans 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 accessibles IP, vous voudrez peut-être utiliser fping autrement sera également imprimer des adresses inaccessible:

fping -a -g 192.168.1.0/24 

De l'homme:

fping diffère de ping en ce que vous pouvez spécifier un certain nombre de cibles sur la ligne de commande, ou spécifier un fichier contenant les listes de cibles au ping. Au lieu d'envoyer à une cible jusqu'à ce qu'il expire ou réponses, fping enverra un paquet ping et passera à la prochaine cible dans un tourniquet à la ronde.

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

+1

Aussi bien fps est beaucoup plus léger que nmap – urnenfeld

37

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 sur Linux)

+1

note: vous devrez peut-être ajouter un "-b" là-dedans en fonction de la version/plate-forme –

+2

En outre, tous les systèmes d'exploitation ne répondront pas à un ping de diffusion (par défaut). –

+2

En IPv6, utilisez "ff02 :: 1". – Keltia

14

En shell Bash:

#!/bin/sh 

COUNTER=1 

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

vous pouvez ajouter une option "-c 1" à la commande ping ici ... –

2

Sous linux, je pense que ping -b 192.168.1.255 va fonctionner (192.168.1.255 est l'adresse de diffusion pour 192.168.1. *) mais IIRC qui ne fonctionne pas sous windows.

7

La ligne de commande utilitaire nmap peut le faire aussi:

nmap -sP 192.168.1.* 
96

Toutes les machines ont nmap disponibles, mais il est un outil merveilleux pour toute découverte de réseau, et certainement mieux que itérer commandes ping indépendantes.

 
$ 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 
+0

Meilleure réponse à ce jour car il est le premier à être compatible avec le fait que tous les sous-réseaux ne sont pas de la même taille, et en utilisant le/La notation 24 peut être généralisée à n'importe quel sous-réseau de taille. –

+0

Ceci est la meilleure réponse que l'exception, car il est plus flexible et s'adapte à différents réseaux. – charmoniumQ

+0

Cela devrait vraiment être la réponse acceptée. C'est plus propre et beaucoup plus flexible. – Routhinator

0
#!/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 
3
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 
6

C'est une modification de @ david-rodriguez-dribeas réponse ci-dessus, qui se déroule tous les pings en parallèle (beaucoup plus rapide) et ne montre que la sortie 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 
-2
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done 
5

Je suis venu autour de cette question, mais les réponses ne me satisfaisait pas. Alors je roulais mon propre:

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: Il est rapide. Il fait tout en parallèle avec un délai pour chaque ping de 1s ("-W 1"). Donc, il va finir dans 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 est le même que le script ici, quand vos xargs n'ont pas -P, comme cela 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 
1

for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

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

+0

Excellent. 1) Son natif 2) je ne dois pas installer tous ces outils de merde dans Arduino. – YumYumYum

0

Je suis arrivé en retard mais voici un petit script que j'ai fait à cet effet que je cours dans Windows PowerShell. Vous devriez être capable de copier et coller dans l'ISE. Cela va ensuite exécuter la commande arp et enregistrer les résultats dans un fichier .txt et l'ouvrir 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 
Questions connexes