Obtaining DNS Primary and Secondary Address

Posted on 2002-03-30
Medium Priority
Last Modified: 2007-11-27
I need to know how to obtain both the primary and secondary DNS addresses from a machine currently connected to the net.

Assume that I will already know if a connection is present, I just need to obtain the DNS numbers and assign them to a String variable in the proper Quad format.
Question by:quantum2
LVL 14

Expert Comment

ID: 6909712
I don't know if this is the proper format, but if you just need to obtain it from the registry, here goes: (Win2K)

Navigate to HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Adapters

Loop through the name of the keys to obtain the network interfaces you have (they are enclosed in braces, {}, eg {E0149FCC-34D2-4158-884B-A06F3B6F0F8E})

Let's say you managed to get {E0149FCC-34D2-4158-884B-A06F3B6F0F8E} (that is, HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Adapters{E0149FCC-34D2-4158-884B-A06F3B6F0F8E}), remember the key, then navigate to HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\YourKeyName, eg. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{E0149FCC-34D2-4158-884B-A06F3B6F0F8E}

Open the key, then read the value for NameServer. The DNS servers are separated by a comma.

LVL 11

Accepted Solution

shaneholmes earned 400 total points
ID: 6911405
Try this function "GetDNSIP"

 function GetDnsIp : string;
   Output        : TStringList;
   CmdLine       : string;
   CmdLine := GetIpCfgExePath;
   if CmdLine <> '' then
     Output := TStringList.Create;
       case GetBasicOsType of
           if ExecAndGetConsoleOutput (CmdLine, Output) then
             Output.LoadFromFile (GetIpCfg9xOutPath);
           ExecAndGetConsoleOutput (CmdLine, Output);
       if GetDnsIpFromIpCfgOut (Output, DnsIp) then
         Result := DnsIp
         // Attempt to locate via registry
         Result := GetDnsIpFromReg;


function GetDnsIpFromReg : string;
   OpenKey       : HKEY;
   SubKey        : PChar;
   DataSize      : integer;
   Temp          : array [0..2048] of char;
   Result := '';
   SubKey := '';
   Vn := '';
   case GetBasicOsType of
       SubKey := REG_9X_NAMESERVER_PATH;
      Vn := REG_9X_NAMESERVER;
     VER_PLATFORM_WIN32_NT       :
     KEY_READ, OpenKey) = ERROR_SUCCESS then
     DataType := REG_SZ;
     DataSize := SizeOf(Temp);
     if RegQueryValueEx (OpenKey, Vn, nil, @DataType, @Temp,
       @DataSize) = ERROR_SUCCESS then
       Result := string(Temp);
     RegCloseKey (OpenKey);

function GetDnsIpFromIpCfgOut (const Output : TStringList;
   var DnsIp : string) : boolean;
   i     : integer;
   Result := FALSE;
   if Output.Count >= 1 then
     for i := 0 to Output.Count - 1 do
       if Pos(IPCFG_DNS_SERVER_LINE, Output[i]) > 0 then
         DnsIp := Trim(Copy (Output[i], Pos(':', Output[i])+1,
         Result := LooksLikeIp (DnsIp);

Author Comment

ID: 6942364
Thanks a bunch...
Just what I was looking for. I really apprecaite the help.


Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
This video tutorial shows you the steps to go through to set up what I believe to be the best email app on the android platform to read Exchange mail.  Get the app on your phone: The first step is to make sure you have the Samsung Email app on your …
Watch the video to know the simple way to remove or recover or reset lost or forgotten passwords of Outlook PST file. With Kernel Outlook Password Recovery tool such operation is very easy to perform. It is a freeware with limitation to use with 500…

621 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question