Problem beim Lesen der Mac-Adressen unter Win-XP
-
Hallo,
zum Auslesen der Mac-Adressen benutze ich seit längerer Zeit erfolgreich das folgende Bytes&More-Snippet:
http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/main/snip_cnt.htmUnter Win 2000 funktioniert alles nach Wunsch. Unabhängig von einer Verbindung zum (Lan-) Router oder Internet, können die Adressen gelesen werden.
Unter Win XP jedoch können die Adressen nur gelesen werden, wenn eine Verbindung zum (Lan-) Router besteht.
Kurrioserweise können sie per Konsolenaufruf ipconfig /all jedoch auch ohne Verbindung zum (Lan-) Router gelesen werden.Gibt's dafür eine Erklärung oder besser noch Lösungsidee?
Gruß
Leo
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich kann Deinen Code da nicht finden...
Aber generell:HOWTO: Get the MAC Address for an Ethernet Adapter
http://support.microsoft.com/default.aspx?scid=kb;en-us;118623
bzw.:
http://groups.google.de/group/microsoft.public.vb.winapi/msg/d62322a836d6c26a
-
Hallo,
danke für die Antwort.
Der richtige Link muss heißen: http://www.bytesandmore.de/rad/cpp/snipp/sc08003.phpAber leider ist der dortige Code sehr ähnlich dem der Microsoft-Seite - und leider ist das Ergebnis ebenfalls das Gleiche.
Interessant ist, dass auf der Microsoft-Seite unten unter 'Applies to' auch nicht XP als Betriebssystem aufgeführt ist. Das dürfte wohl die Erklärung sein.
Gibt es vielleicht dennoch eine Lösung?
Gruß
Leo
-
Der zweite Link von Jochen ist doch vielversprechend!
-
Sorry, nur die Hälfte gelesen. Das geht nicht so ohne weiteres ohne
eine Verbindung mit dem vorhandenen Code. Alternativ parsen der
ipconfig /all Ausgabe?
-
Hallo,
Problem gelöst! Musste ne Weile suchen, um folgendes zu finden.
#include "Iphlpapi.h" DWORD sizeReq = 0 ; PMIB_IFTABLE pInfo = NULL; // Get size information ::GetIfTable(NULL, &sizeReq, FALSE) ; // Allocate required memory pInfo = (PMIB_IFTABLE) new BYTE [sizeReq] ; memset (pInfo, 0, sizeReq) ; DWORD sizeToUse = sizeReq ; // Retrieve network interface information bool result = ( ::GetIfTable( (PMIB_IFTABLE)pInfo,&sizeToUse, FALSE) == NO_ERROR ); if( !result ) { delete (PMIB_IFTABLE)pInfo; pInfo = NULL; } char macStr[100] = {0}; // Print all interface information for( unsigned int index = 0; index < ((PMIB_IFTABLE)pInfo)->dwNumEntries; index ++ ) { // Get interface description MIB_IFROW& details = ((PMIB_IFTABLE)pInfo)->table[index]; // Is this an Ethernet interface? if( (details.dwPhysAddrLen == 6) && (details.dwType == MIB_IF_TYPE_ETHERNET) ) { // Ethernet MAC address printf(" Ethernet: "); } else // Other interface { //printf(" Others: "); } // Format physical address memset(macStr,0,sizeof(macStr)); DWORD j; for ( j = 0 ; j < details.dwPhysAddrLen ; ++j) { sprintf( &macStr[j*3], "%02X-", details.bPhysAddr[j] ); } if ( 0 != j ) { macStr[j*3-1] = '\0'; //we can get mac address here } . }Quelle: http://forums.isaserver.org/m_2001998484/tm.htm
Und nicht vergessen dem Projekt Iphlpapi.lib hinzuzufügen.
Danke für Eure Hilfe!
Gruß
Leo
-
Da fehlt die eine Klammer die auskommentiert ist. "//}"
Aber thx for sharing!Gruß
Bucks