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