Mostrar la lista de computadoras en una LAN en Linux

62

Soy un desarrollador web que está tratando de manejar mejor la seguridad. Estoy tratando de encontrar una manera (en distribuciones basadas en Linux / Debian) para enumerar todas las computadoras en la misma LAN en la que está mi netbook. Intenté "arp -n" pero no creo que sea una lista completa, ya que mi iPhone está en el mismo enrutador wi-fi que mi netbook, y eso no apareció. ¿Hay alguna forma mejor de obtener una lista completa de máquinas que comparten la misma puerta de enlace?

CaptSaltyJack
fuente
2
posible duplicado de ¿Cómo puedo enumerar todas las IP en la red conectada, preferiblemente a través de la Terminal?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

58

Obtén nmap . Es el programa que Trinity usó en The Matrix y puedes hacer un escaneo para encontrar todos los dispositivos que están conectados a la LAN en la que estás y más.

Aquí está la guía de referencia.

Tyler Faile
fuente
16
OKAY. Parece que "sudo nmap -sL 123.123.123. *" Es lo que estoy buscando, o tal vez -sP en lugar de -sL. ¡Gracias!
CaptSaltyJack
2
instalar nmap consudo apt-get install nmap
saintali
1
Pensé que este es realmente un sitio web serio, lol +1
user10089632
38

Esto es lo que uso, nmap y una dirección que usa la notación de bloque CIDR de la red que desea escanear. Primero debe instalar nmap ya que puede que no venga preinstalado con su distribución. En Ubuntu:

sudo apt-get install nmap

Luego, descubra su dirección de red utilizando ifconfig:

ifconfig

Salida ifconfig para la interfaz que quiero escanear:

wlan1     Link encap:Ethernet  HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

Use inet addr y Mask para descubrir la dirección de red en notación CIDR, más sobre CIDR aquí . La dirección es:

192.168.1.0/24

Ejecute nmap usando el parámetro -sP, que escaneará no más allá de verificar si el host está en línea:

sudo nmap -sP 192.168.1.0/24

La salida de nmap se verá así:

Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds

Eso es todo, si necesita más ayuda con nmap, consulte la documentación oficial de nmap o ejecute:

nmap --help 
radtek
fuente
2
nmap -sA 192.168.1.0/24 La opción nmap -sAmuestra resultados descriptivos similares con una mejor legibilidad, que incluye el nombre del dispositivo, IP, mac, etc., como con la opción -sP.. Personalmente prefiero -sA sobre -sP por el bien de la legibilidad.
Jayzcode
@Jayzcode En mi máquina -sA nunca regresa, mientras que -sP solo tomó 3.73 segundos (detecté el enrutador, mi PC y otra PC). ¿Alguna idea de por qué?
Rodrigo
17

arp -nsolo le muestra las máquinas en su LAN con las que su máquina ya ha hablado. Puede hacer que esa lista se llene mejor haciendo ping a las direcciones de multidifusión de transmisión y todos los hosts:

La dirección de difusión "todos unos" (en binario). Tenga en cuenta que la mayoría de las pilas de IP traducirán esto a las direcciones de difusión de subred para todas las subredes a las que está conectado:

ping 255.255.255.255

La dirección de difusión de subred para su subred actual. Asumiendo que estás en 192.168.1.0/24:

ping 192.168.1.255

La dirección de multidifusión "todos los hosts". Este me gusta mucho porque es más probable que encuentre hosts configurados para otras subredes IP, que están conectados a la misma LAN Ethernet que usted:

ping 224.0.0.1

Tenga en cuenta que este método, y los otros métodos que he visto mencionados en otras respuestas hasta ahora, solo buscan hosts accesibles por IP en la red actual. Probablemente eso sea todo lo que debe preocuparse, pero es posible que un atacante espíe o haga cosas malas en una red sin ser visible a través de IP.

Spiff
fuente
8

ip neighy hosts. NO se requiere nmap / NO se requiere sudo .

Basándose en esto, puede construir un script Python:

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

Descargar vía

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(o simplemente arp... no vi eso antes)

Martin Thoma
fuente
o simplementeip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop
ip npara abreviar. Quizás mejor ip n | grep REACHABLE.
Pablo A
4

No encontré las respuestas existentes lo suficientemente satisfactorias, así que pensé en intentarlo. Después de todo, las preguntas frecuentes sugieren proporcionar contexto para los enlaces .

nmapes genial, aunque un poco confuso de usar. Aquí hay algo que ejecuto para descubrir dispositivos de red locales que en su mayoría se pueden copiar y pegar. nmap -sP(o nmap -sn) escanea haciendo ping . Hay otras opciones para 'descubrimiento de host', como con nmap -sLo nmap -Pn.

Camino # 1.

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
ehtesh@x200arch:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0

Camino # 2. Sé que esto funciona, pero no puedo decir si este es el camino correcto.

ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

Me encantaría saber si hay formas más efectivas. Hasta entonces, me atendré a esto.

Ehtesh Choudhury
fuente
4

Puede intentar hacer ping a toda una subred dada con un pequeño script de shell de Linux, por ejemplo

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done
dmn8
fuente
En mi caso, dije UP para todos y luego ip ndije FAILED to all.
Pablo A
3

Hunt es una herramienta de línea de comandos que es capaz de crear una lista de máquinas a medida que transmiten información a través de la red. Utiliza datos TCP, UDP, ICMP y ARP para crear una lista de direcciones MAC activas en una red. Es una herramienta pasiva que funciona escuchando en el cable.

Sean C.
fuente
44
Sé que hay páginas de manual, pero sería útil ver un ejemplo en la respuesta.
Ehtesh Choudhury
2

Para una lista más compacta de dispositivos conectados:

nmap -sL 192.168.0.* | grep \(1

Explicación.

nmap -sL 192.168.0.* enumerará todas las IP en la subred y las marcará con el nombre:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Como todos los registros interesantes comienzan con paréntesis (y dígitos 1, lo filtramos con | grep \(1(se necesita una barra invertida para escapar del paréntesis)

Quirk
Tenga en cuenta que si dos dispositivos tienen el mismo nombre, nmapse mostrará sólo el uno, que estaba conectado a un router última

Alexander Malakhov
fuente
2

Para escanear el estado de un rango de direcciones IP, esto es agradable y simple:

sudo nmap -sn 192.168.1.2-20

Dónde:

         -sn: Ping Scan - disable port scan

Nota:

  • En versiones anteriores de Nmap, -snse conocía como-sP

Lo hice en Mac OS X (que se basa en BSD). No estoy seguro de si la versión de Linux tiene alguna diferencia.

Sridhar Sarnobat
fuente
1
Brillante, todo lo que tenía que hacer era escribir: sudo nmap -sP 192.168.178.0-255. Esto hizo un escaneo en la subred en la que estoy.
Leo Gerber
2

Puede usar fping sudo apt-get install fping (en sistemas operativos tipo Debian).

fping es similar al ping, pero tiene un rendimiento mucho mejor al hacer ping a varios hosts. La bandera -r 1 le dice a fping que realice solo una ronda. La parte 2> 1 permite que grep filtre la salida.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

Mostraría algo como:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

También hay un indicador interesante para nmap que le permitiría ver al proveedor de MAC, si lo conoce. Use con sudo para ver las direcciones MAC.

$ sudo nmap -sP 192.168.1.0/24

Obtendría por ejemplo:

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds
usuario9869932
fuente
1

1. Solución alternativa si las transmisiones y nmapno están disponibles:

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2a. o simplemente pregunte a su servidor de nombres de dominio :

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b. sin awk

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. hace ping a todos los dispositivos de red que se pueden hacer ping en la subred 192.168.2.0/24 en paralelo (para reducir el tiempo de ejecución). Después arpdebe mostrar todos los dispositivos, que respondieron.

  2. no comprueba las conexiones activas o actuales, pero enumera todas las conexiones que el servicio de dominio local mantiene una entrada, incluso las realmente antiguas.

Explicación más detallada:

  • seq 254para crear todos los números de 1 a 254 (para todos los números de 100 a 150: seq 100 150)
  • xargsllama pingy reemplaza "IP" ( -iIP) con el seqnúmero de uence de stdin, por lo que 192.168.2.IP cambia a 192.168.2.1 para el primer seqnúmero, -Pespecifica el número de pingprocesos concurrentes que xargsdeben iniciarse, elijo la misma cantidad +1 como direcciones ( = 254) estoy interesado.
  • pingcon la dirección IP modificada por xargs ( 192.168.2.IP) y solo haciendo ping una vez ( -c1); debe usar el mismo identificador especificado para xargs sobre el -iargumento en este casoIP
  • grep time= Para eliminar todas las líneas que contienen información superflua, solo nos interesan las respuestas, que proporcionan un tiempo de ida y vuelta (= obtuve una respuesta)
  • arp -a para mostrar pares de nombres válidos (ip)

Llamo a esto mi comando pingall y lo hice disponible a través de un alias en ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
Don Question
fuente