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?
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/
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
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)
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.*
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].*?:"
-W 1
"). Donc ça va finir en 1s :)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
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
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.
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. *) Mais le code IIRC qui ne fonctionne pas sous Windows.
Vérifiez si cet article de blog a ce dont vous avez besoin.
#!/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
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