前言
IP地址(Internet Protocol Address)是網(wǎng)絡(luò)上設(shè)備的唯一標識符。IP 地址主要有本地IP地址和外網(wǎng)IP地址兩種類型。本文將介紹如何在C#中實現(xiàn)獲取IP地址的方法。
獲取本地IP地址
本地IP地址是用于本地網(wǎng)絡(luò)中的設(shè)備(如192.168.x.x)。如果我們要獲取本地IP地址,則可以通過使用System.Net命名空間提供用于處理與網(wǎng)絡(luò)相關(guān)的操作的類和方法。
示例:使用DNS的GetHostEntry方法獲取主機IP地址:
using System.Net;
namespace Fountian.WinConsole.IPDemo{ internal class Program { /// <summary> /// /// </summary> /// <param name="args"></param> /// <returns></returns> static async Task Main(string[] args) { string localIP = LocalIPAddress(); Console.WriteLine($"本地 IP 地址: {localIP}"); Console.Read(); } }}
/// <summary>/// 獲取本地 IP 地址/// </summary>/// <returns></returns>/// <exception cref="Exception"></exception>public static string LocalIPAddress(){ var host = Dns.GetHostEntry(Dns.GetHostName()); // 獲取第一個IP地址 var ipAddress = host.AddressList .FirstOrDefault(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork); if (ipAddress == null) { throw new Exception("找不到此計算機的IPv4地址"); } return ipAddress.ToString();}
如果電腦有多個網(wǎng)絡(luò)接口(例如:以太網(wǎng)或Wi-Fi),則需要通過指定要查詢的網(wǎng)絡(luò)接口。可以使用NetworkInterface類進行更精細的控制。
示例:枚舉所有網(wǎng)絡(luò)接口的IP地址:
using System.Net;using System.Net.NetworkInformation;using System.Net.Sockets;
namespace Fountian.WinConsole.IPDemo{ internal class Program { /// <summary> /// /// </summary> /// <param name="args"></param> /// <returns></returns> static async Task Main(string[] args) { foreach (var localIP in GetAllLocalIPAddresses()) { Console.WriteLine($"本地IP地址: {localIP}"); } Console.Read(); } }}
/// 獲取本地IP地址列表/// </summary>/// <returns></returns>public static string[] GetAllLocalIPAddresses(){ var ipAddressList = NetworkInterface.GetAllNetworkInterfaces() .Where(n => n.OperationalStatus == OperationalStatus.Up) .SelectMany(n => n.GetIPProperties().UnicastAddresses) .Where(a => a.Address.AddressFamily == AddressFamily.InterNetwork) .Select(a => a.Address.ToString()) .ToArray(); return ipAddressList;}
獲取外網(wǎng)IP地址
獲取外網(wǎng)IP地址無法直接從本地系統(tǒng)獲取,因為它是由路由器或ISP管理。如果我們需要獲取外網(wǎng)IP地址,則可以通過使用調(diào)用外部服務(wù)查詢。
示例:使用 HttpClient 類調(diào)用外部服務(wù)的方法查詢外網(wǎng)IP地址,下面是通過訪問 http://ifconfig.me/ip 獲取,當(dāng)然還可以使用其它的外部服務(wù)。
using System.Net;
namespace Fountian.WinConsole.IPDemo{ internal class Program { /// <summary> /// /// </summary> /// <param name="args"></param> /// <returns></returns> static async Task Main(string[] args) { string publicIP = await GetPublicIPAddressAsync(); Console.WriteLine($"外網(wǎng) IP 地址: {publicIP}"); Console.Read(); } }}
/// <summary>/// 獲取外網(wǎng) IP 地址/// </summary>/// <returns></returns>public static async Task<string> GetPublicIPAddressAsync(){ using (var client = new HttpClient()) { string url = "http://ifconfig.me/ip"; var response = await client.GetStringAsync(url); return response.Trim(); }}
注意:網(wǎng)絡(luò)請求可能由于各種原因(如沒有 Internet)而失敗。需要正常處理異常。
小結(jié)
以上使用C#實現(xiàn)獲取本地IP地址與外網(wǎng)IP地址方法中的其中一種方式,如果需要兼容IPv6,那我們獲取時則需考慮IPv6。
該文章在 2024/12/26 10:04:17 編輯過