![]() |
MAC-Adresse auslesen über NetBIOS
Ich staune !
Die wohl allseits bekannte Funktion zum auslesen der MAC-Adresse über NetBIOS:
Code:
funktioniert bestens... fast! Ich habe einen esten Kunden mit über 150 Rechnern, alle dieselbe Marke, nur 3 Modelle, alle genau gleich mit NetInstall mit W-XP aufgesetzt. Mein Programm, das von einem Netzlaufwerk gestartet wird, kann genau bei einem Rechner mit obiger Routine der MAC-Adresse nicht ermitteln. Kommt mit Byte(AdapterList.length) = 0 ('not found 3') zurück.
{Lokale MAC-Adresse ermitteln}
function GetAdapterInfo(Lana: Char): String; var Adapter : TAdapterStatus; var NCB : TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBRESET); NCB.ncb_lana_num := AnsiChar(Lana); if Netbios(@NCB) <> Char(NRC_GOODRET) then begin Result := 'not found 1'; Exit; end; FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBASTAT); NCB.ncb_lana_num := AnsiChar(Lana); NCB.ncb_callname := '*'; FillChar(Adapter, SizeOf(Adapter), 0); NCB.ncb_buffer := @Adapter; NCB.ncb_length := SizeOf(Adapter); if Netbios(@NCB) <> Char(NRC_GOODRET) then begin Result := 'not found 2'; Exit; end; Result := IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[5]), 2); end; function GetMACAdress: string; var AdapterList : TLanaEnum; var NCB : TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBENUM); NCB.ncb_buffer := @AdapterList; NCB.ncb_length := SizeOf(AdapterList); Netbios(@NCB); if Byte(AdapterList.length) > 0 then Result := GetAdapterInfo(Char(AdapterList.lana[0])) else Result := 'not found 3'; end;
Code:
Das hingegen funktioniert! Da bekomme ich die korrekte MAC-Adresse zurück.
MacAddressStrings := TStringList.Create();
JclSysInfo.GetMacAddresses('', MacAddressStrings); Label2.Caption := MacAddressStrings[0]; MacAddressStrings.Free(); Aber damit nicht genug. Bei einem zweiten Kunden mit über 1300 Rechner habe ich genau dasselbe Problem. Bei einem einzigen Rechner bekomme ich über NetBIOS keine MAC-Adresse zurück. Hat jemand eine Idee, woran das liegen könnte? |
AW: MAC-Adresse auslesen über NetBIOS
Schau dir mal die Unit JclSysInfo in der
![]() Dort findest du innerhalb der
Delphi-Quellcode:
folgendes Code Stückchen:
function GetMacAddresses(const Machine: string; const Addresses: TStrings): Integer;
Delphi-Quellcode:
Wie man sieht wird zuerst versucht die MAC-Addresse(n) über NetBios zu lesen.
GetMacAddressesNetBios;
if (Result <= 0) and (Machine = '') then GetMacAddressesSnmp; Wenn das nicht klappt (vielleicht weil NetBios über TCP/IP deaktiviert ist) dann wird es über Snmp versucht. Ich kann Dir die JCL nur wärmstens empfehlen; das spart viel Arbeit und man bekommt sauberen und gut getesteten Code. |
AW: MAC-Adresse auslesen über NetBIOS
Im Prinzip ja! Wenn ich einfach eine MAC-Adresse haben will, hast Du Recht, dann liefert mir das die JCLSysInfo.
Aber mich würde interessieren, wie man es schafft, dass es die NetBIOS-Routine NICHT kann. Und da meine Applikation eine TCP/IP-Kommunikations-Applikation ist (auf Indy basierend), läuten bei mir die Alarmglocken, wenn ich etwas höre wie Zitat:
|
AW: MAC-Adresse auslesen über NetBIOS
Zitat:
"Internetprotokoll Version 4 (TCP/IPv4)" anwählen und auf Eigenschaften klicken. Auf den Button "Erweitert..." klicken. Auf der Seite WINS findet sich unten die NetBIOS-Einstellung. (automatisch, aktiviert, deaktiviert) ![]() Ein DHCP-Server kann dem Client auch gezielt mitteilen, dass kein NetBIOS verwendet werden soll (nur wenn Einstellung auf automatisch). Die Einstellung kann auch per Script geändert werden. ![]() |
AW: MAC-Adresse auslesen über NetBIOS
Zitat:
MfG Dalai |
AW: MAC-Adresse auslesen über NetBIOS
OK, ja, schon. Habe meine Frage vermutlich etwas falsch formuliert. Üblicherweise kann doch ein 'normaler' Benutzer in einer Domäne diese Einstellungen selbst nicht ändern. Dazu braucht es normalerweise Admin-Rechte. Sonst stimmt da etwas in der Group Policy nicht so ganz. Und die Kisten, bei denen ich Probleme mit dem Auslesen der MAC-Adresse habe, sind ganz normale Benutzer-Rechner.
Dass üblicherweise die Einstellung auf 'Standard' (NetBIOS-Einstellung des DHCP-Servers verwenden) steht, weiss ich schon, aber eben, eigentlich sollte das doch gar niemand auf 'deaktivieren' ändern können. Und wenn's auf DHCP-Einstellungen steht, kann ja nicht einer etwas anderes haben als die anderen. Schliesslich haben alle denselben DHCP-Server. Und wenn's per Script gemacht würde, müsste es ja auch wieder von einem Administrator gemacht worden sein (in einem Fall weiss ich mit Bestimmtheit, dass der Benutzer absolut keine Ahnung hat, was ein Script ist und sich mit Sicherheit auch nicht an den Systemeinstellungen zu schaffen gemacht hat. Der ruft schon das Helpdesk an, wenn mal ein Fenster auftaucht, das er noch nie gesehen hat). Ich werde aber nun versuchen, ob ich irgendwie bei meinen Kunden an die Kisten ran komme, um mal die Einstellungen zu überprüfen. Sofern sie verändert sind, bleibt die Frage: WER, WANN und WIE? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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-2025 by Thomas Breitkreuz