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

C# 取得本機主機名稱與 IP 位址

     編輯:關於C語言

一行碼搞定主機名稱

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

解析 IP 位址清單

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。
  • 非同步版本:UI 應用程式請使用 Dns.GetHostEntryAsync 避免阻塞主執行緒。
  • 外部公網 IP:本機 API 只能取得區域網路 IP;若需公網 IP,需呼叫外部服務(如 https://ipinfo.io/ip)。

進階:只取得 IPv4 位址

var ipv4Addresses = Dns.GetHostEntry(Dns.GetHostName())
    .AddressList
    .Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
    .Select(ip => ip.ToString())
    .ToList();

結語

System.Net.Dns 提供簡潔的 API 取得主機身分資訊,配合 LINQ 即可靈活過濾所需位址。記得處理例外與非同步情境,才能寫出健壯的網路程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved