AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters
Thema durchsuchen
Ansicht
Themen-Optionen

MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters

Ein Thema von Frettchenstall · begonnen am 18. Aug 2009 · letzter Beitrag vom 21. Aug 2009
Antwort Antwort
Frettchenstall

Registriert seit: 18. Aug 2009
4 Beiträge
 
#1

MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters

  Alt 18. Aug 2009, 15:44
Hallo zusammen,

ich möchte meine MAC-Adressen einlesen. Zur Zeit habe ich 2 LAN-Karten in meinem Rechner installiert. Mit diesem unten angegebenen Code, der im Internet herumspuckt, werden mir auch alle MAC-Adressen angezeigt. Jedoch bringt mir die reine MAC-Adresse nicht sonderlich viel, da der Benutzer von der MAC-Adresse nicht sofort auf die LAN-Karte zurück schließen kann. Ziel ist es somit eine Combobox oder Listbox mit den gefundenen MAC-Adressen SOWIE der Netzwerkartenbezeichnung zufüllen, um dem Benutzer die Möglichkeit zu geben die gewünschte MAC-Adresse auswählen.

z.B:
gefundene MAC-Adressen:
1. 00-70-1A-xx-xx-xx - Cisco-Linksys, LLC
2. 00-30-05-xx-xx-xx - Fujitsu Siemens Computers



Oder bieten die verwendeten TLanaEnum und TNCB Datentypen, bereits eine Variable in der der Titel des aktuell angewählten LAN-Adapters zwischen gespeichert wird?


Vergebliches Suchen in diversen Delphi-Foren sowie Google brachte keine Antwort. Ich würde mich über eine hilfreiche Antwort freuen.

Gruß
Frettchenstall


Delphi-Quellcode:
// Pleace notice, I called the Lan Adapters within a function Lana
// Outside a function I named them Adapter
FUNCTION GetMacAddress(AdapterID : Integer) : String;
TYPE
 TAdapterStatusA = record
   Adapt : TAdapterStatus;
   NameBuff : array[0..30] of TNameBuffer;
 end;
VAR
  NCB :TNCB; //Network Control Block
  ReturnCode :Char; //Retun Code
  AdapterStatus :TAdapterStatus;
BEGIN
 //Clear NCB Structure
 FillChar( NCB, SizeOf(NCB), 0 );

 //Programm NBC to fulfill a reset. It doublecheck if the Lana is present.
 //Can be removed, when used with GetAdapters.
 NCB.ncb_command := Char(NCBRESET);
 NCB.ncb_lana_num := Char(AdapterID);

 //Process NCB to NetBios
 ReturnCode := NetBios(@NCB);

 //Check if query was successfull, if returnCode = #0
 IF ReturnCode <> #0 THEN
 BEGIN
  // Return the negative returncode
  // Error check would be "if ReturnCode[0]='-' Then..."
  Result:=Char(Ord(ReturnCode)*-1);
  Exit;
 END;

 //Clear NCB Structure
 FillChar( NCB, SizeOf(NCB), 0 );

 //Programm NBC to ask for the MAC associated with the LanaID
 NCB.ncb_command := Char(NCBASTAT);
 NCB.ncb_lana_num := Char(AdapterID);
 NCB.ncb_buffer := @AdapterStatus;
 NCB.ncb_length := SizeOf(AdapterStatus);
 StrCopy(NCB.ncb_callname, '* ' );

 //Process NCB to NetBios
 ReturnCode := Netbios( @NCB );

 //Check if query was successfull, if returnCode = #0
 IF ReturnCode <> #0 THEN
 BEGIN
  // Return the negative returncode
  Result:=Char(Ord(ReturnCode)*-1);
  Exit;
 END;

 //Return formated MAC
 result:=Format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x',
                [ORD(AdapterStatus.Adapter_address[0]),
                 ORD(AdapterStatus.Adapter_address[1]),
                 ORD(AdapterStatus.Adapter_address[2]),
                 ORD(AdapterStatus.Adapter_address[3]),
                 ORD(AdapterStatus.Adapter_address[4]),
                 ORD(AdapterStatus.Adapter_address[5])])
end;

//Function GetAdapter
//=================
//
// This function will return the the total nummber of all lana's istalled
// and a unique the id of each lana.
// E.g. on a system containing lana's 0, 2 and 3, a structure with
// length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.
FUNCTION GetAdapters: TLanaEnum;
VAR
  NCB :TNCB; //Network Control Block
  LanaEnum :TLanaEnum; //Enumeration of Lan Adapters
  ReturnCode :Char; //Retun Code
BEGIN
 //Clear NCB Structure
 FillChar(NCB, SizeOf(NCB), 0);
 //Clear LanaEnum Stucture
 FillChar(LanaEnum, SizeOf(TLanaEnum), 0);

 //Programm NBC to ask for the number of Lana's
 NCB.ncb_Command := CHAR(NCBENUM);
 NCB.ncb_buffer := @LanaEnum;
 NCB.ncb_length := Sizeof(LanaEnum);

 //Ask NetBios
 ReturnCode := NetBios(@NCB);

 //Check if query was successfull, if returnCode = #0
 IF ReturnCode <> #0 THEN
 BEGIN
  LanaEnum.Length := CHAR(0);
  LanaEnum.Lana[0] := ReturnCode;
 END;

 // Return valid LanaEnum Structure
 Result := LanaEnum;
END;


PROCEDURE TForm1.Button1Click(Sender: TObject);
VAR
 L_Enum :TLanaEnum;
 i :INTEGER;
BEGIN
 L_Enum := GetAdapters; { enumerate lanas for WIN NT }
 IF L_Enum.Length = '0THEN
 BEGIN
  Exit;
 END;

 FOR i:= 0 TO (BYTE(L_Enum.Length) - 1) DO
 BEGIN
  ListBox1.Items.Add(getMACaddress(BYTE(L_Enum.Lana[i])));
 END;
END;
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters

  Alt 18. Aug 2009, 17:12
Schau mal bei den Schweizern..die ham sowas Mac-Adresse
[Edit] Schw+e+izern[/EDIT]
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Frettchenstall

Registriert seit: 18. Aug 2009
4 Beiträge
 
#3

Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters

  Alt 19. Aug 2009, 10:24
Auf welche Variable muss ich denn zugreifen, damit ich die LAN-Adapterbezeichnung erhalte?
Und wie genau mache ich das?
  Mit Zitat antworten Zitat
Frettchenstall

Registriert seit: 18. Aug 2009
4 Beiträge
 
#4

Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters

  Alt 20. Aug 2009, 08:19
Vielen Dank, das Problem hat sich soweit gelöst.
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#5

Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters

  Alt 20. Aug 2009, 08:45
Zitat von Frettchenstall:
Vielen Dank, das Problem hat sich soweit gelöst.
Verrate uns doch bitte, wie es sich gelöst hat - oder sollen wir etwa unwissend sterben? 8)
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
  Mit Zitat antworten Zitat
Frettchenstall

Registriert seit: 18. Aug 2009
4 Beiträge
 
#6

Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters

  Alt 21. Aug 2009, 08:34
Nein, es soll ja niemand unwissend sterben müssen!

Da die Unterstützung von Delphi zum Zugriff auf das Windows System sehr dürftig ist, habe ich die WMI (Windows Management Instrumentation) benutzt. Dort ließen sich mittels der Klasse Win32_NetworkAdapter alle benötigten Informationen auslesen. Also die von mir benötigte MAC-Adresse genauso wie der ProductName (also der LAN-Adapterbezeichnung des Herstellers).

Win32_NetworkAdapter
  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 20:04 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