前言
IP地址(Internet Protocol Address)是網(wǎng)絡(luò)上設(shè)備的唯一標(biāo)識符。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類進行更精細(xì)的控制。
示例:枚舉所有網(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 編輯過