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

C# 取得本機主機名稱與 IP 位址完整指南

     編輯:關於C#

在網路程式設計中,取得本機主機名稱與 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

關鍵 API 說明

方法說明備註
Dns.GetHostName() 取得本機 DNS 主機名稱 不需參數,回傳字串
Dns.GetHostEntry(string) 解析主機名稱或 IP 取得完整資訊 推薦使用,支援 IPv4/IPv6
Dns.GetHostAddresses(string) 直接取得 IP 位址陣列 簡化版,僅需 IP 清單時使用

進階:篩選 IPv4 位址

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 位址";
}

常見問題與注意事項

  • 多網卡環境:會回傳所有網卡的 IP,需依需求篩選
  • IPv6 支援:AddressList 包含 IPv6 位址,AddressFamily.InterNetworkV6
  • DNS 解析失敗:網路異常時會拋 SocketException,建議包裹 try-catch
  • 過時方法:Dns.GetHostByName 已標記過時,請改用 GetHostEntry
  • 權限需求:通常無特殊權限需求,但在高安全性環境可能受限

應用場景

  • 用戶端識別與日誌記錄
  • 網路診斷工具開發
  • 分散式系統節點註冊
  • 防火牆/存取控制規則產生
  • Web 應用程式記錄用戶來源 IP

掌握 System.Net.Dns 的基本用法,即可輕鬆在 C# 應用程式中獲取網路身分資訊,為網路程式開發奠定基礎。

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