Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Anzeigen der IPAdresse UND Name der Verbindung (https://www.delphipraxis.net/115737-anzeigen-der-ipadresse-und-name-der-verbindung.html)

SaltJohn 17. Jun 2008 07:54


Anzeigen der IPAdresse UND Name der Verbindung
 
Hallo, mir geht es darum in einem Windows 2000 System für sämtliche Netwerkadapter die IP UND den Namen der Verbindung anzeigen zu lassen. Eine Funktion um die IP Adresse zeigen zu lassen habe ich hier im Forum schon gefunden und erfolgreich implemetiert. Jetzt gilt es noch zusätzlich zur IP-adresse den Adapternamen oder auch Adaptertyp anzeigen zu lassen.

Der Code für das Anzeigen der IP von MathiasSimmack hier im Forum

Delphi-Quellcode:
uses
  WinSock;

function GetLocalIPs: string;
type
  PPInAddr = ^PInAddr;
var
  wsadata : TWSAData;
  hostinfo : PHostEnt;
  addr    : PPInAddr;
begin
  Result  := '';

  if(WSAStartUp(MAKEWORD(1,1),wsadata) = 0) then
  try
    hostinfo := gethostbyname(nil);
    if(hostinfo <> nil) then begin
      addr  := pointer(hostinfo^.h_addr_list);

      while(addr^ <> nil) do begin
        Result := Result + inet_ntoa(addr^^) + ^M^J;
        inc(addr);
      end;
    end;
  finally
    WSACleanUp;
  end;
end;
http://www.delphipraxis.net/internal...ect.php?t=2902

Edit: Am besten wäre natürlich eine Methode wo man den jeweiligen LAN-Adapternamen eingeben kann und dann die jeweilige IP als Rückgabe bekommt.

Mini-Programmierer 17. Jun 2008 18:06

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Was meinst Du mit Adapternamen ?

IceTube 17. Jun 2008 18:09

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Zitat:

Zitat von Mini-Programmierer
Was meinst Du mit Adapternamen ?

Er meint wohl den Computernamen denke ich, oder?=

shmia 17. Jun 2008 18:19

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
In hostinfo^.h_name steht der Rechnername (inkl. Domainname).
Die Infos zum Adapter wirst du wohl nur über die IP Helper API bekommen.
Also GetAdaptersAddresses() bzw. GetAdaptersInfo().

SaltJohn 17. Jun 2008 19:06

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Einen schönen Abend!

Sorry, habe mich wohl nicht deutlich genug ausgedrückt. Ich meinte "nur" den Namen der Netzwerkverbindung und nicht unbedingt die genaue Bezeichnung der LAN- oder WLANkarte also einfach nur z.B. LAN-1 und LAN-2.

Als Hintergrund möchte ich noch erwähnen, dass ich meinen beiden Netzwerkadaptern via NETSH jeweils eine bestimmte IP zuteile. Das ganze funktioniert erstaunlich einfach. Doch ob jetzt die Zuteilung der IP auch wirklich erfolgreich war ist ja eigentlich ungewiss.

Ich möchte also "einfach" nur überprüfen ob jeder LANverbindung (z.B. LAN-1/LAN-2) die richtige IP übergeben wurde. Ein Hauptproblem ist es das Auslesen der IP mit dem Netzwerkverbindungsnamen zu verbinden. Jede einzelne Funktion gibt es ja unter anderem schon hier im Forum. Ich suche allerdings eine Kombination aus beiden.

Alter Mann 17. Jun 2008 19:42

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Hi,

darf es auch WMI sein? Wenn JA, dann heißt die Klasse win32_NetworkAdapter und in Verbindung mit
win32_NetworkAdapterConfiguration bekommst du alles was gebraucht wird.

Gruß

PS Zu WMI gibt es in der DP genug Beispiele

SaltJohn 17. Jun 2008 20:55

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Also WMI ist natürlich auch recht, nur dachte ich, dass es da bei Win2000 Probleme gibt weil ja so einiges erst mit WinXP dazugekommen ist. Habe allerdings auch keine wirklich treffenden Beispiele bei DP gefunden. Bei "win32_NetworkAdapterConfiguration" kommt z.B kein einziger Treffer obwohl du das Wort ja in deiner Antwort geschrieben hast. Ist wohl ein zu langes Wort.

RWarnecke 17. Jun 2008 21:16

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Zitat:

Zitat von SaltJohn
Also WMI ist natürlich auch recht, nur dachte ich, dass es da bei Win2000 Probleme gibt weil ja so einiges erst mit WinXP dazugekommen ist. Habe allerdings auch keine wirklich treffenden Beispiele bei DP gefunden. Bei "win32_NetworkAdapterConfiguration" kommt z.B kein einziger Treffer obwohl du das Wort ja in deiner Antwort geschrieben hast. Ist wohl ein zu langes Wort.

Suche hier im Forum mal nach Hier im Forum suchenWMIDemo, für ein Beispiel für WMI. Du könntest aber auch über mit MSDN-Library durchsuchenGetAdaptersInfo den Adapternamen auslesen und dann in der Registry den Namen der LAN-Verbindung ermitteln. (HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D 36E972-E325-11CE-BFC1-08002BE10318})

SaltJohn 18. Jun 2008 05:51

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Den Adapternamen habe ich ja schon aber wie schaffe ich es zusätzlich die Ip als String zurück zu erhalten?

Wenn ich z.B. weiß dass "Intel Ethernet 100 Integrated Controller" mein Adapter zu LAN-Verbindung1 ist, soll er mir ausgeben welche IP dieser Adapter hat.

Edit: In der WMI-Demo habe ich jetzt gefunden was ich brauche. In "Win32_NetworkAdapterConfiguration" gibt es "IPAdress" und "Description". Habe allerdings Probleme da ran zu kommen. Das Demo ruft ja sämtliche Klassen auf ich bräcuhte nur diese eine...

SaltJohn 18. Jun 2008 10:06

Re: Anzeigen der IPAdresse UND Name der Verbindung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich hab mich jetzt mal ein wenig schlau gemacht und eine Methode gefunden über WMI die Adapterbezeichnug und auch die IP Adresse auszulesen. Allerdings habe ich noch ein Problem mit der Augabe der IPs. Wenn ich in meinem Testprogramm auf IP ausgeben klicke kommt die Fehlermeldung:
Zitat:

Exception-Klasse EVariantTypeCastError mit Meldung 'Variante des Typs (Array Variant) konnte nicht in Typ (String) konvertiert werden'
. Demnach wird die IP-Adresse einer Instanz wohl nicht als String ausgegeben? Kann es sein dass diese als Hexadezimalzahl oder Binärzahl ausgelesen wird? beim Aufruf der Adapternamen geht es.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WbemScripting_TLB, ActiveX, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  var
  l_Values: TStringList;
implementation

{$R *.dfm}
function getWMIValue(WMI_CLASS:string;WMI_VALUE:string): TStringList;
var
   l_WMILocator: ISWbemLocator;
   l_WMIServices: ISWbemServices;
   l_WMIObjectDefinition: ISWbemObject;
   l_WMIObjectSet: SWbemObjectSet;
   l_WMIObjectInstances: IEnumVariant;
   l_WMIObject: ISWbemObject;
   l_WMIPropertySet: ISWbemPropertySet;
   l_WMIProperty: ISWbemProperty;

 
   l_TempObj: OleVariant;  
   l_ObjValue: Cardinal;
     
begin
   result := TStringList.Create;

 
   l_WMILocator := CoSWbemLocator.Create;
   l_WMIServices := L_WMILocator.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
   l_WMIObjectDefinition := l_WMIServices.Get(WMI_CLASS, wbemFlagUseAmendedQualifiers, nil);
   l_WMIObjectSet := l_WMIObjectDefinition.Instances_(0, nil);
   l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant;

       
   while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do
   begin
      l_WMIObject:= IUnknown(l_TempObj) as SWBemObject;

 
      l_WMIPropertySet := l_WMIObject.Properties_;
      l_WMIProperty := l_WMIPropertySet.Item(WMI_VALUE, 0);

 
      if not VarIsNull(l_WMIProperty.Get_Value) then
        result.Add(l_WMIProperty.Get_Value) else result.Add('<unbekannt>');
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
l_Values := getWMIValue('Win32_NetworkAdapterConfiguration','IPAddress');
for x:=0 to l_Values.Count-1 do begin
  ShowMessage(l_Values.Strings[x]);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var x:integer;
begin
l_Values := getWMIValue('Win32_NetworkAdapter','Name');
for x:=0 to l_Values.Count-1 do begin
  ShowMessage(l_Values.Strings[x]);
end;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Seite 1 von 3  1 23      

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