AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie bekomme ich die DNS heraus?

Ein Thema von Saiiim · begonnen am 4. Aug 2004 · letzter Beitrag vom 11. Aug 2004
Antwort Antwort
Saiiim

Registriert seit: 29. Jul 2004
11 Beiträge
 
#1

Wie bekomme ich die DNS heraus?

  Alt 4. Aug 2004, 07:17
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
geht nit - gibts nit!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Wie bekomme ich die DNS heraus?

  Alt 4. Aug 2004, 18:14
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Saiiim

Registriert seit: 29. Jul 2004
11 Beiträge
 
#3

Re: Wie bekomme ich die DNS heraus?

  Alt 5. Aug 2004, 07:59
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
geht nit - gibts nit!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Wie bekomme ich die DNS heraus?

  Alt 5. Aug 2004, 19:25
Moin Saiiim,

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Wie bekomme ich die DNS heraus?

  Alt 9. Aug 2004, 18:41
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Saiiim

Registriert seit: 29. Jul 2004
11 Beiträge
 
#6

Re: Wie bekomme ich die DNS heraus?

  Alt 11. Aug 2004, 23:41
Hi,

vielen Dank!

funktioniert perfekt!

mfg saiiim
geht nit - gibts nit!
  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 13:02 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