2009-02-02 46 views
37

¿Hay una forma de línea de comandos para enviar pings a cada computadora en una subred? Al igual que Enviar un ping a cada IP en una subred

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

para hacer cumplir la resolución ARP?

+1

'for i in $ (seq 1 254); hacer ping -c1 -t 1 192.168.11. $ i; done' - es nativo, sin herramientas de terceros. – YumYumYum

Respuesta

26

Yo sugeriría el uso de fping con la opción de máscara, ya que no se restringe a sí mismo en el ping.

fping -g 192.168.1.0/24 

La respuesta será fácil de analizar en 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 
... 

Nota: Con el argumento de -a restringirá la salida de direcciones IP accesibles, es posible que desee utilizar de otra manera fping también imprimir direcciones inalcanzables:

fping -a -g 192.168.1.0/24 

de hombre;

fping es diferente de la de ping en que usted puede especificar cualquier número de objetivos en la línea de comandos, o especificar un archivo que contiene las listas de objetivos hacer ping. En lugar de enviar a un destino hasta que se agote el tiempo de espera o responda, fping enviará un paquete de ping y pasará al siguiente objetivo de forma rotativa.

Más información: http://fping.org/

+1

Así fping es mucho más ligero que nmap – urnenfeld

37

difusión de 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!) 
... 

(Añadir una opción -b en Linux)

+1

nota: es posible que deba agregar un "-b" allí según la versión/plataforma –

+2

Además, no todos los sistemas operativos responderán a un ping de difusión (por defecto). –

+2

En IPv6 use "ff02 :: 1". – Keltia

14

En Bash shell:

#!/bin/sh 

COUNTER=1 

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

es posible que desee agregar una opción "-c 1" al comando ping allí ... –

2

bajo Linux, creo que de ping -b 192.168.1.255 funcionará (192.168.1.255 es la dirección de difusión para 192.168.1. *) sin embargo IIRC que no funciona en Windows.

7

La línea de comando nmap utilidad puede hacer esto también:

nmap -sP 192.168.1.* 
96

No todas las máquinas tienen nmap disponibles, pero es una herramienta maravillosa para cualquier descubrimiento de red, y sin duda mejor que la iteración a través ping comandos independientes.

 
$ 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

La mejor respuesta hasta la fecha porque es la primera en ser compatible con la realidad de que no todas las subredes son del mismo tamaño y usan el/La notación 24 se puede generalizar a cualquier subred de cualquier tamaño. –

+0

Esta es la mejor respuesta que la excepción porque es más flexible y se ajusta a diferentes redes. – charmoniumQ

+0

Esto realmente debería ser la respuesta aceptada. Es más limpio y mucho más 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

Esta es una modificación del @ David-Rodríguez-dribeas respuesta anterior, que funciona todos los pings en paralelo (mucho más rápido) y sólo muestra la salida para las direcciones IP que devuelven el 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

Me acaba de llegar en torno a esta cuestión, pero las respuestas no me satisfacía. Así Rodé mi propia:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:" 
  • Ventaja 1: No es necesario instalar ningún instrumento adicional
  • Ventaja 2: Es rápido. Hace todo en Paralelo con un timout por cada ping de 1s ("-W 1"). Por lo que finalizará en 1s :)
  • Ventaja 3: La salida es así
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 

Editar: Y aquí es la misma que la escritura, para cuando sus xargs no tienen la bandera -P, como es el caso en openwrt (i acabo de enterar)

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

Agregar un -t 1 espera solo un segundo antes de salir. Esto mejora mucho la velocidad si solo tiene unos pocos dispositivos conectados a esa subred.

+0

Excelente. 1) Es nativo 2) No tengo que instalar todas esas herramientas de mierda en Arduino. – YumYumYum

0

Llegué tarde pero aquí hay un pequeño script que hice para este propósito que ejecuto en Windows PowerShell. Debería poder copiarlo y pegarlo en el ISE. Esto ejecutará el comando arp y guardará los resultados en un archivo .txt y lo abrirá en el bloc de notas.

# 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 
Cuestiones relacionadas