string hostName = Dns.GetHostName();
Console.WriteLine($"主機名稱:{hostName}");
IPHostEntry hostEntry = Dns.GetHostEntry(hostName); // 建議用 GetHostEntry 取代過時的 GetHostByName
foreach (IPAddress ip in hostEntry.AddressList)
{
Console.WriteLine($"IP 位址:{ip}");
}
using System;
using System.Net;
class Program
{
static void Main()
{
string hostName = Dns.GetHostName();
Console.WriteLine($"主機名稱:{hostName}");
try
{
IPHostEntry hostEntry = Dns.GetHostEntry(hostName);
foreach (IPAddress ip in hostEntry.AddressList)
{
Console.WriteLine($"IP 位址:{ip} ({ip.AddressFamily})");
}
}
catch (SocketException ex)
{
Console.WriteLine($"解析失敗:{ex.Message}");
}
Console.ReadKey();
}
}
| 類別/方法 | 用途 |
|---|---|
Dns.GetHostName() | 取得本機 DNS 主機名稱 |
Dns.GetHostEntry(string) | 依主機名稱解析 IP 位址清單(支援 IPv4/IPv6) |
IPHostEntry.AddressList | 回傳 IPAddress[],包含所有解析到的位址 |
IPAddress.ToString() | 標準點分十進制或 IPv6 字串表示 |
AddressList 會包含所有介面的 IP(含 IPv6、回環、虛擬網卡),需依 AddressFamily 過濾。Dns.GetHostByName 已標記過時,請改用 GetHostEntry。Dns.GetHostEntryAsync 避免阻塞主執行緒。https://ipinfo.io/ip)。var ipv4Addresses = Dns.GetHostEntry(Dns.GetHostName())
.AddressList
.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
.Select(ip => ip.ToString())
.ToList();
System.Net.Dns 提供簡潔的 API 取得主機身分資訊,配合 LINQ 即可靈活過濾所需位址。記得處理例外與非同步情境,才能寫出健壯的網路程式。