如何在C#中获取计算机的IP地址
|
admin
2024年12月26日 10:4
本文热度 185
|
前言
IP地址(Internet Protocol Address)是网络上设备的唯一标识符。IP 地址主要有本地IP地址和外网IP地址两种类型。本文将介绍如何在C#中实现获取IP地址的方法。
获取本地IP地址
本地IP地址是用于本地网络中的设备(如192.168.x.x)。如果我们要获取本地IP地址,则可以通过使用System.Net命名空间提供用于处理与网络相关的操作的类和方法。
示例:使用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();
}
如果电脑有多个网络接口(例如:以太网或Wi-Fi),则需要通过指定要查询的网络接口。可以使用NetworkInterface类进行更精细的控制。
示例:枚举所有网络接口的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;
}
获取外网IP地址
获取外网IP地址无法直接从本地系统获取,因为它是由路由器或ISP管理。如果我们需要获取外网IP地址,则可以通过使用调用外部服务查询。
示例:使用 HttpClient 类调用外部服务的方法查询外网IP地址,下面是通过访问 http://ifconfig.me/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 publicIP = await GetPublicIPAddressAsync();
Console.WriteLine($"外网 IP 地址: {publicIP}");
Console.Read();
}
}
}
/// <summary>
/// 获取外网 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();
}
}
注意:网络请求可能由于各种原因(如没有 Internet)而失败。需要正常处理异常。
小结
以上使用C#实现获取本地IP地址与外网IP地址方法中的其中一种方式,如果需要兼容IPv6,那我们获取时则需考虑IPv6。
该文章在 2024/12/26 10:04:17 编辑过