W5100: MAC-Adresse von Geräten im Netzwerk abrufen? [geschlossen]

Ich verwende ein einzelnes Arduino Ethernet Shield mit einem Wiznet W5100-Chip , um ein Netzwerk nach allen Geräten zu durchsuchen. ( Finden Sie den Quellcode des Projekts auf Github ).

Alle Geräte befinden sich im selben Ethernet-Segment. Sie werden an einen Standard-Consumer-Router angeschlossen. Allen wurden IP-Adressen im Bereich von 10.0.1.0 bis 10.0.1.20 zugewiesen. Ziel ist es, Geräte im selben Netzwerk zu identifizieren, auch wenn sich die IP geändert hat, und zu protokollieren, wenn ein Gerät online ist.

Ich habe wochenlang zu diesem Problem recherchiert und im Internet nichts Brauchbares gefunden. Dies ist das einzige Stück Code, das ich bisher gefunden habe: http://mbed.org/users/va009039/code/w5200NetIf/file/a8df39b4f3aa/MyNetUdpSocket.cpp , Zeile 124, W5100.readSnDHAR(_socket, mac)aber es funktioniert nicht.

Ist es überhaupt möglich, eine MAC-Adresse für ein gefundenes Gerät (IP ist dann bekannt) im selben Netzwerk zu erhalten?

Haben Sie an Broadcast-Pakete gedacht? Ob das funktioniert, hängt ein wenig von der Netzwerktopologie ab. Aber jedes Gerät könnte einfach regelmäßig ein Paket mit seiner MAC-Adresse senden und jeder Knoten könnte eine Tabelle mit MAC- und IP-Adresse erstellen.
Wie kann ich Geräte auffordern, ihre MAC-Adresse zu senden?
Eigentlich hätte ich es falsch verstanden, ich dachte, jeder Knoten wäre ein Arduino + W5100, damit Ihr Code ihn aus dem Modul abrufen und an andere Knoten senden könnte. Aber das funktioniert nicht, wenn die anderen Geräte nicht Dinge sind, die Sie selbst programmieren können.
@PeterJ, danke für die Antwort, ich habe die Beschreibung aktualisiert.
Welche Art von Netzwerk? Die MAC-Adresse ist ethernetspezifisch, befinden sich alle Knoten im selben Ethernet-Segment?
@WoutervanOoijen Alle Geräte befinden sich im selben Ethernet-Segment. Sie werden an einen Standard-Consumer-Router angeschlossen. Allen wurden IP-Adressen im Bereich von 10.0.1.0 bis 10.0.1.20 zugewiesen. Ziel ist es, zu protokollieren, wann ein Gerät online ist.
Wenn Sie die CPU-Zeit haben, können Sie alle Ethernet-Nachrichten überprüfen, ihre Quell-MACs sammeln und ein Gerät als vorhanden deklarieren, wenn es in den letzten X Sekunden aktiv war.
Es ist wirklich unklar, was Sie fragen. Sie lesen das richtige Register, aber möglicherweise befindet sich der W5100 zum Zeitpunkt des Lesens nicht im richtigen Zustand. Sie müssen uns Ihren Quellcode zeigen und ihn bitte auf das kleinste Beispiel reduzieren, das das Problem demonstriert. Verwenden Sie beispielsweise den Modus "MAC raw"? Siehe Seite 57 des Datenblatts .
OK, ich habe endlich den relevanten Code in Ihrem Github-Projekt gefunden. Haben Sie versucht, Blake Foster danach zu fragen, da es sein Code ist, den Sie hacken?
Von einer Befehlszeile aus würde es so funktionieren, arp HP5180.localdass HP5180.local mein Drucker ist, aber jede IP-Adresse im Netzwerk sein kann. Address HWtype HWaddress Flags Mask Ifacegefolgt von HP5180.local ether 02:0f:b5:52:73:65 C eth0. Sie müssen also das ARP -Protokoll verwenden.
@DaveTweed danke für deine Vorschläge und deine Recherche. Ich habe Blake Foster noch nicht gefragt.
Ich habe eine Lösung gefunden: github.com/powtac/Autarc_LAN_User_Stats/blob/master/… siehe Funktion "pingDevice"

Antworten (1)

Hier sind einige Hinweise:

  1. SSDP
  2. UPnP
  3. Fing oder gleichwertiges Werkzeug.

Außerdem hat Lantronix ein Protokoll zur Erkennung ihrer eingebetteten Geräte, vielleicht möchten Sie dort nachsehen.

Diese Antwort wäre viel nützlicher, wenn Sie einen Text hinzufügen würden, der erklärt, warum jeder dieser Links für die Frage relevant ist. Denken Sie daran, dass die Frage spezifisch für den W5100 ist.
Genau die Funktionalität, die Fing bietet, möchte ich „kopieren“!