在網路程式設計中,取得本機主機名稱與 IP 位址是基礎需求。C# 透過 System.Net.Dns 類別提供簡潔的 API 達成此目標。
using System;
using System.Net;
public class NetworkInfo
{
public static void DisplayLocalNetworkInfo()
{
// 1. 取得主機名稱
string hostName = Dns.GetHostName();
Console.WriteLine($"主機名稱:{hostName}");
// 2. 解析主機名稱取得 IP 位址清單
// 注意:GetHostByName 已過時,建議使用 GetHostEntry
IPHostEntry hostEntry = Dns.GetHostEntry(hostName);
Console.WriteLine("IP 位址清單:");
foreach (IPAddress ip in hostEntry.AddressList)
{
Console.WriteLine($" {ip.AddressFamily}: {ip}");
}
}
}
// 執行結果範例:
// 主機名稱:DESKTOP-ABC123
// IP 位址清單:
// InterNetwork: 192.168.1.100
// InterNetworkV6: fe80::1a2b:3c4d:5e6f:7890%12
// InterNetworkV6: ::1
| 方法 | 說明 | 備註 |
|---|---|---|
Dns.GetHostName() |
取得本機 DNS 主機名稱 | 不需參數,回傳字串 |
Dns.GetHostEntry(string) |
解析主機名稱或 IP 取得完整資訊 | 推薦使用,支援 IPv4/IPv6 |
Dns.GetHostAddresses(string) |
直接取得 IP 位址陣列 | 簡化版,僅需 IP 清單時使用 |
public static string GetLocalIPv4Address()
{
string hostName = Dns.GetHostName();
IPHostEntry hostEntry = Dns.GetHostEntry(hostName);
// 優先回傳非回環的 IPv4 位址
var ipv4 = hostEntry.AddressList
.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork
&& !IPAddress.IsLoopback(ip));
return ipv4?.ToString() ?? "無可用 IPv4 位址";
}
AddressList 包含 IPv6 位址,AddressFamily.InterNetworkV6SocketException,建議包裹 try-catchDns.GetHostByName 已標記過時,請改用 GetHostEntry掌握 System.Net.Dns 的基本用法,即可輕鬆在 C# 應用程式中獲取網路身分資訊,為網路程式開發奠定基礎。