![]() |
Wie bekomme ich die DNS heraus?
Morgääähhhn Leutz!
Mit Hilfe der API Funktion GetAdaptersInfo lese ich bereits die SubnetMask und die Gateway-adresse aus. Habe dazu den Code von Christian Seehase benutzt der scho im Forum gepostet wurde. Nun steh ich vor dem Problem, dass ich nicht darauf komme, wie man die DNS auslesen kann! Kann mir bitte jemand helfen??? danke schon mal mfg Saiiim |
Re: Wie bekomme ich die DNS heraus?
Moin Saiiim,
könntest Du bitte mal den Link zu dem gefundenen Sample angeben? Grundsätzlich lässt sich das mit Hilfe der Funktion ![]() |
Re: Wie bekomme ich die DNS heraus?
Hi Christian!
Hier ist mal der Link: ![]() Ja bei diesem Bsp. hast du es eh schon mit GetAdapterInfo gelöst, soweit kein Problem, nur finde ich bei der SDK keine Funktion um die DNS auslesen zu können! Wenn du mir bitte hirzu einen Code geben könntest (falls du einen hast) wäre ich dir sehr dankbar! danke mfg saiiim |
Re: Wie bekomme ich die DNS heraus?
Moin Saiiim,
Zitat:
Das PER geht leicht unter. Für ein Beispiel müsstest Du mich bitte am Wochenende noch einmal erinnern. |
Re: Wie bekomme ich die DNS heraus?
Moin Saiiim,
so, ich hab' Dir mal ein Beispiel für das Auslesen der DNS Server erstellt. Du benötigst noch eine Listbox (schön breit machen ;-) ) und einen Button. Damit solltest Du von allen Adaptern alle DNS Server bekommen.
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)+'/'+trim(aaiAdapters[iIndexAdapter].AdapterName)); 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; |
Re: Wie bekomme ich die DNS heraus?
Hi,
vielen Dank! funktioniert perfekt! mfg saiiim |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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