Encontrar otras computadoras en la red a través de la línea de comando

30

Tengo un puñado de Mac en mi red doméstica, y accedo a shell solo desde el exterior. ¿Cómo puedo averiguar qué dirección IP de las otras máquinas son?

Jon Haddad
fuente

Respuestas:

39

Intenta arp -aver la tabla de arp actual de tu computadora. Solo mostrará las direcciones IP con las que su computadora ha interactuado. Salida como esta (oscureció un poco para ocultar las direcciones MAC en mi red):

$ arp -a
? (10.1.168.1) at xx:xx:9e:82:ab:f6 on en1 ifscope [ethernet]
? (10.1.168.16) at xx:xx:29:d3:17:8 on en1 ifscope [ethernet]
? (10.1.168.115) at xx:xx:2:4f:76:14 on en1 ifscope [ethernet]
? (10.1.168.131) at xx:xx:6b:d0:36:a5 on en1 ifscope [ethernet]
? (10.1.168.134) at (incomplete) on en1 ifscope [ethernet]
? (10.1.168.137) at xx:xx:65:46:cd:b8 on en1 ifscope [ethernet]
? (10.1.168.255) at ff:ff:ff:ff:ff:ff on en1 ifscope [ethernet]
? (192.168.4.255) at ff:ff:ff:ff:ff:ff on vmnet8 ifscope [ethernet]
? (192.168.110.255) at (incomplete) on vmnet1 ifscope [ethernet]

Si no tiene más información sobre qué computadora es cuál, puede obtener un poco más de información identificando a los fabricantes de las tarjetas de red a través de la búsqueda de direcciones MAC .

Doug Harris
fuente
12
Lo sentimos, tomó casi 4 años marcar esto como correcto.
Jon Haddad
¿Qué significa " arp -amostrará solo las direcciones IP con las que su computadora ha interactuado" ? ¿Debo hacer ping a la transmisión (192.168.110.255) primero y obtener respuesta de cada dispositivo y luego usar arp para obtener una lista completa ya que solo interactué / pellizqué todo el dispositivo?
Weishi Zeng
10

Asumiendo que todas las otras máquinas están en el mismo dominio de transmisión al que tiene acceso, a menudo es suficiente hacer ping a la dirección de transmisión. No encontrará máquinas que estén dormidas, ni las configuradas para no responder a los pings, ni las que responderán a los pings pero no a los pings de transmisión.

% ifconfig -a | grep broadcast
        inet 192.168.1.241 netmask 0xffffff00 broadcast 192.168.1.255
% ping -i 5 -c 2 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.241: icmp_seq=0 ttl=64 time=0.393 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=2.511 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=5.810 ms (DUP!)
64 bytes from 192.168.1.255: icmp_seq=0 ttl=64 time=7.886 ms (DUP!)
64 bytes from 192.168.1.241: icmp_seq=1 ttl=64 time=0.312 ms

--- 192.168.1.255 ping statistics ---
2 packets transmitted, 2 packets received, +3 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.312/3.382/7.886/3.010 ms

La primera y última respuesta casi siempre será su máquina local. Las (DUP!)respuestas son de otras máquinas (aunque este ejemplo también muestra que algunas máquinas responden con la dirección de transmisión en sí, lo que no es muy útil).

También puede probar la dirección de transmisión de todos:

% ping -i 5 -c 2 255.255.255.255
PING 255.255.255.255 (255.255.255.255): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.392 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=3.053 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=8.685 ms (DUP!)
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.319 ms

--- 255.255.255.255 ping statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.319/3.112/8.685/3.401 ms

Este ejemplo muestra menos cruft. Todos los (DUP!)s son otras máquinas y la máquina local se identifica fácilmente como 127.0.0.1.

Chris Johnsen
fuente
8

Todos sus Mac tienen nombres de host, por lo que no debería necesitar conocer las direcciones IP. En su lugar, solo usará el nombre de host.

Los nombres de host se basan en el nombre que le haya dado a la computadora. Entonces, si la computadora se llama "Jon's Mac", el nombre de host que usará será algo así como "jons-mac.local".

$ ssh jons-mac.local

Si aún no conoce los nombres de host de sus computadoras, puede encontrar los nombres de host de una computadora en las preferencias de uso compartido en esa computadora, o puede encontrar los nombres de host de otras computadoras en la red utilizando el comando dns-sd. Este comando usa Bonjour para permitirle navegar por los servicios de red; solo encontrará computadoras que realmente estén anunciando algún servicio de red (que, en general, son las únicas que le interesan).

Si desea conectarse a alguna computadora que proporcione ssh, puede encontrar las computadoras disponibles usando:

dns-sd -B _ssh._tcp .

En general, puede buscar hosts que brinden servicios particulares utilizando los nombres de servicio: http://www.dns-sd.org/ServiceTypes.html

El protocolo Bonjour también proporciona la capacidad de buscar todos los servicios, no solo algunos. Puede hacer esto buscando el servicio especial_services._dns-sd._udp

dns-sd -B _services._dns-sd._udp .

La pregunta es acerca de cómo encontrar otras computadoras en la red desde la línea de comandos, pero también puede explorar los servicios anunciados por dns-sd en la GUI. Por ejemplo, Terminal.app> Nueva conexión remota ... muestra una ventana que muestra los servicios anunciados ssh, sftp, ftp y telnet.

bames53
fuente
¿Qué tan rápido puede esperar dns-sd -B _ssh._tcp .que se ejecute este comando ?
AJP
1
@AJP Si se anuncian servicios ssh, debería comenzar a devolver resultados de inmediato. Pero si por 'terminar' te refieres a salir, no sale; el comando ejecuta una consulta de larga duración y genera cambios continuamente a medida que los servicios aparecen y desaparecen de la red hasta que lo elimine.
bames53
7

Puede intentar usar dns-sdpara realizar consultas Bonjour en la LAN.

Ignacio Vazquez-Abrams
fuente
3
Me encanta que esta respuesta sea específica de OS X y se enganche en bonjour para evitar obtener detalles de red adicionales que no me interesarían (en el contexto de esta pregunta). El comando específico que funcionó para mis necesidades fue:dns-sd -B _ssh._tcp .
stevenhaddox
6

Tal vez sea un poco exagerado, pero podrías usar nmap

Wagnarock
fuente
1
Si bien esto puede responder la pregunta, sería una mejor respuesta si pudiera proporcionar alguna explicación de por qué lo hace.
DavidPostill
4

Una línea rápida de CLI one para recorrer / 24 subred haciendo ping a cada dirección IP. Rápido y un poco sucio, pero funciona.

for (( x=1; x <= 254; x++ )); do ping -c 3 192.168.0.$x; done

Explicación: Para cambiar el rango, cambie x = 1 a x = 130, o lo que sea que desee comenzar, y 254 al final, digamos 135.

for (( x=130; x <= 135; x++ ));

ping -c 3 es enviar tres pings. Para cambiar el número de pings, cambie el 3 a otra cosa, y para cambiar el rango de direcciones, cambie 192.168.0 a otra cosa.

do ping -c 30 10.10.0.$x;
quinnr
fuente
1
simplemente podría utilizar fping para hacer esto:fping -ag 172.16.0.0/16
ıɾuǝʞ
Esto es todo menos rápido, para mí ...
Max Williams
Es una solución rápida y sucia. Como en, es rápido de implementar en ausencia de las herramientas correctas como nmap, y no es tan eficaz como las herramientas correctas, como nmap. Los hosts de ping pueden tardar un tiempo cuando no responden, y dado que esto no es multiproceso, tomará un tiempo cuando un host no responda. En el lado positivo, no requiere nada más que bash.
Quinnr
2

Si conoce el nombre de las otras computadoras en la LAN, la forma más simple es hacer ping a ellas:

$ ping foobar

Pinging foobar.lan [192.168.0.25] with 32 bytes of data:

Reply from 192.168.0.25: bytes=32 time<1ms TTL=64
Reply from 192.168.0.25: bytes=32 time<1ms TTL=64

Esto puede depender de su enrutador local o servidor DHCP. Si el nombre de host simple no funciona, intente agregar .local (es decir, hacer ping a hostname.local ).

Obviamente, esto no funciona bien para LAN grandes o personas con malos recuerdos.

quijote curandero
fuente
1

Si está utilizando Macs (suponiendo 10.5 o superior), simplemente habilite VNC para el acceso al escritorio y use Flame.app.

http://husk.org/apps/flame/

Es una pequeña utilidad realmente agradable que te brinda exactamente lo que necesitas, muy rápido. Lo único es que tendrías que ir más allá de SSH.

tylerm
fuente
1

Para ventanas:

1) Escribir: para / L% I en (1,1,254) DO ping -w 30 -n 1 168.29.0.% I Esto hará ping a todas las direcciones en su red local

2) Luego escribe: arp -a Esto te dará todas las direcciones que respondieron

Chavdar
fuente
Por supuesto, depende de su dirección de red local. En mi caso es 168.29.0.xxx. El tuyo podría ser algo así como 192.168.0.xxx
Chavdar
1
Su respuesta se basa en Windows, mientras que el OP declaró que está usando una Mac. ¿Puede editar su pregunta para tener esto en cuenta o indicar si su solución funcionaría en una Mac?
Matthew Williams
Cada usuario de MAC tiene un sistema operativo Windows sentado ... No puede vivir sin él ...: D
user2173353