Cómo encontrar todas las direcciones IP usadas en una red


94

En mi trabajo hay mucha computadora y quiero hacer una broma. Puedo cerrar la computadora a través de la red, pero encontrar direcciones IP es difícil para mí.

¿Cómo puedo encontrar fácilmente todas las direcciones IP en línea desde 192.168.1.aa a 192.168.1.zz?


44
intentarangry ip scanner
Web-E


2
¿seriamente? ¿Quieres nuestra ayuda para bromear con tus compañeros de trabajo?
Dan H

Respuestas:


141

En general, nmapes bastante útil para escanear redes rápidamente.

Para instalar nmap, ingrese el siguiente comando en la terminal:

sudo apt-get install nmap

Una vez que la aplicación esté instalada, ingrese el siguiente comando:

nmap -sn 192.168.1.0/24

Esto le mostrará qué hosts respondieron a las solicitudes de ping en la red entre 192.168.1.0 y 192.168.1.255.


Para versiones anteriores de Nmap, use -sP:

nmap -sP 192.168.1.0/24

Para referencias adicionales, vea las siguientes páginas:

Guía de instalación de NMAP

Guía de referencia de NMAP

Es una herramienta muy útil para aprender.


2
No todos los hosts responden a pings. ARP es el camino a seguir, al menos en IPv4.
Marcin Kaminski

3
eso es suficiente para mí y funciona en internet

1
¿es solo mi computadora o este comando tarda una eternidad en ejecutarse?
JohnMerlino

44
Tenga en cuenta que para acelerar el escaneo de nmap debe agregar los indicadores -T4 (velocidad) y -n (solo numérico).
Sergiy Kolodyazhnyy

3
Recuerde que necesita sudo para el comando nmap, de lo contrario se devuelve cero resultados.
machineaddict

40

Si todas las computadoras en su red son Ubuntu o cualquier otra distribución que haga uso de avahi-daemon( DNS-SD ), puede obtener una lista detallada de ellas (con nombre de host y dirección IP) haciendo lo siguiente:

avahi-browse -rt _workstation._tcp

Si desea conocer todas las direcciones IP utilizadas en su red, puede usar arp-scan:

sudo arp-scan 192.168.1.0/24

Como no está instalado de forma predeterminada, deberá instalarlo con sudo apt-get install arp-scan. arp-scanenvía paquetes ARP a la red local y muestra las respuestas recibidas, por lo que muestra incluso los hosts con firewall (que bloquean el tráfico en función de los paquetes IP).


3
Este comando es definitivamente mejor que el anterior. Ejecutar nmap tomó años, pero este respondió instantáneamente con los nodos en la red especificada.
JohnMerlino

3
En mi caso, muy a menudo, arp-scanno encuentro todos los dispositivos asociados a mi red inalámbrica. Ahora, por ejemplo, sudo arp-scan 192.168.2.0/24muestra 2 resultados (.1 y .1), mientras que nmap -sn 192.168.2.0/24muestra 4 resultados (.1, .2, .3 y .4). Entonces, parece que nmapes más preciso (sé con certeza que hay 4 dispositivos conectados a la red). ¿Por qué es esto?
tigerjack89

2
Tal vez encontré la respuesta en un comentario a otra pregunta. "Cabe señalar que algunos dispositivos podrían no aparecer a menos que estén encendidos. Mi nexus 4 no aparecerá a menos que la pantalla esté encendida". Sin embargo, es interesante que los mismos dispositivos siempre respondan a los pings de nmap.
tigerjack89

arp-scanes bueno !
forzagreen

17

Nota para el lector : la respuesta original se publicó hace un tiempo y en el momento en que solo estaba aprendiendo scripting de shell. Consulte la versión revisada a continuación para obtener un script nuevo y mejorado que funciona mucho más rápido.

Respuesta original

nmapsería mi opción número 1, pero ¿y si no la tiene? La forma de bricolaje sería con un script de ping que atraviese manualmente cada dirección IP posible en la red. Lo que tenemos aquí es solo un bucle while, donde establecemos el último número en la dirección, hacemos un solo ping silencioso a la dirección, verificamos si el comando tuvo éxito o no (y si tuvo éxito, entonces el host obviamente está activo) y una printfdeclaración. De manera rápida y sucia, me llevó unos 10 minutos escribirlo, pero el tiempo de ejecución puede ser un poco lento.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Respuesta revisada

Originalmente publiqué esta respuesta en agosto de 2015. Desde entonces, he aprendido un poco más sobre las secuencias de comandos de shell, y una vez que vi esta secuencia de comandos, pensé que sería una buena idea revisar esta respuesta para agregar algunas mejoras. Aquí hay algunas ideas:

  • El script es obviamente lento y pingespera respuesta del host. Por defecto, pingpara dos RTT, que pueden variar dependiendo de qué tan congestionada esté su red, y hasta donde yo entiendo, el protocolo TCP duplica el tiempo de espera cada vez (al menos de acuerdo con esto ). Entonces podríamos forzar el pingtiempo de espera con -w 1bandera. Como tenemos 256 direcciones y suponemos 1 segundo para cada dirección, el script tardará aproximadamente 256/60 = 4.27 minutos.

  • Hacer un comando y luego capturar su estado de salida con $?no era realmente necesario. El if ... then;...fipuede operar en comandos directamente. En otras palabras, es suficiente hacer esto:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • El printfcomando se puede reescribir así:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Esto es más un cambio estilístico, pero es coherente con la forma en que printffunciona y se ve en muchos otros idiomas, con comillas "$NUM"variables. Citar aquí no es necesario, ya que solo tratamos con números, no necesitamos anticipar la división de palabras debido a que hay espacios en una variable.

  • Se puede lograr una mejora de rendimiento mucho mejor si generamos varios procesos en segundo plano. El guión que se edita a continuación hace exactamente eso. Puse el pingy printfen una función, pingf(sí, cursi, lo sé). Ahora, también hay una única mainfunción que realiza el bucle y la llamada pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

¿Cuánto mejor funciona eso? No está mal, en realidad, lleva unos segundos.

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

Cosas a tener en cuenta

  • Windows (a partir de Windows 7, creo) ha comenzado a bloquear la respuesta a las solicitudes de eco ICMP. Hay bastantes preguntas sobre eso en Ask Ubuntu y otros sitios del tipo "Oye, mi computadora Linux puede ser pinchada, pero no las de Windows, ¿qué pasa con eso?" Solo tenga en cuenta el hecho de que para las versiones más recientes de Windows debe habilitar la respuesta al eco ICMP.

2
Me gusta este tipo de solución
Szenis


4

fpinges una gran herramienta para escanear múltiples hosts en una red a través de ICMP. Si no está instalado, puede instalarlo de la siguiente manera:

sudo apt-get install fping

fping envía paquetes ICMP ECHO_REQUEST y marca un host como Up si obtiene ECHO_RESPONSE del host.

Por ejemplo, para escanear los hosts de subred 192.168.1.0/24, puede hacer:

fping -g 192.168.1.0/24

Para un número específico de hosts, por ejemplo, de 192.168.1.15a 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping es altamente configurable, por ejemplo, cuántos paquetes se enviarán, el tiempo de espera de respuesta, el formato de salida, etc.

Comprueba man fpingpara tener más idea.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.