AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi DNS-Einstellungen der Netzwerkadapter auslesen/ändern
Thema durchsuchen
Ansicht
Themen-Optionen

DNS-Einstellungen der Netzwerkadapter auslesen/ändern

Ein Thema von Jonelmeier · begonnen am 15. Apr 2010 · letzter Beitrag vom 17. Apr 2010
Antwort Antwort
Jonelmeier

Registriert seit: 27. Sep 2007
Ort: Hamburg
96 Beiträge
 
Delphi XE Starter
 
#1

DNS-Einstellungen der Netzwerkadapter auslesen/ändern

  Alt 15. Apr 2010, 13:45
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!
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: DNS-Einstellungen der Netzwerkadapter auslesen/ändern

  Alt 15. Apr 2010, 13:58
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jonelmeier

Registriert seit: 27. Sep 2007
Ort: Hamburg
96 Beiträge
 
Delphi XE Starter
 
#3

Re: DNS-Einstellungen der Netzwerkadapter auslesen/ändern

  Alt 17. Apr 2010, 01:16
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;
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: DNS-Einstellungen der Netzwerkadapter auslesen/ändern

  Alt 17. Apr 2010, 08:48
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.
Rolf Warnecke
App4Mission
  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 03:48 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