Hallo,
habe eine kleines Problem und bisher auch keine Lösung im Internet
gefunden vielleicht stehe ich aber auch einfach auf dem Schlauch.
Ich möchte mit Hilfe eines Arduinos mit Ethernet Shield die Mac Adresse
des angeschlossenen Gerätes auslesen und anzeigen (es wird immer nur ein
Gerät angeschlossen). Das Anzeigen ist für mich kein Problem. Ich habe
allerdings in der Dokumentation und im Internet noch keine Infos über
das auslesen von MAC-Adressen gefunden. Ich bedanke mich schon einmal im
voraus für eure Hilfe.
Grüße Erik
Theor schrieb:> Broadcast oder Multicast wären Möglichkeiten, falls die angeschlossenen> Geräte darauf reagieren.
Die Vielfalt der Protokoll-Möglichkeiten bezüglich Ethernet und
TCP wird dem Arduino-User leider vorenthalten, damit wäre er
womöglich überfordert und der Code würde unermesslich anwachsen.
Die vorgegebene Klasse bietet nur einige User-Datenübertragungen an.
Wenn ich mich recht erinnere ist es beim Arduino Ethernet-Shield
(basierend auf dem W5100/W5500) gar nicht möglich an das Roh-
Datenpaket (das eine Ethernet Adresse preisgeben könnte) zu
kommen da der Chip gleich die ausgepackten Netto-Daten liefert.
Mit dem altehrwürdigen ENC28J60 könnte man den Wunsch des TO
umsetzen, ist man dann aber mit einem Software-lastigen und nicht
Arduino-fähigem Design beschäftigt ....
Aber vielleicht habe ich auch zu wenig Ahnung und ich habe mir
nicht alles gemerkt was ich schon so erfahren habe ... YMMV
Ich gucke einfach in die MAC-Address-Table meines Switches.
Eine generelle Methode, einem Netzwerkgeraet seine MAC-Adresse
abzupressen, gibt es sowieso nicht.
Weswegen dann auch regelmaessig ein kleiner Aufkleber auf
diesen Kisten klebt.
jo mei schrieb:> Wenn ich mich recht erinnere ist es beim Arduino Ethernet-Shield> (basierend auf dem W5100/W5500) gar nicht möglich an das Roh-> Datenpaket (das eine Ethernet Adresse preisgeben könnte) zu> kommen da der Chip gleich die ausgepackten Netto-Daten liefert.
Denke schon. Mindestens der W3100A hat einen "MAC Layer RAW Mode".
(prx) A. K. schrieb:> Denke schon. Mindestens der W3100A hat einen "MAC Layer RAW Mode".
Den Raw Mode gibt es schon aber dann musst du dir dein gesamtes
Vorgehen auf TCP selbst zusammenbauen und kannst nicht auf
die Chip-Implementierung aufbauen. Will heissen du musst erst
per Broadcast herausfinden wer denn alles da ist, dann kannst
du nach der Ethernet Adresse suchen die dir genehm ist.
Aber der TO will ja aus einem "angeschlossenen Gerät" die MAC
Adresse bekommen. Dann zeig mir mal wie das gehen soll. So
schnell mal einen Mix zwischen Socket Mode und Raw Mode
zusamenwurschteln geht da nicht. Ein Arduino User nutzt die
Ethernet-Lib (Klasse) weil er vom Netzwerken sowieso wenig
Ahnung hat bzw. wenig Lust hat sich programmiertechnisch dort
hineinzusteigern, wie soll er da mit dem Raw Mode eines W5xx
zurechtkommen? Die Arduino Ethernet Klasse liefert jedenfalls
nichts dazu.
Aber - nachdem du mir mit einen kleinen dürren Satz widersprochen
hast - du weisst es sicher (besser) und kannst mir das erklären.
In der Frage ging es ausschliesslich um die die MAC-Adresse. Wenn das
Gerät freiwillig mal ein Paket schickt, üblicherweise kommt zunächst
DHCP, dann kann man den Arduino bzw das Ethernet-Shield direkt an das
Gerät anschliessen und muss nur auf ein Paket warten.
Umständlicher wirds wenn "stealth", oder wenn da noch mehr passieren
soll, als nur die MAC Adresse rauszufinden.
(prx) A. K. schrieb:> den Arduino direkt an das Gerät anschliessen und muss nur auf ein> Paket warten.
Jetzt brauchst du dem TO nur noch schnell ein "kleines" Beispiel-
Programm zeigen wie er das machen soll.
Wie bereits gesagt:
jo mei schrieb:> Die Arduino Ethernet Klasse liefert jedenfalls nichts dazu.
Ach so, ich ahne etwas: du willst der Arduino-Klasse eine
Erweiterung in Form einer Ableitung spendieren damit der TO
endlich sein Ziel erreichen kann.
jo mei schrieb:> Jetzt brauchst du dem TO nur noch schnell ein "kleines" Beispiel-> Programm zeigen wie er das machen soll.
Anders als viele halte ich Arduino-Anwender nicht für dumm. Das müssen
sie erst einmal beweisen.
Aber du hast bewiesen, dass eine Diskussion mit dir nichts bringt.
(prx) A. K. schrieb:> Anders als viele halte ich Arduino-Anwender nicht für dumm.
Danke. Mit deinen drei Beiträgen in diesem Thread hast du dem
TO in die Lage versetzt sein Ziel zu erreichen. Ich dagegen
habe nur vermutet dass es nicht so einfach geht und wurde eines
Besseren belehrt.
Cptn Cisco schrieb:> Eine generelle Methode, einem Netzwerkgeraet seine MAC-Adresse> abzupressen, gibt es sowieso nicht.
Doch, natürlich: man kommuniziert mit ihm. Entweder ist es willig zu
kommunizieren, dann muss es über kurz oder lang auch seine MAC
rausrücken oder es will oder kann nicht kommunizieren, dann spielt es
auch keine Rolle.
Nunja, es sind natürlich auch böswillige Devices denkbar. Die stören
aber nur, wenn man das Konzept der Portsicherheit im LAN nicht umgesetzt
hat. Dann können die auch nur abkacken. Spoofing (also das Segeln unter
geklauter MAC-Identität) geht dann nicht mehr.
Danke für eure Antworten ich bin ja eh der Meinung jeder das Silizium
für seinen Prozessor nicht selber gewonnen hat hat kein Recht
irgendetwas zu Programmieren.
Aber jetzt zum eigentlichen Thema: werde mal eines der DHCPOFFER Pakete
abfangen und mit Wireshark analysieren um zu sehen wo die MAC Adresse zu
finden ist. Danach werde ich sehen wie man das Paket speichert und nur
den richtigen Abschnitt anzeigt.
Grüße Erik
Moin,
Naja, also die MAC Adressen kommen in jedem Ethernetpaket gleich nach
Takteinlauf und Startframedelimiter. Aber diese Info, die du aus
Wireshark ziehen kannst, wird dir wenig weiterhelfen.
Cptn Cisco schrieb:> Eine generelle Methode, einem Netzwerkgeraet seine MAC-Adresse> abzupressen, gibt es sowieso nicht.
Ja, aeh...doch: ARP ist eigentlich das Protokoll, wie man bei einer
bestimmten IP Adresse nach deren MAC-Adresse fragen kann.
Aber ich hab' keinen Blassen, ob deine HW/SW-Kombi erlaubt, einen ARP
abzusetzen und die Antwort auszuwerten, bzw. in den ARP-Cache zu gucken
- da wird sie eh' schon drinnenstehen, wenn's sowas gibt und schon mit
dem fremden Geraet vor Kurzem gequakt wurde.
Gruss
WK
>Cptn Cisco schrieb:>> Eine generelle Methode, einem Netzwerkgeraet seine MAC-Adresse>> abzupressen, gibt es sowieso nicht.
Korrekt.
c-hater schrieb:
> Doch, natürlich: man kommuniziert mit ihm.
Dergute W. schrieb:
> Ja, aeh...doch: ARP ist eigentlich das Protokoll, wie man bei einer> bestimmten IP Adresse nach deren MAC-Adresse fragen kann.
Beide Antworten setzen vorraus, dass auf dem Gerät IP bereits
konfiguriert ist und man dessen IP-Adresse kennt.
Fakt ist, dass es auf dem Ethernet-Layer keine standardisierte Methode
gibt, einem Gerät seine MAC-Adresse zu entlocken - die muß es freiwillig
rausrücken.
Wenn man Glück hat, schickt es nach dem Anstöpseln irgendwelche Pakete
raus (DHCP- oder BOOTP-Anfragen, ARP-checks, etc) - dann hat man
gewonnen. Wenn es ruhig bleibt, kann man versuchen, ihm ein Paket zu
entlocken, z.B indem man Broadcast-Pings sendet (in der Hoffnung, dass
IP konfiguriert ist). Wenn das auch nicht klappt, ist man ziemlich
aufgeschmissen und sollte den Aufkleber am Gerät suchen.
Moin,
foobar schrieb:> Beide Antworten setzen vorraus, dass auf dem Gerät IP bereits> konfiguriert ist und man dessen IP-Adresse kennt.
Jepp, stimmt. Habbich vorausgesetzt. Auch so Sachen, dass beide Geraete
an einer jeweils fuer das Geraet geeigneten Energieversorgung haengen
und eingeschaltet sind.
Und dass die Netzwerkkabel richtig angeschlossen sind, ggf. AutoMDX
stattfand und sich die Teilnehmer auf ein Sorte Link geeinigt haben,
setz' ich mal voraus.
Bin in meinem jugendlichen Leichtsinn von einem "normalen" Netzwerk
ausgegangen.
Gruss
WK
So weit ist es schon gekommen, ein normales Netzwerk spricht IP. Früher
war das umgekehrt, auf einem normalen Ethernet gab es kein IP :-). Ganz
speziell war DecNET, das hat die BIA überschrieben und sich die MAC
Adresse aus der Area und Knotennummer gebastelt.