LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

如何在C#中获取计算机的IP地址

admin
2024年12月26日 10:4 本文热度 102

前言

 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();        }    }}
/// <summary>///  获取本地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 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved