AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke MAC-Adresse auslesen über NetBIOS
Thema durchsuchen
Ansicht
Themen-Optionen

MAC-Adresse auslesen über NetBIOS

Ein Thema von hesch21 · begonnen am 24. Apr 2013 · letzter Beitrag vom 25. Apr 2013
Antwort Antwort
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#1

MAC-Adresse auslesen über NetBIOS

  Alt 24. Apr 2013, 13:04
Ich staune !
Die wohl allseits bekannte Funktion zum auslesen der MAC-Adresse über NetBIOS:
Code:
{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;
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.
Code:
  MacAddressStrings := TStringList.Create();
  JclSysInfo.GetMacAddresses('', MacAddressStrings);
  Label2.Caption   := MacAddressStrings[0];
  MacAddressStrings.Free();
Das hingegen funktioniert! Da bekomme ich die korrekte MAC-Adresse zurück.
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?
Heinz Schneider
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: MAC-Adresse auslesen über NetBIOS

  Alt 24. Apr 2013, 17:06
Schau dir mal die Unit JclSysInfo in der JCL an.
Dort findest du innerhalb der function GetMacAddresses(const Machine: string; const Addresses: TStrings): Integer; folgendes Code Stückchen:
Delphi-Quellcode:
GetMacAddressesNetBios;
if (Result <= 0) and (Machine = '') then
  GetMacAddressesSnmp;
Wie man sieht wird zuerst versucht die MAC-Addresse(n) über NetBios zu lesen.
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.
  Mit Zitat antworten Zitat
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#3

AW: MAC-Adresse auslesen über NetBIOS

  Alt 25. Apr 2013, 09:19
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:
(vielleicht weil NetBios über TCP/IP deaktiviert ist)
. Wie macht man so etwas? Kann das ein ganz gewöhnlicher Benutzer? Hat das keine Auswirkungen auf den Betrieb der Kiste im LAN?
Heinz Schneider
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: MAC-Adresse auslesen über NetBIOS

  Alt 25. Apr 2013, 12:55
Zitat:
(vielleicht weil NetBios über TCP/IP deaktiviert ist)
. Wie macht man so etwas? Kann das ein ganz gewöhnlicher Benutzer? Hat das keine Auswirkungen auf den Betrieb der Kiste im LAN?
Eigenschaften des Netzwerkadapters öffnen (Adminrechte erforderlich!)
"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)
http://relaxing-moments.net/Netzwerk...MG/winsgui.jpg

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.
http://nftech.wordpress.com/2008/01/...ieren-windows/
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#5

AW: MAC-Adresse auslesen über NetBIOS

  Alt 25. Apr 2013, 13:23
Hat das keine Auswirkungen auf den Betrieb der Kiste im LAN?
Doch, hat es. Der Rechner, der NetBIOS abgeschaltet hat, taucht nicht mehr in der Netzwerkumgebung auf (dessen Freigaben sind aber prinzipiell noch zugreifbar). Ich "durfte" diese Erfahrung machen, als ich fälschlicherweise annahm, keiner brauche heutzutage mehr NetBIOS, und schaltete es auf meinem Server ab (wie von sx2008 beschrieben), bis ich mich später irgendwann wunderte, dass dieser Server nicht mehr in der Netzwerkumgebung zu sehen war. Es hat dann eine ganze Weile gedauert, bis ich diese Einstellung als Ursache identifizierte, weil ich das nicht sofort miteinander in Verbindung brachte.

MfG Dalai
  Mit Zitat antworten Zitat
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: MAC-Adresse auslesen über NetBIOS

  Alt 25. Apr 2013, 13:25
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?
Heinz Schneider
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz