如何在C#中获取计算机的IP地址
				
									
					
					
						|  | 
							admin 2024年12月26日 10:4
								本文热度 1960 | 
					
				 
				前言
 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 编辑过