2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

Mostrar lista de computadoras en una LAN en Linux

Soy un desarrollador web que está tratando de tener un mejor manejo de la seguridad. Estoy tratando de encontrar una manera (en las distribuciones basadas en Linux/Debian) de listar todos los ordenadores 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 router wi-fi que mi netbook, y eso no surgió. ¿Hay alguna forma mejor de obtener una lista completa de máquinas que comparten la misma puerta de enlace?

Respuestas (11)

61
61
61
2011-07-15 17:55:50 +0000

Consigue 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í es la guía de referencia.

41
41
41
2014-12-09 15:56:20 +0000

Esto es lo que uso, nmap, y una dirección que usa la notación de bloque CIDR de la red que quieres escanear. Primero necesitas instalar nmap ya que puede no venir preinstalado con tu distro. En Ubuntu:

sudo apt-get install nmap

A continuación, calcula la dirección de red usando ifconfig:

ifconfig

Salida de 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
          ...

Usa la dirección de entrada y la máscara para calcular 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 no escaneará más allá de comprobar si el host está en línea:

sudo nmap -sP 192.168.1.0/24

La salida de nmap se verá algo 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, vea la documentación oficial de nmap , o ejecute:

nmap --help
18
18
18
2011-07-15 19:12:18 +0000

arp -n sólo muestra las máquinas de la red con las que ya ha hablado. Puedes conseguir que esa lista se llene mejor haciendo ping a las direcciones de emisión y de todos los anfitriones:

La dirección de emisión de “todos” (en binario). Tenga en cuenta que la mayoría de las pilas de IP traducirán esto a las direcciones de difusión de subredes 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. Así que asumiendo que estás en 192.168.1.0/24:

ping 192.168.1.255

La dirección de multidifusión de “todos los hosts”. Me gusta mucho esta porque es más probable que encuentre hosts configurados para otras subredes IP, que por casualidad están conectados a la misma LAN Ethernet que usted:

ping 224.0.0.1

Nota que este método, y los otros métodos que he visto mencionados en otras respuestas hasta ahora, sólo buscan hosts alcanzables por IP en la red actual. Eso es probablemente todo lo que necesita preocuparse, pero es posible que un atacante fisgonee o haga cosas malas en una red sin ser visible a través de IP.

8
8
8
2017-04-03 21:54:39 +0000

ip neigh y hosts. NO se requiere nmap / NO se requiere sudo.

Construyendo sobre esto, puedes 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))

Descarga vía

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

(o simplemente arp … no lo vi antes)

4
4
4
2016-05-10 08:21:24 +0000

Podrías intentar hacer ping a todas las subredes con un pequeño script 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
4
4
4
2013-12-18 01:44:36 +0000

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

nmap es genial, aunque un poco confuso de usar. Aquí hay algo que he corrido para descubrir los dispositivos de red local que son en su mayoría copiables y pegables. nmap -sP (o nmap -sn) escanea por ping . Hay otras opciones para el ‘descubrimiento de host’, como con nmap -sL o 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 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 ...>

Estaría feliz de saber si hay maneras más efectivas. Hasta entonces, me atengo a esto.

3
3
3
2011-07-15 18:16:48 +0000

Hunt es una herramienta de línea de comando que es capaz de construir una lista de máquinas mientras transmiten por la red para obtener información. Utiliza datos de TCP, UDP, ICMP y ARP para construir una lista de direcciones MAC activas en una red. Es una herramienta pasiva que funciona escuchando en el cable.

3
3
3
2019-05-23 17:18:32 +0000

Podrías usar fping sudo apt-get install fping (en sistemas operativos similares a los de Debian).

fping es similar al ping, pero mucho más eficaz cuando se hace ping a múltiples hosts. La bandera -r 1 le dice a fping que realice sólo una ronda. La parte 2>>1 permite a grep filtrar 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 interesante flag para nmap que le permitiría ver el vendedor de MAC - si se conoce. Usar con sudo para ver las direcciones MAC.

$ sudo nmap -sP 192.168.1.0/24

Obtendrías 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
3
3
3
2017-11-08 13:22:31 +0000

1. Solución alternativa si las emisiones y nmap no están disponibles:

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

2a. o sólo 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 un ping a todos los pingables Dispositivos de Red en la subred 192.168.2.0/24 en paralelo (para reducir el tiempo de ejecución). Después arp debería mostrar cada dispositivo, que respondió.

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

Explicación más detallada:

  • seq 254 para crear todos los números del 1 al 254 (para todos los números del 100 al 150: seq 100 150)
  • xargs llama a ping y reemplaza “IP” (-iIP) con el número sequence de stdin, por lo tanto 192. 168.2.IP cambia a 192.168.2.1 para el primer número seq, -P especifica el número de procesos ping concurrentes xargs debe comenzar, yo elijo la misma cantidad +1 como direcciones (=254) me interesa.
  • ping con la dirección ip modificada por xargs (192.168.2.IP) y sólo ping una vez(-c1); debes usar el mismo identificador que se especificó para xargs sobre el argumento -i en este caso IP
  • grep time= para eliminar todas las líneas que contengan información superflua, sólo nos interesan las respuestas, que proporcionan un tiempo de ida y vuelta (=obtener una respuesta)
  • arp -a para mostrar pares de nombre(ip) válidos

Llamo a este mi comando pingall y lo pongo a disposición sobre un alias en ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
3
3
3
2016-07-25 17:31:07 +0000

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, -sn se conocía como -sP

Hice esto en Mac OS X (que está basado en BSD). No estoy seguro de si la versión de Linux tiene alguna diferencia.

2
2
2
2016-10-20 10:28:47 +0000

Para una lista más compacta de los dispositivos conectados:

nmap -sL 192.168.0.* | grep \(1

Explicación.

nmap -sL 192.168.0.* listará todas las IPs de la subred y marcará aquellas que tengan 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 empiezan con el paréntesis ( y el dígito 1, filtramos eso con | grep \(1 (se necesita una barra invertida para escapar del paréntesis)

Quirk Cuidado con que si dos dispositivos tienen el mismo nombre, nmap mostrará sólo el que estaba conectado al router last