W5100: ¿obtener la dirección MAC de los dispositivos en la red? [cerrado]

Estoy usando un solo Arduino Ethernet Shield con un chip Wiznet W5100 para escanear una red para todos los dispositivos. ( Encuentre el código fuente del proyecto en Github ).

Todos los dispositivos están en el mismo segmento Ethernet. Están conectados a un enrutador de consumo estándar. Todos fueron asignados a direcciones IP en un rango de 10.0.1.0 - 10.0.1.20. El objetivo es identificar los dispositivos en la misma red, incluso si la IP ha cambiado y el protocolo cuando un dispositivo está en línea.

Estuve investigando sobre este problema durante semanas y no he encontrado nada útil en Internet. Esta es la única pieza de código que he encontrado hasta ahora: http://mbed.org/users/va009039/code/w5200NetIf/file/a8df39b4f3aa/MyNetUdpSocket.cpp , línea 124 W5100.readSnDHAR(_socket, mac)pero no funciona.

¿Es posible obtener una dirección MAC para un dispositivo encontrado (entonces se conoce la IP) en la misma red?

¿Has pensado en los paquetes de difusión? Si eso funcionará depende bastante de la topología de la red. Pero cada dispositivo podría enviar periódicamente un paquete con su dirección MAC y cada nodo podría construir una tabla de MAC versus dirección IP.
¿Cómo puedo pedir a los dispositivos que envíen su dirección MAC?
En realidad, podría haber entendido mal, estaba pensando que cada nodo sería un Arduino + W5100 para que su código pudiera recuperarlo del módulo y transmitirlo a otros nodos. Pero eso no funcionará si los otros dispositivos no son cosas que puedas programar tú mismo.
@PeterJ, gracias por responder, actualicé la descripción.
¿Qué tipo de red? La dirección MAC es específica de Ethernet, ¿están todos los nodos en el mismo segmento de Ethernet?
@WoutervanOoijen todos los dispositivos están en el mismo segmento de Ethernet. Están conectados a un enrutador de consumo estándar. Todos fueron asignados a direcciones IP en un rango de 10.0.1.0 - 10.0.1.20. El objetivo es protocolizar cuando un dispositivo está en línea.
Si tiene el tiempo de la CPU, puede verificar todos los mensajes de Ethernet, recopilar sus MAC de origen y declarar un dispositivo presente si tuvo alguna actividad en los últimos X segundos.
Realmente no está claro lo que estás preguntando. Está leyendo el registro correcto, pero es posible que no tenga el W5100 en el estado correcto en el momento en que lo está leyendo. Tendrá que mostrarnos su código fuente y, por favor, redúzcalo al ejemplo más pequeño que demuestre el problema. Por ejemplo, ¿está utilizando el modo "MAC raw"? Consulte la página 57 de la hoja de datos .
Bien, finalmente encontré el código relevante en tu proyecto de Github. ¿Has intentado preguntarle a Blake Foster sobre esto, ya que es su código el que estás pirateando?
desde una línea de comando, funcionaría como arp HP5180.localsi HP5180.local es mi impresora, pero puede ser cualquier dirección IP en la red. Address HWtype HWaddress Flags Mask Ifaceseguido de HP5180.local ether 02:0f:b5:52:73:65 C eth0. Entonces lo que tienes que hacer es usar el protocolo ARP .
@DaveTweed gracias por sus sugerencias y su investigación. Todavía no le he preguntado a Blake Foster.
Encontré una solución: github.com/powtac/Autarc_LAN_User_Stats/blob/master/… ver función "pingDevice"

Respuestas (1)

Aquí hay algunos consejos:

  1. SSDP
  2. UPnP
  3. Fing o herramienta equivalente.

Además, Lantronix tiene un protocolo para descubrir sus dispositivos integrados, es posible que desee buscar allí.

Esta respuesta sería mucho más útil si agregara un texto que explicara por qué cada uno de estos enlaces es relevante para la pregunta. Tenga en cuenta que la pregunta es específica para el W5100.
¡Exactamente la funcionalidad que ofrece Fing, quiero "copiar"!