Tengo una tarjeta NIC en una máquina Debian en alguna parte. La máquina está apagada, pero necesito saber si la tarjeta NIC está encendida para poder enviar un paquete mágico de activación en lan más tarde (desde otra máquina Debian) para activarla. Tengo la dirección MAC de la tarjeta. ¿Hay alguna forma de que pueda hacer ping a la tarjeta Ethernet mediante MAC para ver si está encendida?
Intenté crear una entrada ARP:
arp -s 192.168.2.2 00-0c-0d-ef-02-03 ping 192.168.2.2
Eso no funcionó, ya que la tarjeta NIC no tiene esta dirección IP. Por lo tanto, la tarjeta NIC recibiría la solicitud de ping pero no respondería. ¿Hay alguna forma de evitar esto?
I estoy usando el paquete etherwake para enviar un mensaje wake-on-lan.
Responder
Es posible que tenga más suerte con la herramienta arping
en su lugar. La herramienta ping
funciona en el nivel de capa 3 del modelo OSI , mientras que arping
funciona en la capa 2.
Sin embargo, con esta herramienta, aún necesita conocer la IP del sistema. Hay 2 versiones de Ésta, la estándar incluida con la mayoría de Unixes (Alexey Kuznetsov «s) es la versión que solo puede manejar direcciones IP. La otra versión (Thomas Habets «) supuestamente puede realizar consultas utilizando direcciones MAC.
$ sudo arping 192.168.1.1 -c 1 ARPING 192.168.1.1 from 192.168.1.218 eth0 Unicast reply from 192.168.1.1 [00:90:7F:85:BE:9A] 1.216ms Sent 1 probes (1 broadcast(s)) Received 1 response(s)
arping
funciona de manera similar a ping
excepto que en lugar de enviar paquetes ICMP, envía paquetes ARP.
Obtener un sistema » s IP usando solo la MAC
Aquí hay un par de métodos para realizar la búsqueda inversa de MAC a IP.
-
nmap
$ nmap -sP 192.168.1.0/24
Luego busque en su caché arp la máquina correspondiente
arp -an
. -
fping
$ fping -a -g 192.168.1.0/24 -c 1
Luego busque en su caché arp, igual que arriba.
-
ping
$ ping -b -c1 192.168.1.255
Luego busque en su caché arp, igual que arriba.
-
nbtscan (solo hosts de Windows)
$ nbtscan 192.168.1.0/24 Doing NBT name scan for addresses from 192.168.1.0/24 IP address NetBIOS Name Server User MAC address ------------------------------------------------------------------------------ 192.168.1.0 Sendto failed: Permission denied 192.168.1.4 MACH1 <server> <unknown> 00-0b-12-60-21-dd 192.168.1.5 MACH2 <server> <unknown> 00-1b-a0-3d-e7-be 192.168.1.6 MACH3 <server> <unknown> 00-21-9b-12-b6-a7
Comentarios
Responder
No puede hacer ping a una NIC normal porque la NIC por sí sola no envía ninguna respuesta.
Solo una computadora en ejecución puede enviar respuestas
Las tarjetas de interfaz de red normales no envían respuestas por sí mismas. Siempre necesitan un software en ejecución en la computadora para hacerlo.
Cuando la CPU de la computadora está apagada, no hay ningún software en ejecución que envíe una respuesta a un ping.
Wake-on-LAN es unidireccional
Wake-on-LAN permite que la computadora permita que solo la NIC se encienda parcialmente para recibir Tramas de Ethernet y busque la secuencia mágica de activación en ellas, pero la NIC aún no enviará ninguna respuesta. Wake-on-LAN es estrictamente unidireccional. No se han enviado respuestas.
Excepciones
Hay ciertas NIC especiales que pueden enviar respuestas por sí mismas como, por ejemplo, las que implementan una TCP handshake offload .
Comentarios
- +1: esta es la única respuesta que realmente aborda el OP ‘ s pregunta. » Wake-on-LAN es unidireccional «.
Respuesta
El comando ether-wake
funcionará con la dirección mac, así que seguramente (a) no necesitará una dirección IP y (b) puede enviar el comando sin dañarlo (si ya está activo, ¿despertarlo no tendrá ningún impacto?)
Puede ver la lista de su caché arp existente usando arp -an
y grepping para que su MAC obtenga la IP del host de destino. Sin embargo, debido a que arp es un caché, es posible que se haya agotado el tiempo de espera del caché (y aún esté «activo»). Luego, puede que tenga que usar un método de fuerza bruta para encontrar su IP, como:
sudo nmap -sP 192.168.2.0/24 | less
(y luego busque 00: 0c: 0d: ef: 02: 03) – ¡los firewalls proporcionados y otras cosas similares no se interponen en el camino!
Comentarios
- Yo no ‘ No quiero reactivar la máquina ahora mismo. Pero quiero asegurarme de que la NIC pueda recibir mis mensajes para que cuando salga del sitio y enciendo la máquina a través de un paquete WOL, sepa que se encenderá. Esa ‘ es la razón por la que quiero hacer ping por IP o MAC y no despertarlo.
- Las máquinas durmientes no responderán al ping. Si la máquina está encendida y hace ping por IP (y el host responde), colocará una entrada en el caché arp. Si la entrada allí coincide con la dirección MAC del host, existe una posibilidad razonable de que funcione (dejando al descubierto otros firewalls de red, enrutadores y otros problemas físicos que pueden hacer que
ether-wake
no alcanzalo). De hecho, obtendría acceso a otro host en el sitio, pondría la máquina de destino en suspensión e intentaríaether-wake
. Por la naturaleza de cómo funciona WOL, la solicitud tendrá que enviarse en la misma subred que el host de todos modos - @DravSloan el Proxy Bonjour disponible en p. Ej. Apples Time Capsule es una forma bastante ingeniosa de manejar este problema. La máquina está inactiva, pero el enrutador responde y solo la activa cuando el proxy ‘ ya no puede manejarla.
- No ‘ t confíe en WOL sin haberlo probado primero. Prefiero obtener una tarjeta IPMI en ese caso.
Responder
Mi aplicación era un servidor RSYNC que ingresaba a una estación de trabajo para obtener el directorio de documentos de la estación de trabajo … pero la estación de trabajo no tenía una dirección IP garantizada, pero tenía una dirección MAC conocida (la dirección IP fue realizada por DHCP). Este código usa ping ÚNICAMENTE.
export COUNTER=1 while [ $COUNTER -lt 255 ] do #ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" & # activate all 254 addresses in the subnet.. dont really need to grep the ping output ping 192.168.0.$COUNTER -c 1 -w 4 2> /dev/null | grep -B 1 " 0\% packet loss" > /dev/null & COUNTER=$(( $COUNTER + 1 )) done # wait till 254 background processes finished wait # the arp cache will automatically flush it"s incomplete entries in about 10 minutes... #echo "finished" # #SRC_SERVER_IP="192.168.0.160:873" SRC_SERVER_IP=$(arp -a | grep "00:22:4d:81:8f:76" | awk "{print $2}" | sed "s/[()]//g")":873" if [ $SRC_SERVER_IP == ":873" ] ; then echo "ws1.example.com is not on the network... exiting..." exit 0 fi
Responder
Aquí hay una secuencia de comandos simple para hacer ping a través de la dirección Mac. Simplemente guarde y ejecute, por ejemplo,
macping aa:bb:cc:dd:ee:ff
También puede conectar en cadena el resultado para hacer otras cosas condicionalmente, por ejemplo:
macping aa:bb:cc:dd:ee:ff && echo do something if online || echo do something if offline
–
#!/bin/bash network=192.168.1.1/24 if [ "$#" -ne 1 ]; then echo Usage example: $0 aa:bb:cc:dd:ee:ff; exit 2; fi; nmap -sP $network >& /dev/null ip=$(arp -n | grep $1 | awk " { print $1 }") ping $ip -n -q -c 2 -i 0.2 -w 1 >& /dev/null if [ $? -eq 0 ]; then echo Device is online \($ip\) else echo Device is offline exit 1 fi;
Responder
Esto no se basa en diferencias versiones de arping ni en scripts bash complejos:
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk " { printf $1 } ")
He usado arp-scan en lugar de arp, ya que parece ejecutarse mucho más rápido.
arping
puede tomar una dirección MAC como parámetro:arping -c 5 38:e7:d8:63:5e:a6
arping
a una dirección MAC: Sí, hay dos implementaciones de arping 1. desde Linux iputils 2. arpeado de Thomas Habets . — Solo la implementación 2. puede hacer ping a una dirección MAC, pero tal ping es muy complicado: la máquina a la que se le ha hecho ping todavía tiene que tener TCP / IP configurado (al menos una dirección IP) y capaz de responder a un ping a una dirección IP de transmisión.