Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi DNS-Einstellungen der Netzwerkadapter auslesen/ändern (https://www.delphipraxis.net/150395-dns-einstellungen-der-netzwerkadapter-auslesen-aendern.html)

Jonelmeier 15. Apr 2010 12:45


DNS-Einstellungen der Netzwerkadapter auslesen/ändern
 
Hi!
Ich suche nach einer Möglichkeit, die DNS-Server-Einstellungen der Netzwerkadapter unter Win7 mit Delphi auszulesen, bzw. diese zu ändern. Leider finde ich mit der Forensuche nichts gescheites darüber.
Ich könnte also etwas Hilfe dabei gebrauchen.

Gruß aus Hamburg!

DeddyH 15. Apr 2010 12:58

Re: DNS-Einstellungen der Netzwerkadapter auslesen/ändern
 
Ich habe hier Code gefunden und ein wenig bearbeitet (aber nicht großartig getestet, es können also noch Bugs enthalten sein):
Delphi-Quellcode:
unit iphlp;

interface

uses Windows, SysUtils, Classes;

const
  MAX_HOSTNAME_LEN   = 128;
  MAX_DOMAIN_NAME_LEN = 128;
  MAX_SCOPE_ID_LEN   = 256;

type
  //
  // TIPAddressString - store an IP address or mask as dotted decimal string
  //
  PIPAddressString = ^TIPAddressString;
  PIPMaskString   = ^TIPAddressString;
  TIPAddressString = record
    _String: array[0..(4 * 4) - 1] of Char;
  end;
  TIPMaskString = TIPAddressString;

  //
  // TIPAddrString - store an IP address with its corresponding subnet mask,
  // both as dotted decimal strings
  //
  PIPAddrString = ^TIPAddrString;
  TIPAddrString = packed record
    Next: PIPAddrString;
    IpAddress: TIPAddressString;
    IpMask: TIPMaskString;
    Context: DWORD;
  end;

  //
  // FIXED_INFO - the set of IP-related information which does not depend on DHCP
  //
  PFixedInfo = ^TFixedInfo;
  TFixedInfo = packed record
    HostName: array[0..MAX_HOSTNAME_LEN + 4 - 1] of Char;
    DomainName: array[0..MAX_DOMAIN_NAME_LEN + 4 - 1] of Char;
    CurrentDnsServer: PIPAddrString;
    DnsServerList: TIPAddrString;
    NodeType: UINT;
    ScopeId: array[0..MAX_SCOPE_ID_LEN + 4 - 1] of Char;
    EnableRouting,
    EnableProxy,
    EnableDns: UINT;
  end;


function GetNetworkParams(pFixedInfo: PFixedInfo; pOutBufLen: PULONG): DWORD; stdcall;

  // Get machine DNS Servers and return them in the provided StringList. This list should have been
  // already created by the calling program before performing this call
procedure GetDNSServers(const AList: TStrings);


implementation

const
  {$IFDEF MSWINDOWS}
  iphlpapidll = 'iphlpapi.dll';
  {$ENDIF}

function GetNetworkParams; external iphlpapidll Name 'GetNetworkParams';


procedure GetDNSServers(const AList: TStrings);
var
  pFI: PFixedInfo;
  pIPAddr: PIPAddrString;
  OutLen: Cardinal;
begin
  if not Assigned(AList) then
    raise Exception.Create('AList is not Assigned');
  AList.BeginUpdate;
  try
    AList.Clear;
    OutLen := SizeOf(TFixedInfo);
    GetMem(pFI, SizeOf(TFixedInfo));
    try
      if GetNetworkParams(pFI, @OutLen) = ERROR_BUFFER_OVERFLOW then
      begin
        ReallocMem(pFI, OutLen);
        if GetNetworkParams(pFI, @OutLen) <> NO_ERROR then Exit;
      end;
      // If there is no network available there may be no DNS servers defined
      if pFI^.DnsServerList.IpAddress._String[0] = #0 then Exit;
      // Add first server
      AList.Add(pFI^.DnsServerList.IpAddress._String);
      // Add rest of servers
      pIPAddr := pFI^.DnsServerList.Next;
      while Assigned(pIPAddr) do
      begin
        AList.Add(pIPAddr^.IpAddress._String);
        pIPAddr := pIPAddr^.Next;
      end;
    finally
      FreeMem(pFI);
    end;
  finally
    AList.EndUpdate;
  end;
end;

end.
[edit] Ob und wie sich diese Einstellungen ändern lassen, konnte ich auf die Schnelle allerdings nicht herausfinden. [/edit]

Jonelmeier 17. Apr 2010 00:16

Re: DNS-Einstellungen der Netzwerkadapter auslesen/ändern
 
Dieser Code leifert bei mir leider immer eine Leere Liste zurück, an dieser stelle wird die Prozedur einfach beendet:
Delphi-Quellcode:
// If there is no network available there may be no DNS servers defined
if pFI^.DnsServerList.IpAddress._String[0] = #0 then Exit;

RWarnecke 17. Apr 2010 07:48

Re: DNS-Einstellungen der Netzwerkadapter auslesen/ändern
 
Die folgenden WinAPI-Befehle MSDN-Library durchsuchenPIP_PER_ADAPTER_INFO, MSDN-Library durchsuchenPIP_ADPAPTER_INFO, MSDN-Library durchsuchenIP_ADDR_STRING und MSDN-Library durchsuchenGetPerAdapterInfo sollten Dir dabei helfen, die Liste der DNS-Server auszulesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 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