![]() |
IP Adresse eines Netzwerkadapters
Hi,
ich will die aktuelle IP Adresse von allen verfügbaren Netzwerkadaptern auslesen. Durch die Forensuche bin ich dann an die Funktion GetPerAdapterInfo gestoßen und habe aich ein paar Code Beispiele gefunden:
Delphi-Quellcode:
const MAX_ADAPTER_DESCRIPTION_LENGTH = 128; // arb. MAX_ADAPTER_NAME_LENGTH = 256; // arb. MAX_ADAPTER_ADDRESS_LENGTH = 8; // arb. type PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING; IP_ADDRESS_STRING = packed record acString : array [1..16] of Char; end; PIP_MASK_STRING = ^PIP_MASK_STRING; IP_MASK_STRING = IP_ADDRESS_STRING; PIP_ADDR_STRING = ^IP_ADDR_STRING; IP_ADDR_STRING = packed record Next : PIP_ADDR_STRING; IpAddress : IP_ADDRESS_STRING; IpMask : IP_MASK_STRING; Context : DWORD; end; time_t = int64; PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO; IP_ADAPTER_INFO = packed record Next : PIP_ADAPTER_INFO; ComboIndex : DWORD; AdapterName : array [1..MAX_ADAPTER_NAME_LENGTH+4] of Char ; Description : array [1..MAX_ADAPTER_DESCRIPTION_LENGTH+4] of Char; AddressLength : UINT; Address : array [1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte; Index : DWORD; dwType : UINT; DhcpEnabled : UINT; CurrentIpAddress : PIP_ADDR_STRING; IpAddressList : IP_ADDR_STRING; GatewayList : IP_ADDR_STRING; DhcpServer : IP_ADDR_STRING; HaveWins : Boolean; PrimaryWinsServer : IP_ADDR_STRING; SecondaryWinsServer : IP_ADDR_STRING; LeaseObtained : time_t; LeaseExpires : time_t; end; PIP_PER_ADAPTER_INFO = ^IP_PER_ADAPTER_INFO; IP_PER_ADAPTER_INFO = packed record AutoConfigEnabled : UINT; AutoConfigActive : UINT; CurrentDnsServer : PIP_ADDR_STRING; DnsServerList : IP_ADDR_STRING; end; function GetAdaptersInfo(const pAdapterInfo : PIP_ADAPTER_INFO;const pOutBufLen : PULONG) : DWORD; stdcall; function GetPerAdapterInfo(const pIfIndex : ULONG;const pAdapterInfo : PIP_PER_ADAPTER_INFO;const pOutBufLen : PULONG) : DWORD; stdcall; implementation function GetAdaptersInfo; external 'iphlpapi.dll'; function GetPerAdapterInfo; external 'iphlpapi.dll'; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var pAdapterList : PIP_ADAPTER_INFO; dwLenAdapter : DWORD; aaiAdapters : array of PIP_ADAPTER_INFO; dwResult : DWORD; iIndexAdapter : integer; iasWork : IP_ADDR_STRING; paiWork : PIP_PER_ADAPTER_INFO; dwLenAdapterInfo : DWORD; begin pAdapterList := nil; // Alles auf 0 ==> Benötigte Buffergrösse ermitteln dwLenAdapter := 0; if GetAdaptersInfo(pAdapterList,@dwLenAdapter) <> ERROR_BUFFER_OVERFLOW then exit; pAdapterList := AllocMem(dwLenAdapter); try if GetAdaptersInfo(pAdapterList,@dwLenAdapter) <> ERROR_SUCCESS then exit; SetLength(aaiAdapters,1); aaiAdapters[0] := pAdapterList; while aaiAdapters[High(aaiAdapters)].Next <> nil do begin SetLength(aaiAdapters,Length(aaiAdapters)+1); aaiAdapters[High(aaiAdapters)] := aaiAdapters[High(aaiAdapters)-1].Next; end; for iIndexAdapter := 0 to high(aaiAdapters) do begin ListBox1.Items.Add(trim(aaiAdapters[iIndexAdapter].Description)); paiWork := nil; dwLenAdapterInfo := 0; dwResult := GetPerAdapterInfo(aaiAdapters[iIndexAdapter].Index,paiWork,@dwLenAdapterInfo); if dwResult <> ERROR_BUFFER_OVERFLOW then begin ListBox1.Items.Add('***** (1) Fehler beim Auslesen der Adapterdaten: '+IntToStr(dwResult)); end else begin paiWork := AllocMem(dwLenAdapterInfo); try dwResult := GetPerAdapterInfo(aaiAdapters[iIndexAdapter].Index,paiWork,@dwLenAdapterInfo); if dwResult <> ERROR_SUCCESS then begin ListBox1.Items.Add('***** (2) Fehler beim Auslesen der Adapterdaten: '+IntToStr(dwResult)); end else begin iasWork := paiWork.DnsServerList; while iasWork.Next <> nil do begin ListBox1.Items.Add('DNS: '+ trim(iasWork.IpAddress.acString)); iasWork := iasWork.Next^; end; ListBox1.Items.Add('DNS: '+ trim(iasWork.IpAddress.acString)); end; finally FreeMem(paiWork,dwLenAdapterInfo); end; end; end; finally FreeMem(pAdapterList,dwLenAdapter); end; end; Dieser Code gibt alle Adapter inkl. DNS aus. Nun brauche ich aber noch die aktuelle IP. Da CurrentIpAddress aber vom Typ PIP_ADDR_STRING ist, weiß ich nicht wie ich diesen Wert ausgebe (was bedeutet das Dach..?).. trim funktioniert hier nicht.. Kann mir jemand helfen? Vielen Dank + Grüße Passi |
Re: IP Adresse eines Netzwerkadapters
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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