C#-輸入主機名,使用Dns類解析出對應的IP地址信息

C#中使用Dns相關類查詢主機名對應的IP地址等信息

C#中的Dns類能夠與默認的DNS服務器進行通信,以檢索IP地址。
下面的DnsLookup示例代碼使用了以下名稱空間:

  • System
  • System.Net
  • System.Threading.Tasks
    樣例應用程序實現一個控制檯程序(包),要求用戶輸入主機名(也可以添加一個IP地址),
    通過Dns.GetHostEntryAsync得到一個IPHostEntry。在IPHostEntry中,使用AddressList屬性訪問地址列表。
    主機的所有地址以及AddressFamily都寫入控制檯。(代碼文件 DnsLookup/Program.cs):
using System;
using System.Threading.Tasks;
using System.Net;

namespace DnsLookup
{
    class Program
    {
        /// <summary>
        /// 樣例應用程序實現一個控制檯程序(包),要求用戶輸入主機名(也可以添加一個IP地址),
        /// 通過Dns.GetHostEntryAsync得到一個IPHostEntry。在IPHostEntry中,使用AddressList屬性訪問地址列表。
        /// 主機的所有地址以及AddressFamily都寫入控制檯。
        /// 
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        static async Task Main(string[] args)
        {
            do
            {
                Console.Write("Hostname:\t");
                string hostname = Console.ReadLine();
                if (hostname.CompareTo("exit") == 0)
                {
                    Console.WriteLine("bye!");
                    return;
                }
                await OnLookupAsync(hostname);
                Console.WriteLine();
            } while (true);
        }

        public static async Task OnLookupAsync(string hostname)
        {
            try
            {
                IPHostEntry ipHost = await Dns.GetHostEntryAsync(hostname);
                Console.WriteLine($"Hostname: {ipHost.HostName}");
                foreach (IPAddress address in ipHost.AddressList)
                {
                    Console.WriteLine($"Address Family: {address.AddressFamily}");
                    Console.WriteLine($"Address: {address}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

在VS2017創建一個基於C#的控制檯應用程序,運行應用程序,輸入幾個主機名,得到如下輸出:
DNS
對於主機名 www.orf.at, 可以看到這個主機名定義了多個IP地址。

注意:
Dns類是比較有限的,例如不能指定使用非默認的DNS服務器。此外,IPHostEntry的Aliasess屬性不在GetHostEntryAsync方法中填充。它只在Dns類的過時方法中填充。而且這些方法也不完全地填充這個屬性。要充分利用DNS查找功能,最好使用第三方庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章