打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#获取本机IP地址的4种方式
userphoto

2022.09.18 河北

关注

1.使用 Dns.GetHostEntry() 函数获取本地 IP 地址

Dns 类获取与 Internet 上的主机有关的信息。在 C# 中,Dns 类中有很多方法可以实现 DNS 相关功能。其中 Dns.GetHostEntry() 函数用于获取主机的 IP 地址。
以下代码示例向我们展示了如何使用 C# 中的 Dns.GetHostEntry() 函数获取计算机的本地 IP 地址。

using System;
using System.Net;

namespace get_local_ip_address
{
    class Program
    {
        static void Main(string[] args)
        {
            IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in ipEntry.AddressList)
            {
                Console.WriteLine("IP Address: " + ip.ToString());
            }
        }
    }
}

// 输出
IP Address 0: fe80::1db8:23a7:6483:8976%20
IP Address 1: 192.168.43.239

在上面的代码中,我们将 Dns.GetHostName() 函数作为 Dns.GetHostEntry() 函数的参数传递,以获取 C# 中本地计算机的 IP 地址。这种方法的唯一问题是,它为我们提供了机器的所有 IP 地址。要获取特定的 IP 地址,我们必须使用 C# 编写以下代码。

using System;
using System.Net;

namespace get_local_ip_address
{
    class Program
    {
        static void Main(string[] args)
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    Console.WriteLine("IP Address = " + ip.ToString());
                }
            }
        }
    }
}

// 输出:
IP Address = 192.168.43.239

在上面的代码中,我们检查了 ip.AddressFamily 是否等于 AddressFamily.InterNetwork。此条件检查 ip 变量中的 IP 地址是否为 IPv4 地址。上面的代码仅返回我们计算机的 IPv4 地址。如果要获取本机的 IPv6 地址,可以使用 AddressFamily.InterNetworkV6 属性,而不是 AddressFamily.InterNetwork 属性。

2.使用 Socket.LocalEndPoint 属性获取本地 IP 地址

当有多个 IP 地址时,获取我们机器的本地 IP 地址的一种更准确的方法是连接 UDP 套接字,然后读取其本地端点。C# 中的 Socket 类实现了 Berkeley 套接字接口,该接口提供了网络通信的功能。以下代码示例向我们展示了如何使用 Socket.LocalEndPoint 属性来确定我们的计算机在 C# 中的本地 IP 地址。

using System;
using System.Net;
using System.Net.Sockets;

namespace get_local_ip_address
{
    class Program
    {
        static void Main(string[] args)
        {
            string localIP = string.Empty;
            using (Socket socket = new Socket(AddressFamily.InterNetwork, 							SocketType.Dgram, 0))
            {
                socket.Connect("8.8.8.8", 65530);
                IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
                localIP = endPoint.Address.ToString();
            }
            Console.WriteLine("IP Address = " + localIP);
        }
    }
}

// 输出:
IP Address = 192.168.43.239

在上面的代码中,我们将 socket 套接字连接到我们的本地计算机,并使用 socket.LocalEndPoint 属性提取了 socket 的本地端点。我们使用 endPoint.Address 属性来获取 endPoint 的 IP 地址。

3.使用 Linq 获取本地 IP 地址

Linq 或语言集成查询提供了 C# 中的 SQL 功能。我们还可以使用 Linq 和 Dns.GetHostEntry() 函数在 C# 中获取我们计算机的本地 IP 地址。

以下代码示例向我们展示了如何使用 Linq 在 C# 中获取计算机的本地 IP 地址。

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address
{
    class Program
    {
        static void Main(string[] args)
        {
            if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
            {
                Console.WriteLine("No Network Available");
            }

            IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

            var ippaddress =  host
                .AddressList
                .FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
            Console.WriteLine(ippaddress);
        }
    }
}

// 输出:
192.168.43.239

在上面的代码中,我们使用 C# 中的 Linq 的 Dns.GetHostEntry() 函数确定了计算机的本地 IPv4 地址。其余代码类似于我们的第一个示例;唯一的区别是,我们从 Dns.GetHostEntry() 函数返回的地址列表中仅提取了一个 IPv4 地址。

4. 使用 NetworkInterface 类获取本地 IP 地址

NetworkInterface 类包含有关本地计算机上网络接口的数据并提供网络接口的统计信息和配置。NetworkInterface 类中的 GetAllNetworkInterfaces() 函数为我们提供了本地计算机上的所有网络接口。使用了 NetworkInterface 类中的 NetworkInterfaceType 属性获取网络接口的类型。

以下代码示例显示了我们如何使用所有这些功能来获取 C# 中本地计算机的本地 IP 地址。

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address
{
    class Program
    {
        public static void getLocalIPAddressWithNetworkInterface(NetworkInterfaceType _type)
        {
            string output = "";
            foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
                {
                    foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
                    {
                        if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
                        {
                            output = ip.Address.ToString();
                        }
                    }
                }
            }
            Console.WriteLine("IP Address = " + output);
        }
        static void Main(string[] args)
        {
            getLocalIPAddressWithNetworkInterface(NetworkInterfaceType.Wireless80211);
        }
    }
}

// 输出:
IP Address = 192.168.43.239

在上面的代码中,我们使用 C# 中的 NetworkInterface 类检索了本地计算机的 WLAN IPv4 地址。上面的代码可用于获取我们本地计算机上的任何类型的 IP 地址。例如,如果要获取以太网接口的 IP 地址,则必须在函数调用中通过传递 NetworkInterfaceType.Ethernet 来指定它。

【转自】DelftStack
(对原文中的代码做了适当修改和简化,以突出主题及可对比性)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
获取本机IP地址
获取IP地址的方法
C#提示Dns.Resolve()已过时的解决方法(通过域名查询IP的完整代码)
C# Socket网络编程精华篇
Java 获取手机/平板IP地址的方法
网络基础学习
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服