< C++, VB .NET & C# Name Resolution Program Examples | Main | C#, C++, VB .NET (IP) Reverse Name Lookup Examples >


 

Chapter 7 Part 3:

IP Addressing and DNS

 

 

What do we have in this chapter 7 Part 3?

  1. C++ Asynchronous Name Resolution Program Example

  2. C# Asynchronous Name Resolution Program Example

  3. VB .NET Asynchronous Name Resolution Program Example

 

C++ Asynchronous Name Resolution Program Example

 

Create a new CLR console application and you can use AsyncResolveNameCP as the project and solution names if you want.

 

C++ Asynchronous Name Resolution Program Example - creating a new CLR console application project in Visual Studio 2008

 

Add the following code.

 

// AsyncResolveNameCP.cpp : main project file.

/// <summary>

/// This sample is designed to resolve a name asynchronously using DNS

/// forward lookup techniques and demonstrates how to do this using the

/// .Net Framework class System.Net.Dns. To run this application, simply

/// provide a name to resolve as a command line parameter. If the name

/// is found in DNS, the program will print out the primary host name

/// along with all IP addresses that are associated with the name.

/// The program will also print any alias names that are associated

/// with the name being queried.

/// </summary>

 

#include "stdafx.h"

 

using namespace System;

using namespace System::Net;

using namespace System::Net::Sockets;

 

static void ProcessDnsResults(IAsyncResult^ ar)

{

    try

    {

        IPHostEntry^ IPHost = Dns::EndGetHostEntry(ar);

        // Print out the host name that was queried

        Console::WriteLine();

        Console::WriteLine("The primary host name is: " + IPHost->HostName->ToString());

        // Print out any aliases that are found

        if (IPHost->Aliases->Length > 0)

        {

            Console::WriteLine("\nAliases found are:");

            for each (String^ Alias in IPHost->Aliases)

            {

                  Console::WriteLine(Alias);

            }

        }

 

        Console::WriteLine("\nNo Aliases found...");

        Console::WriteLine("\nIP addresses found are:");

 

        int IPv4Count = 0;

        int IPv6Count = 0;

 

        // Print out all the IP addresses that are found

        for each (IPAddress^ Address in IPHost->AddressList)

        {

             if (Address->AddressFamily == AddressFamily::InterNetwork)

            {

                IPv4Count++;

                Console::WriteLine("IPv4 Address #" + IPv4Count.ToString() + " is " + Address->ToString());

            }

            else if (Address->AddressFamily == AddressFamily::InterNetworkV6)

            {

                IPv6Count++;

                Console::WriteLine("IPv6 Address #" + IPv6Count.ToString() + " is " + Address->ToString());

            }

        }

    }

    catch (Exception^ e)

    {

         Console::WriteLine("GetHostEntry() failed with error: " + e->Message);

    }

    finally

    {

          Console::WriteLine("Finished querying DNS.");

    }

}

 

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

int main(array<System::String ^> ^args)

{

    if (args->Length < 1)

    {

        Console::WriteLine("Usage: {0} <name to resolve>", Environment::CommandLine);

        Console::WriteLine("Example: {0} www.kambing.com", Environment::CommandLine);

        Console::WriteLine("            {0}  tenouk.com", Environment::CommandLine);

        return 0;

    }

    Console::WriteLine("Instantiating the AsyncCallBack()...");

    AsyncCallback^ AsyncDnsCallback = gcnew AsyncCallback(ProcessDnsResults);

 

    try

    {

        Console::WriteLine("Executing the BeginGetHostEntry()...");

        Dns::BeginGetHostEntry(args[0]->ToString(), AsyncDnsCallback, nullptr);

    }

    catch (Exception^ e)

    {

        Console::WriteLine("BeginGetHostEntry() failed with error: " + e->Message);

    }

    Console::WriteLine("Press any key to stop this program...");

    Console::Read();

    Console::WriteLine("Read() is OK...");

    return 0;

}

 

Build and run the project. The following is the output sample.

 

C++ Asynchronous Name Resolution Program Example - a sample output

 

 

 

 

C# Asynchronous Name Resolution Program Example

 

Create a new console application project. You can use the project and solution name as shown in the following Figure if you want.

 

C# Asynchronous Name Resolution Program Example - a new console application project creation in Visual Studio 2008

 

Add the following code.

 

using System;

using System.Net;

using System.Net.Sockets;

 

/// <summary>

/// This sample is designed to resolve a name asynchronously using DNS

/// forward lookup techniques and demonstrates how to do this using the

/// .Net Framework class System.Net.Dns. To run this application, simply

/// provide a name to resolve as a command line parameter. If the name

/// is found in DNS, the program will print out the primary host name

/// along with all IP addresses that are associated with the name.

/// The program will also print any alias names that are associated

/// with the name being queried.

/// </summary>

namespace AsyncResolveNameChap6CS

{

    class Program

    {

        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        [STAThread]

        static void Main(string[ ] args)

        {

            if (args.Length < 1)

            {

                Console.WriteLine("Usage: Executable_file_name <name to resolve>");

                return;

            }

 

            AsyncCallback AsyncDnsCallback = new AsyncCallback(ProcessDnsResults);

 

            try

            {

                Dns.BeginGetHostEntry(args[0].ToString(), AsyncDnsCallback, null);

                Console.WriteLine("BeginGetHostEntry() is OK...");

            }

            catch (Exception e)

            {

                Console.WriteLine("BeginGetHostEntry() failed with error: " + e.Message);

            }

            Console.WriteLine("Press any key to stop this program...");

            Console.Read();

            Console.WriteLine("Read() is OK...");

        }

 

        static void ProcessDnsResults(IAsyncResult ar)

        {

            try

            {

                IPHostEntry IPHost = Dns.EndGetHostEntry(ar);

 

                // Print out the host name that was queried

                Console.WriteLine();

                Console.WriteLine("The primary host name is: " + IPHost.HostName.ToString());

                // Print out any aliases that are found

                if (IPHost.Aliases.Length > 0)

                {

                    Console.WriteLine("Aliases found are:");

                    foreach (string Alias in IPHost.Aliases)

                    {

                        Console.WriteLine(Alias);

                    }

                }

                Console.WriteLine("No Aliases found...");

                Console.WriteLine("IP addresses found are:");

 

                int IPv4Count = 0;

                int IPv6Count = 0;

 

                // Print out all the IP addresses that are found

                foreach (IPAddress Address in IPHost.AddressList)

                {

                    if (Address.AddressFamily == AddressFamily.InterNetwork)

                    {

                        IPv4Count++;

                        Console.WriteLine("IPv4 Address #" + IPv4Count.ToString() + " is " + Address.ToString());

                    }

                    else if (Address.AddressFamily == AddressFamily.InterNetworkV6)

                    {

                        IPv6Count++;

                        Console.WriteLine("IPv6 Address #" + IPv6Count.ToString() + " is " + Address.ToString());

                    }

                }

            }

            catch (Exception e)

            {

                Console.WriteLine("GetHostEntry() failed with error: " + e.Message);

            }

            finally

            {

                Console.WriteLine("Finished querying DNS.");

            }

        }

    }

}

 

The following is the sample output.

 

C# Asynchronous Name Resolution Program Example - a sample output

 

VB .NET Asynchronous Name Resolution Program Example

 

Create a new console application project. You can use the project and solution name as shown in the following Figure if you want.

 

VB .NET Asynchronous Name Resolution Program Example - a new console application project creation in VS 2008

 

Add the following code.

 

Imports System

Imports System.Net

Imports System.Net.Sockets

 

' This sample is designed to resolve a name asynchronously using DNS

' forward lookup techniques and demonstrates how to do this using the

' .Net Framework class System.Net.Dns. To run this application, simply

' provide a name to resolve as a command line parameter. If the name

' is found in DNS, the program will print out the primary host name

' along with all IP addresses that are associated with the name.

' The program will also print any alias names that are associated

' with the name being queried.

Module Module1

    ' The main entry point for the application.

    Sub Main()

        ' Parse command line arguments if any

        Dim args As String() = Environment.GetCommandLineArgs()

        If (args.Length < 2) Then

            Console.WriteLine("Usage: Executable_file_name <name to resolve>")

            Exit Sub

        End If

 

        Dim AsyncDnsCallback As AsyncCallback = New AsyncCallback(AddressOf ProcessDnsResults)

 

        Try

            Dns.BeginGetHostEntry(args(1).ToString(), AsyncDnsCallback, Nothing)

            Console.WriteLine("BeginGetHostEntry() is OK...")

        Catch e As Exception

            Console.WriteLine("BeginGetHostByName failed with error: " + e.Message)

        End Try

 

        Console.WriteLine("Press any key to stop this program...")

        Console.Read()

        Console.WriteLine("Read() is OK...")

    End Sub

 

    Sub ProcessDnsResults(ByVal ar As IAsyncResult)

        Try

            Dim IPHost As IPHostEntry = Dns.EndGetHostEntry(ar)

            ' Print out the host name that was queried

            Console.WriteLine()

            Console.WriteLine("The primary host name is: " + IPHost.HostName.ToString())

 

            ' Print out any aliases that are found

            If (IPHost.Aliases.Length > 0) Then

                Console.WriteLine("Aliases found are:")

                Dim CurAlias As String

                For Each CurAlias In IPHost.Aliases

                    Console.WriteLine(CurAlias)

                Next

            End If

            Console.WriteLine("No Aliases found...")

            Console.WriteLine("IP addresses found are:")

            Dim IPv4Count As Integer = 0

            Dim IPv6Count As Integer = 0

 

            ' Print out all the IP addresses that are found

            Dim Address As IPAddress

            For Each Address In IPHost.AddressList

                If (Address.AddressFamily = AddressFamily.InterNetwork) Then

                    IPv4Count = IPv4Count + 1

 

                    Console.WriteLine("IPv4 Address #" + IPv4Count.ToString() + " is " + Address.ToString())

 

                ElseIf (Address.AddressFamily = AddressFamily.InterNetworkV6) Then

                    IPv6Count = IPv6Count + 1

                    Console.WriteLine("IPv6 Address #" + IPv6Count.ToString() + " is " + Address.ToString())

                End If

            Next

        Catch e As Exception

            Console.WriteLine("GetHostEntry() failed with error: " + e.Message)

        Finally

            Console.WriteLine("Finished querying DNS.")

        End Try

    End Sub

End Module

 

The following is the sample output.

 

VB .NET Asynchronous Name Resolution Program Example - a sample output

 


< C++, VB .NET & C# Name Resolution Program Examples | Main | C#, C++, VB .NET (IP) Reverse Name Lookup Examples >