首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# .NET Dns 類別常用方法詳解與實戰範例

     編輯:關於C#

System.Net.Dns 類別提供簡單的 DNS 解析功能,是網路程式開發的基礎工具。本文整理其核心靜態方法、參數說明,並提供常見使用情境的完整程式碼範例。

核心靜態方法速查表

方法說明回傳型別
GetHostAddresses(string)解析主機名或 IP 字串,回傳所有 IP 位址IPAddress[]
GetHostEntry(string)解析主機名或 IP,回傳完整 IPHostEntry (含主機名、別名、位址清單)IPHostEntry
GetHostName()取得本機主機名稱string
Resolve(string)已過時,建議改用 GetHostEntryIPHostEntry
BeginGetHostAddresses / EndGetHostAddresses非同步版本IAsyncResult / IPAddress[]

重要方法詳細說明

1. GetHostAddresses(string hostNameOrAddress)

最常用的方法,直接回傳 IP 位址陣列。支援 IPv4 與 IPv6。

IPAddress[] ips = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ips)
    Console.WriteLine(ip); // 可能輸出多個 IPv4/IPv6 位址

2. GetHostEntry(string hostNameOrAddress)

取得更豐富的 IPHostEntry 物件,包含:

  • HostName:標準主機名稱
  • Aliases:別名陣列
  • AddressList:IP 位址陣列
IPHostEntry entry = Dns.GetHostEntry("localhost");
Console.WriteLine($"主機名: {entry.HostName}");
Console.WriteLine($"位址數: {entry.AddressList.Length}");

3. GetHostName()

取得本機 DNS 主機名稱,不需參數。

string localName = Dns.GetHostName();
Console.WriteLine($"本機名稱: {localName}");

實戰範例:完整的主機資訊查詢工具

using System;
using System.Net;

public class DnsQueryDemo
{
    public static void Main()
    {
        Console.Write("請輸入主機名或 IP: ");
        string input = Console.ReadLine().Trim();

        try
        {
            // 1. 解析取得 IPHostEntry
            IPHostEntry hostEntry = Dns.GetHostEntry(input);

            Console.WriteLine($"\n=== 解析結果 ===");
            Console.WriteLine($"標準主機名: {hostEntry.HostName}");
            Console.WriteLine($"別名清單: {(hostEntry.Aliases.Length > 0 ? string.Join(", ", hostEntry.Aliases) : "無")}");
            Console.WriteLine($"IP 位址清單:");

            foreach (IPAddress ip in hostEntry.AddressList)
            {
                Console.WriteLine($"  {ip} ({ip.AddressFamily})");
            }
        }
        catch (SocketException ex)
        {
            Console.WriteLine($"DNS 解析失敗: {ex.Message} (錯誤碼: {ex.SocketErrorCode})");
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine($"輸入格式錯誤: {ex.Message}");
        }
    }
}

進階主題

  • 非同步解析:UI 應用程式應使用 BeginGetHostEntry/EndGetHostEntry 或 Task.Run(() => Dns.GetHostEntry(...)) 避免阻塞主執行緒。
  • DNS 快取:.NET 內建 DNS 快取 (預設 TTL 2 分鐘),可透過 DnsCache 相關設定調整,或呼叫 Dns.RefreshCache() (需 .NET Core 3.1+ / .NET 5+) 強制刷新。
  • IPv6 支援:GetHostAddresses 同時回傳 IPv4 與 IPv6,篩選時可用 ip.AddressFamily == AddressFamily.InterNetwork (IPv4) 或 InterNetworkV6 (IPv6)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved