Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie bekomme ich die DNS heraus? (https://www.delphipraxis.net/27093-wie-bekomme-ich-die-dns-heraus.html)

Saiiim 4. Aug 2004 07:17


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

Christian Seehase 4. Aug 2004 18:14

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 Hier im Forum suchenGetPerAdapterInfo auslesen.

Saiiim 5. Aug 2004 07:59

Re: Wie bekomme ich die DNS heraus?
 
Hi Christian!

Hier ist mal der Link: http://www.delphipraxis.net/viewtopi...peradapterinfo

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

Christian Seehase 5. Aug 2004 19:25

Re: Wie bekomme ich die DNS heraus?
 
Moin Saiiim,

Zitat:

Zitat von saiiim
nur finde ich bei der SDK keine Funktion um die DNS auslesen zu können!

sag' ich doch: GetPerAdapterInfo ;-)

Das PER geht leicht unter.

Für ein Beispiel müsstest Du mich bitte am Wochenende noch einmal erinnern.

Christian Seehase 9. Aug 2004 18:41

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;

Saiiim 11. Aug 2004 23:41

Re: Wie bekomme ich die DNS heraus?
 
Hi,

vielen Dank!

funktioniert perfekt!

mfg saiiim


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