Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

NSLookup from ASP.NET

0.00/5 (No votes)
20 Jan 2015 1  
NSLookup from ASP.NET

Today, I found myself writing code to review the validity of the many, err, dozens of domain names that I oversee. I wanted to incorporate this into my personal intranet site, written in ASP.NET using the 4.5RC framework.

The task was to validate whether a domain name was correctly delegated, with valid A records pointing at one or more of my web servers, or externally hosted servers.

Using the system.net assembly to query a domain record is relatively trivial, but using it to query external name server delegation proved to be somewhat cumbersome, so I decided to simply use Window’s built in nslookup tool, available since Windows 2000 (and maybe earlier!).

Calling an executable from within an IIS thread is always risky, but since it’s only myself using it, a quick hack is more than adequate.

So I wrote a little function (well, expanded on a fairly popular extract), that simply calls nslookup and returns the full text of the results. This text can then be parsed to retrieve name server and other details, depending on what you are after.

In VB:

Function RunCmd(ParamArray commands As String()) As String
        Dim returnvalue As String = String.Empty

        Dim info As New ProcessStartInfo("cmd")
        info.UseShellExecute = False
        info.RedirectStandardInput = True
        info.RedirectStandardOutput = True
        info.CreateNoWindow = True

        Using process__1 As Process = Process.Start(info)
            Dim sw As StreamWriter = process__1.StandardInput
            Dim sr As StreamReader = process__1.StandardOutput

            For Each command As String In commands
                sw.WriteLine(command)
            Next

            sw.Close()
            returnvalue = sr.ReadToEnd()
        End Using

        Return returnvalue
    End Function

or in C#:

public string RunCmd(params string[] commands) {
  string returnvalue = string.Empty;

  ProcessStartInfo info = new ProcessStartInfo("cmd");
  info.UseShellExecute = false;
  info.RedirectStandardInput = true;
  info.RedirectStandardOutput = true;
  info.CreateNoWindow = true;

  using (Process process__1 = Process.Start(info)) {
    StreamWriter sw = process__1.StandardInput;
    StreamReader sr = process__1.StandardOutput;

    foreach (string command in commands) {
      sw.WriteLine(command);
    }

    sw.Close();
    returnvalue = sr.ReadToEnd();
  }
  
return returnvalue;
}

Calling the function is as simple as this:

  • VB - Dim results As String = RunCmd(“google.com.au 8.8.8.8″)
  • C# - string results = RunCmd(“google.com.au 8.8.8.8″);

The first component is the domain name, the second is the name server you wish to query.

Of course, these functions are just generic shell execution wrappers, so can be used for any query or command you want to run, server-side.

Use this as you will – there is no validation, not at all elegant, but works fine for me. Smile | :) If it burns down your house and turns your code into mush, then don’t blame me.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here