¿Cómo encontrar todos los dispositivos (dirección IP, nombre de host, dirección MAC) en la red local?


13

He leído casi todos los hilos relacionados con esto, pero nadie ha facilitado el acceso a una tabla como la siguiente.

  IP Address     Hostname        MAC Address
  192.168.1.10 | myAppleTV     | 02:78:42:9b:bb:12
  192.168.1.10 | myiPhone      | b2:18:4a:3a:42:22
  192.168.1.10 | myiMac        | 09:17:a2:95:c4:00
  192.168.1.10 | myCanonPrinter| a0:ea:72:77:b4:aa

La mayoría de las veces lo uso arp -ay también lo hay dns-sb, pero ninguno de ellos hace que sea fácil encontrar 3 datos clave cada vez que estoy jugando en la red, es decir, dirección IP, nombre de host y dirección MAC. ¡Me sorprende que no haya una utilidad que logre esto!


Este tipo de información estará principalmente en el enrutador
usuario151019

Respuestas:


12

Si utilizar una utilidad de terceros no es un problema para usted, le recomiendo que pruebe esto:

arp-scan (disponible a través de Homebrew )

brew install arp-scan
arp-scan --localnet

fing (descargue e instale el paquete "Desktop Embedded CLI" de fing.com o de Homebrew brew cask install fing)

sudo fing -r 1 -d true -o table,text

Ambas utilidades tienen varios modos y características adicionales. Sugiero leer los manuales en su totalidad para aprovecharlos al máximo.

Si necesita evitar el uso de herramientas de terceros, aquí hay una manera de hacer algo similar con los comandos integrados. Puede ejecutarlos de forma interactiva, pero probablemente sea más fácil guardarlo como un script. Nota: para que sea breve, este script no verifica errores y solo funciona en subredes / 24. Modificarlo para que funcione en subredes de otros tamaños se deja como ejercicio para el lector :)

#!/usr/bin/env bash
tab=$'\t'
pIF=$(echo "show State:/Network/Global/IPv4" | scutil | awk -F: '/PrimaryInterface/{sub(/ /,"",$2); print $2}')
sn=$(ipconfig getifaddr $pIF | sed -En 's/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/p')
for i in {1..254}; do ping -i0.1 -W100 -c1 $sn.$i | grep from; done
arp -a | grep $pIF | sed -e 's/^\?/unnamed/' -e "s/\ at\ /${tab}/g" -e "s/\ on\ /${tab}/g" -e 's/\ ifscope.*$//g' | awk 'BEGIN { FS="\t"; OFS="\t"; printf "%-17s\t%-15s\t%s\n", "MAC","INTERFACE","HOSTNAME (IP)" } { if($2!="(incomplete)") {printf "%-17s\t%-15s\t%s\n",$2,$3,$1}}'

Esto debería generar algo como:

MAC                 INTERFACE       HOSTNAME (IP)
0:90:b:7a:85:62     en0             r1.lan (192.168.20.1)
2c:36:f8:48:2b:47   en0             cisco-sg300-10p.lan (192.168.20.2)
84:78:ac:a6:95:a0   en0             cisco-sg300-20.lan (192.168.20.3)
b4:fb:e4:cb:93:85   en0             wap1.lan (192.168.20.10)
0:11:32:10:cd:c1    en0             nas.lan (192.168.20.20)
0:11:32:3d:99:c9    en0             nas2.lan (192.168.20.21)
0:11:32:10:cd:c1    en0             unnamed (192.168.20.23)
d4:4b:5e:fe:6a:75   en0             brwd44b5efe6a75.lan (192.168.20.90)
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.