networking - subredes - Enviar un ping a cada IP en una subred
formula de subredes (14)
Acabo de responder a esta pregunta, pero las respuestas no me satisfacen. Así que hice mi propia versión:
echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
- Ventaja 1: no necesita instalar ninguna herramienta adicional
- Ventaja 2: es rápido. Hace todo en paralelo con un timout por cada ping de 1s ("
-W 1
"). Entonces terminará 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 lo mismo que el script, para cuando tus xargs no tienen el indicador -P, como es el caso en openwrt (me acabo de enterar)
for i in $(seq 255);
do
ping -W 1 -c 1 10.0.0.$i | grep ''from'' &
done
¿Hay una forma de línea de comandos para enviar ping a cada computadora en una subred? Me gusta
for(int i = 1; i < 254; i++)
ping(192.168.1.i);
para hacer cumplir la resolución arp?
En Linux, creo que ping -b 192.168.1.255 funcionará (192.168.1.255 es la dirección de difusión de 192.168.1. *), Sin embargo, IIRC no funciona en Windows.
En shell Bash:
#!/bin/sh
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping 192.168.1.$COUNTER -c 1
COUNTER=$(( $COUNTER + 1 ))
done
Esta es una modificación de @ david-rodríguez-dribeas respuesta anterior, que ejecuta todos los pings en paralelo (mucho más rápido) y solo 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
La utilidad de línea de comando nmap también puede hacer esto:
nmap -sP 192.168.1.*
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
No todas las máquinas tienen nmap
disponible, pero es una herramienta maravillosa para cualquier descubrimiento de red, y ciertamente mejor que iterar a través de comandos de ping
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
Verifica si esta publicación de blog tiene lo que necesitas.
Yo sugeriría el uso de fping con la opción de máscara, ya que no estás restringido en 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: El uso del argumento -a
restringirá la salida a direcciones IP accesibles, es posible que desee utilizarlo, de lo contrario, fping también imprimirá direcciones inalcanzables:
fping -a -g 192.168.1.0/24
Del hombre:
fping difiere del ping en que puede especificar cualquier número de objetivos en la línea de comando, o especificar un archivo que contiene las listas de objetivos para hacer ping. En lugar de enviar a un objetivo hasta que se agote el tiempo de espera o responda , fping enviará un paquete de ping y pasará al siguiente objetivo en una operación de todos contra todos.
Más información: http://fping.org/
Ping de difusión:
$ 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!)
...
(Agregue una opción -b
en Linux)
#!/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
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
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.
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done