Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   MAC-Adresse eine Gegenseite auslesen (https://www.delphipraxis.net/193993-mac-adresse-eine-gegenseite-auslesen.html)

Codehunter 4. Okt 2017 08:56

MAC-Adresse eine Gegenseite auslesen
 
Hallo!

Ich suche eine elegante Möglichkeit, mit einem Delphi-Programm die MAC-Adresse eines Gerätes zu ermitteln, welches per LAN-Crossover-Kabel (also ohne Switch, Router o.ä. dazwischen) mit der Netzwerkkarte des Rechners verbunden ist, auf dem das Delphi-Programm läuft. Dabei geht es um Identifikation im Prüffeld, also der Reihe nach eine größere Stückzahl an Geräten anschließen, MAC auslesen und Etikett mit kodierter MAC-Adresse ausdrucken. Es handelt sich dabei um ganz unterschiedliche Embedded-Geräte mit ganz unterschiedlichen Betriebssystemen. Der Prüfrechner befindet sich auch nicht auf Umwegen in einem größeren Netzwerk, sodass man sich auf Protokollebene "austoben" könnte ohne in einem Netzwerk "Konfusionismus" auszulösen ;-)

Allerdings bin ich in den Low-Level-Netzwerkprotokollen nicht so fit und wollte mir mal ein paar Ideen holen. Zuerst dachte ich an einen DHCP-Server, doch es ist nicht garantiert, dass die zu prüfenden Geräte immer als DHCP-Client konfiguriert sind. Daher denke ich mir müsste man den Prüfling mit einer Art Anfrage-Paket "anstupsen", welches immer beantwortet wird. Dann hätte man auch die MAC-Adresse der Gegenseite. Vielleicht gibt es ja auf UDP-Ebene etwas das man dafür nutzen könnte.

Nur um vorab eines klar zu stellen: Es geht hierbei nicht um sinnvolle Kommunikation mit dem Prüfling sondern ausschließlich um die Ermittlung der MAC-Adresse zum Zwecke des Labellings.

Grüße
Cody

Klaus01 4. Okt 2017 09:15

AW: MAC-Adresse eine Gegenseite auslesen
 
Guten Morgen,
geht das (http://en.pudn.com/downloads115/sour...482568_en.html) in die richtige Richtung?
Ansonsten könnte noch der arp (arp.exe) cache ausgelesen werden.


Grüße
Klaus

Der schöne Günther 4. Okt 2017 09:26

AW: MAC-Adresse eine Gegenseite auslesen
 
Der Arp-Cache wird ja auch nur gefüllt wenn überhaupt per IP kommuniziert wurde, oder?

Es geht ja eher darum ob man auf Ethernet-Schickt irgendetwas in den Raum werfen kann ("Broadcast") und definitiv eine Antwort bekommt.

generic 4. Okt 2017 09:28

AW: MAC-Adresse eine Gegenseite auslesen
 
Du bewegst dich unterhalb von IP daher fallen UDP und TCP aus.
Du brauchst auf jeden Fall ein Paket von der Gegenseite, ohne das sieht das nicht gut aus.

Ich dachte als erstes an WinPcap und dein Programm fängt alles auf was kommt.
Dann wertest du das MAC-Frame/Ethernet-Frame aus.

Codehunter 4. Okt 2017 09:31

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von Klaus01 (Beitrag 1382543)
geht das (http://en.pudn.com/downloads115/sour...482568_en.html) in die richtige Richtung?
Ansonsten könnte noch der arp (arp.exe) cache ausgelesen werden.

Hmm Jain :-) Die obere Lösung setzt auf ICMP und das wiederum setzt auf IPv4 auf. Allerdings ist nicht gesagt, dass auf dem jeweiligen Prüfling ein funktionsfähiger IP-Stack nebst passender IPv4-Adresse vorhanden ist. Der Prüfling ist i.d.R. eine Blackbox, von der man nicht mal weiß ob es da eine IPv4-Adresse gibt und falls doch, in welcher Subnetzmaske die liegt.

ARP geht da schon eher in die richtige Richtung. Denn das liegt nach dem berüchtigten OSI-Schichtenmodell unterhalb von IPv4. Allerdings dient ARP ja auch wieder der IPv4-Adressauflösung. Ich müsste also noch etwas tiefer ansetzen. Vor meinem geistigen Auge werfe ich ein Broadcast-Paket in das gedachte Netzwerk (an dem im vorliegenden Fall nur zwei Teilnehmer angeschlossen sind) und die Gegenstelle antwortet mit einem Paket. Das kann ganz primitiv und völlig losgelöst von IPv4 sein, solange ich das Antwortpaket in mein Delphi-Programm bekomme und darin die MAC-Adresse des Prüflings enthalten ist.

Der schöne Günther 4. Okt 2017 09:40

AW: MAC-Adresse eine Gegenseite auslesen
 
Irgendwie ist es vielleicht ganz gut dass man auf Schicht 2 ein Gerät nicht zum Antworten "zwingen" kann, oder? Sollte nicht eigentlich auf allen Bauteilen mit RJ45-Buchse immer die MAC-Adresse in der Nähe aufgedruckt sein?

Codehunter 4. Okt 2017 09:47

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1382548)
Sollte nicht eigentlich auf allen Bauteilen mit RJ45-Buchse immer die MAC-Adresse in der Nähe aufgedruckt sein?

Das stimmt schon. Man muss es nur aus der praktischen Perspektive sehen: Wenn man am Stück 100 oder mehr Prüflinge etikettieren soll und dabei manuell lauter winzig kleine Aufdrucke ablesen soll, passieren zwangsläufig irgendwann Fehler. Daher der Gedanke einer Automation.

Im Fall von ARP könnte ich ja theoretisch auch ~ 4,2 Milliarden Gratuitous-Pakete in das betreffende Netz "werfen". Eins für jede denkbare IPv4-Adresse. Quasi eine Art "Brute Force MAC Recognition". Allerdings weiß ich A) nicht wie lange das in der Praxis dauern würde und B) ob der Prüfling nicht evtl. irgendwann - aus Sicherheitsgründen - zu macht.

Wie gesagt, mir fehlen auf dieser Low-Level-Ebene die Erfahrungen.

Klaus01 4. Okt 2017 10:05

AW: MAC-Adresse eine Gegenseite auslesen
 
.. wenn die Prüfgeräte im Netwerk stecken - dann haben sie doch einen IP-Stack.
Die Prüfgeräte im eigenen Subnetz können dann doch mit einem icmp-broadcast detektiert werden.
Die Mac-Adressen sind dann im arp-cache zu finden (arp -a).
Allerdings auch die Mac-Adressen anderer IP-Geräte im Subnetz.

Grüße
Klaus

Codehunter 4. Okt 2017 10:16

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von Klaus01 (Beitrag 1382551)
.. wenn die Prüfgeräte im Netwerk stecken - dann haben sie doch einen IP-Stack.
Die Prüfgeräte im eigenen Subnetz können dann doch mit einem icmp-broadcast detektiert werden.
Die Mac-Adressen sind dann im arp-cache zu finden (arp -a).
Allerdings auch die Mac-Adressen anderer IP-Geräte im Subnetz.

Bitte den GANZEN Thread lesen, nicht nur die letzten Posts. Danke :-)

Luckie 4. Okt 2017 14:59

AW: MAC-Adresse eine Gegenseite auslesen
 
Wie wäre eine Server-Client Lösung? Der Server fragt nach der Mac Adresse und der Client antwortet mit der Mac Adresse. Der einzige Nachteil ist natürlich, dass zusätzlich ein Programm auf den Clients eingerichtet werden muss. Aber wenn man die Rechner aufsetzt kann man das ja auch noch schnell machen. Bei einer entsprechenden Anzahl von Rechnern fällt das dann nicht mehr ins Gewicht.

Aviator 4. Okt 2017 15:13

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von Luckie (Beitrag 1382580)
Wie wäre eine Server-Client Lösung? Der Server fragt nach der Mac Adresse und der Client antwortet mit der Mac Adresse. Der einzige Nachteil ist natürlich, dass zusätzlich ein Programm auf den Clients eingerichtet werden muss. Aber wenn man die Rechner aufsetzt kann man das ja auch noch schnell machen. Bei einer entsprechenden Anzahl von Rechnern fällt das dann nicht mehr ins Gewicht.

Zitat:

Zitat von Codehunter (Beitrag 1382547)
Hmm Jain :-) Die obere Lösung setzt auf ICMP und das wiederum setzt auf IPv4 auf. Allerdings ist nicht gesagt, dass auf dem jeweiligen Prüfling ein funktionsfähiger IP-Stack nebst passender IPv4-Adresse vorhanden ist. Der Prüfling ist i.d.R. eine Blackbox, von der man nicht mal weiß ob es da eine IPv4-Adresse gibt und falls doch, in welcher Subnetzmaske die liegt.

Hervorhebung von mir. :thumb:

Da wird es dann denke ich schwierig eine Software zu installieren.

Luckie 4. Okt 2017 15:48

AW: MAC-Adresse eine Gegenseite auslesen
 
Oh. OK. Überlesen. Dann geht das natürlich nicht.

Alter Mann 5. Okt 2017 08:29

AW: MAC-Adresse eine Gegenseite auslesen
 
Klassisches Verfahren : BOOTTP

stifflersmom 5. Okt 2017 08:43

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von Alter Mann (Beitrag 1382611)
Klassisches Verfahren : BOOTTP

ich glaube du meinst BootP

https://de.wikipedia.org/wiki/Bootstrap_Protocol

das hört sich auch vielversprechend an:
Zitat:

Mit dem boot request sendet der Client einige Informationen über sich: Das wichtigste ist die eigene Hardware-Adresse der Netzwerkkarte (MAC-Adresse). Dies ist das einzige Erkennungsmerkmal der Station. Der Client generiert außerdem eine 4 Byte lange Zufallszahl, die im boot reply wieder auftauchen muss. Weiterhin ist ein Timer vorgesehen, der zählt, wie lange der Client schon auf sein boot reply wartet.

Codehunter 5. Okt 2017 11:43

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von Luckie (Beitrag 1382580)
Wie wäre eine Server-Client Lösung? Der Server fragt nach der Mac Adresse und der Client antwortet mit der Mac Adresse. Der einzige Nachteil ist natürlich, dass zusätzlich ein Programm auf den Clients eingerichtet werden muss. Aber wenn man die Rechner aufsetzt kann man das ja auch noch schnell machen. Bei einer entsprechenden Anzahl von Rechnern fällt das dann nicht mehr ins Gewicht.

Siehe mein eröffnendes Post:

Zitat:

Zitat von Codehunter (Beitrag 1382542)
Ich suche eine elegante Möglichkeit, mit einem Delphi-Programm die MAC-Adresse eines Gerätes zu ermitteln, welches per LAN-Crossover-Kabel (also ohne Switch, Router o.ä. dazwischen) mit der Netzwerkkarte des Rechners verbunden ist, auf dem das Delphi-Programm läuft. Dabei geht es um Identifikation im Prüffeld, also der Reihe nach eine größere Stückzahl an Geräten anschließen, MAC auslesen und Etikett mit kodierter MAC-Adresse ausdrucken. Es handelt sich dabei um ganz unterschiedliche Embedded-Geräte mit ganz unterschiedlichen Betriebssystemen. Der Prüfrechner befindet sich auch nicht auf Umwegen in einem größeren Netzwerk, sodass man sich auf Protokollebene "austoben" könnte ohne in einem Netzwerk "Konfusionismus" auszulösen ;-)

Ich meine das durchaus wörtlich. In vielen Fällen handelt es sich um Embedded-Geräte mit Linux-Kernels. Ich würde noch nicht mal sagen dass die herstellerseitig verrammelt wären. Vielmehr geht es um den Faktor Quantität. Es ist schlicht von den Abläufen her nicht möglich, jedes Gerät anzupassen und sich eine Client-Software zu installieren. Zumal in vielen Fällen gar keine Eingabemöglichkeit besteht solange das betreffende Gerät nicht in seinem eigentlichen Ziel-Ökosystem installiert ist.

Ein Beispiel sind VoIP-Telefone. Die haben zwar ihre MAC-Adresse in Form eines Aufklebers am Gehäuse. Jedoch A) in Schriftgröße < 4 Pt. und B) keine maschinenlesbare Form wie Barcode usw. Also höchst fehlerträchtig beim Ablesen in größeren Stückzahlen. Die Dinger haben aber den Vorteil, dass sie wenn sie booten, einen DHCPv4-Request absetzen. Insofern noch easy.

Ein weiteres Beispiel sind LAN-fähige Baugruppen. Da gibt es in einigen Fällen keinen IP-Stack. Vielmehr laufen die mit vollständig proprietären OS und Protokollen. Da sie sich aber mit Standard-Switches verteilen lassen, müssen sie (so meine Denke) zumindest auf Ethernet aufsetzen. Diese Dinger haben z.T. noch nicht mal einen Aufkleber mit der MAC-Adresse.

Ich bin echt überrascht dass es da im Ethernet-Standard kein "Magic Packet" gibt, das einen Peernode dazu veranlasst, seine MAC-Adresse auszuspucken. Bezw. einen gemeinsamen Standard, welchen sie nutzen um sich, wenn sie an einen Switch angeschlossen werden, diesem bekannt zu machen. Ich dachte bisher immer, auf den unteren Protokollebenen würde das nicht vom Betriebssystem sondern von den Firmwares der Ethernet-Controller übernommen und es gäbe da sowas wie den kleinsten gemeinsamen Nenner.

HolgerX 6. Okt 2017 08:59

AW: MAC-Adresse eine Gegenseite auslesen
 
Hmm..

Also wenn der Rechner nicht noch an einem weiteren Netzwerk hängt und nur mit dem Gerät direkt verbunden ist, sollte es mit einem ARP Sniffer gehen.

Normalerweise sendet jedes Gerät beim Verbinden mit dem Netzwerk ein ARP-Request, um eine IP-Adresse z.B. von einem DHCP zugewiesen zu bekommen.

Somit braucht Du nur auf diese Pakete zu lauschen und wenn beim Anschließen des Gerätes eine neue MAC auftaucht, wird die es wohl sein!

Hier mal ein Link zu einem Sniffer, welcher mit WinPCap die ARP-Requests liefern kann:

http://www.delphipraxis.net/1282003-post3.html

Da dieser mit Delphi erstellt wurde, kannst Du ihn so anpassen, dass er nur ARP-Pakete Logt.

Eine Erweiterung um einen automatischen Ausdruck des Etikettes sollte dann ja kein Problem sein.

Somit würde immer bei Einstecken eines neuen Gerätes automatisch ein MAC-Etikett ausgedruckt.

Codehunter 6. Okt 2017 09:20

AW: MAC-Adresse eine Gegenseite auslesen
 
Das schaut sehr interessant aus! Was sich in den Tiefen der DP so alles findet :-)

HolgerX 6. Okt 2017 09:42

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von Codehunter (Beitrag 1382746)
Das schaut sehr interessant aus! Was sich in den Tiefen der DP so alles findet :-)


Es ist immer das Problem die richtigen Suchbegriffe zu finden. ;)
Ich hatte mich mal mit dem Thema 'AMAZON dash button' beschäftigt, und da kann man den Button auch nur über dessen MAC identifizieren.

Codehunter 9. Okt 2017 09:52

AW: MAC-Adresse eine Gegenseite auslesen
 
Zitat:

Zitat von HolgerX (Beitrag 1382748)
Es ist immer das Problem die richtigen Suchbegriffe zu finden. ;)

Das Problem hat ja schon fast philosophische Ausmaße. Man findet nur, wofür man Worte hat. Mir ging es schon öfter so, dass ich beim Stöbern im Web zufällig Dinge fand, nach denen ich früher verzweifelt gesucht habe. In manchen Fällen sind SuMas völlig nutzlos, weil sie nur mit Content arbeiten, ihnen jedoch jegliches verknüpfende Sachwissen fehlt. Dafür gibts auch so ein schönes Stichwort, auf das man selbst nie käme wenn man nicht um das Problem als solches wüsste: FILTERBLASE.
Zitat:

Zitat von HolgerX (Beitrag 1382748)
Ich hatte mich mal mit dem Thema 'AMAZON dash button' beschäftigt, und da kann man den Button auch nur über dessen MAC identifizieren.

Und dann als Haustürklingel umfunktioniert? ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz