¿Se puede hacer ping a una NIC por MAC

28

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 Wake-on-Lan más tarde (desde otra máquina Debian) para activarlo. Tengo la dirección MAC de la tarjeta. ¿Hay alguna forma de hacer ping a la tarjeta ethernet por 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?

Estoy usando el paquete etherwake para enviar un mensaje de activación.

Alastor Moody
fuente

Respuestas:

23

Es posible que tengas mejor suerte usando la herramienta arping. La herramienta pingfunciona en el nivel de capa 3 del modelo OSI , mientras que arpingfunciona en la capa 2.

Sin embargo, aún necesita conocer la IP del sistema con esta herramienta. Hay 2 versiones, la estándar que se incluye con la mayoría de los Unixes (Alexey Kuznetsov) es la versión que solo puede manejar direcciones IP. La otra versión (Thomas Habets) supuestamente puede consultar 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)

arpingfunciona de manera similar, pingexcepto que en lugar de enviar paquetes ICMP, envía paquetes ARP.

Obtener la IP de un sistema usando solo el MAC

Aquí hay un par de métodos para realizar la búsqueda inversa de MAC a IP.

  1. nmap

    $ nmap -sP 192.168.1.0/24
    

    Luego busque en su caché de arp la máquina correspondiente arp -an.

  2. fping

    $ fping -a -g 192.168.1.0/24 -c 1
    

    Luego mira en tu caché de arp, igual que arriba.

  3. silbido

    $ ping -b -c1 192.168.1.255
    

    Luego mira en tu caché de arp, igual que arriba.

  4. 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
    
slm
fuente
3
arpingpuede tomar una dirección MAC como parámetro:arping -c 5 38:e7:d8:63:5e:a6
@MichaelMrozek: lo hice después de que alguien básicamente hubiera publicado mi respuesta como un comentario y no hubiera leído lo que dije sobre 2 versiones de arping. La otra respuesta parece haber sido eliminada, así que gracias por eliminar mis audaces frustraciones.
slm
Gracias por la ayuda. Marcar esto como resuelto. No pudimos encontrar una opción WOL en la configuración del BIOS. Esta es mi suposición: el BIOS no tenía WOL activado, pero la NIC sí. Entonces, la NIC se estaba despertando en el primer paquete WOL y estaba enviando un mensaje al BIOS. Pero como no estaba activado en el BIOS, el BIOS no hizo nada. A partir de este momento, la NIC respondió al ping ya que estaba despierto, pero la máquina no. Pregunta tan rápida: ¿Es posible que el BIOS tenga WOL apagado y que la NIC lo tenga encendido al mismo tiempo?
Alastor Moody
1
@AlastorMoody: diría que probablemente se le permita apagar BIOS WOL con WOL de NIC activado. Sin embargo, si su BIOS no es compatible con WOL, entonces no creo que pueda utilizarlo incluso si la NIC lo hace. Vea el artículo de Wikipedia en WOL: en.wikipedia.org/wiki/Wake-on-LAN . Dice lo mismo que yo en la sección "solución de problemas de paquetes mágicos".
slm
@niervol: arpinga una dirección MAC: Sí, hay dos implementaciones de arping 1. desde Linux iputils 2. arping por Thomas Habets . --- Solo la implementación 2. puede hacer ping a una dirección MAC, pero dicho ping es muy complicado: la máquina pinchada todavía tiene que tener configurado TCP / IP (al menos una dirección IP) y debe poder responder a un ping para Una dirección IP de difusión.
pabouk
12

No puede hacer ping a una NIC normal porque la NIC sola no envía ninguna respuesta.

Solo una computadora en funcionamiento 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 se apaga, no hay ningún software en ejecución que envíe una respuesta a un ping.

Wake-on-LAN es unidireccional

Activación de la 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 hay respuestas enviadas.

Excepciones

Hay ciertas NIC especiales que podrían enviar respuestas por sí mismas, como por ejemplo las que implementan una descarga completa de protocolo de enlace TCP .

pabouk
fuente
1
+1: esta es la única respuesta que realmente aborda la pregunta del OP. "Wake-on-LAN es unidireccional".
Celada
5

El ether-wakecomando funcionará por dirección mac, por lo que seguramente (a) no necesitará una dirección IP y (b) podrá enviar el comando sin daños (si ya está despierto, ¿despertar no tendrá ningún impacto?)

Puede ver la lista de su caché de arp existente utilizando arp -any 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 así esté "despierto"). 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!

Drav Sloan
fuente
No quiero despertar la máquina ahora mismo. Pero quiero asegurarme de que la NIC pueda recibir mis mensajes para que cuando salga del sitio y encienda la máquina a través de un paquete WOL, sé que se va a encender. Es por eso que quiero hacer ping por IP o MAC y no despertarlo.
Alastor Moody
2
Las máquinas para dormir no responderán al ping. Si la máquina está encendida y usted hace ping por IP (y el host responde), colocará una entrada en la caché de arp. Si la entrada allí coincide con la dirección MAC del host, existe una posibilidad razonable de que funcione (excluyendo otros firewalls de red, enrutadores y otros problemas físicos que pueden hacer que ether-wakeno llegue a él). De hecho, obtendría acceso a otro host en el sitio, pondría la máquina de destino en reposo e intentaría ether-wake. Por la naturaleza de cómo funciona WOL, la solicitud deberá enviarse a la misma subred que el host de todos modos
Drav Sloan,
2
@DravSloan, el proxy Bonjour disponible en, por ejemplo, Apples Time Capsule, es una forma bastante ingeniosa de manejar este problema. La máquina duerme pero el enrutador responde y solo la activa cuando el proxy ya no puede manejarla.
Thorbjørn Ravn Andersen
No confíe en WOL sin haberlo probado primero. En su lugar, obtenga una tarjeta IPMI.
sjas
0

Mi aplicación era un servidor RSYNCing en 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 SOLAMENTE.

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
Don matheson
fuente
0

Aquí hay un script 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;
Mtl Dev
fuente
0

Esto no se basa en versiones diferentes de arping ni en scripts de 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 correr mucho más rápido.

Julian Knight
fuente