C# 获取本机IP地址(IPv4和IPv6)

yizhihongxing

C# 获取本机IP地址(IPv4和IPv6)攻略

在C#中,可以使用System.Net.NetworkInformation命名空间下的类来获取本机的IP地址。以下是获取本机IP地址的完整攻略。

步骤1:导入命名空间

首先,需要在代码文件的顶部导入System.Net.NetworkInformation命名空间,以便使用相关的类和方法。

using System.Net.NetworkInformation;

步骤2:获取本机IP地址(IPv4)

要获取本机的IPv4地址,可以使用NetworkInterface类的GetAllNetworkInterfaces方法来获取所有网络接口,然后遍历每个接口以获取其IP地址。

// 获取所有网络接口
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

// 遍历每个网络接口
foreach (NetworkInterface iface in interfaces)
{
    // 过滤掉非活动的接口和回环接口
    if (iface.OperationalStatus == OperationalStatus.Up && iface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
    {
        // 获取接口的IP属性集合
        IPInterfaceProperties ipProperties = iface.GetIPProperties();

        // 遍历每个IP属性
        foreach (UnicastIPAddressInformation ip in ipProperties.UnicastAddresses)
        {
            // 过滤掉非IPv4地址
            if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
            {
                // 输出IPv4地址
                Console.WriteLine(\"IPv4 Address: \" + ip.Address.ToString());
            }
        }
    }
}

步骤3:获取本机IP地址(IPv6)

要获取本机的IPv6地址,可以使用与获取IPv4地址类似的方法,只需将过滤条件更改为AddressFamily.InterNetworkV6

// 获取所有网络接口
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

// 遍历每个网络接口
foreach (NetworkInterface iface in interfaces)
{
    // 过滤掉非活动的接口和回环接口
    if (iface.OperationalStatus == OperationalStatus.Up && iface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
    {
        // 获取接口的IP属性集合
        IPInterfaceProperties ipProperties = iface.GetIPProperties();

        // 遍历每个IP属性
        foreach (UnicastIPAddressInformation ip in ipProperties.UnicastAddresses)
        {
            // 过滤掉非IPv6地址
            if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
            {
                // 输出IPv6地址
                Console.WriteLine(\"IPv6 Address: \" + ip.Address.ToString());
            }
        }
    }
}

示例说明

以下是两个示例说明,展示如何使用上述代码获取本机的IPv4和IPv6地址。

示例1:获取本机IPv4地址

using System;
using System.Net.NetworkInformation;

namespace IPAddressExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 获取所有网络接口
            NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

            // 遍历每个网络接口
            foreach (NetworkInterface iface in interfaces)
            {
                // 过滤掉非活动的接口和回环接口
                if (iface.OperationalStatus == OperationalStatus.Up && iface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
                {
                    // 获取接口的IP属性集合
                    IPInterfaceProperties ipProperties = iface.GetIPProperties();

                    // 遍历每个IP属性
                    foreach (UnicastIPAddressInformation ip in ipProperties.UnicastAddresses)
                    {
                        // 过滤掉非IPv4地址
                        if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            // 输出IPv4地址
                            Console.WriteLine(\"IPv4 Address: \" + ip.Address.ToString());
                        }
                    }
                }
            }
        }
    }
}

输出结果:

IPv4 Address: 192.168.0.100

示例2:获取本机IPv6地址

using System;
using System.Net.NetworkInformation;

namespace IPAddressExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 获取所有网络接口
            NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

            // 遍历每个网络接口
            foreach (NetworkInterface iface in interfaces)
            {
                // 过滤掉非活动的接口和回环接口
                if (iface.OperationalStatus == OperationalStatus.Up && iface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
                {
                    // 获取接口的IP属性集合
                    IPInterfaceProperties ipProperties = iface.GetIPProperties();

                    // 遍历每个IP属性
                    foreach (UnicastIPAddressInformation ip in ipProperties.UnicastAddresses)
                    {
                        // 过滤掉非IPv6地址
                        if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                        {
                            // 输出IPv6地址
                            Console.WriteLine(\"IPv6 Address: \" + ip.Address.ToString());
                        }
                    }
                }
            }
        }
    }
}

输出结果:

IPv6 Address: 2001:0db8:85a3:0000:0000:8a2e:0370:7334

以上是获取本机IP地址(IPv4和IPv6)的完整攻略,通过遍历网络接口和IP属性,可以获取本机的所有IP地址。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 获取本机IP地址(IPv4和IPv6) - Python技术站

(0)
上一篇 2023年7月31日
下一篇 2023年7月31日

相关文章

  • 修改jar包package目录结构操作方法

    修改jar包package目录结构操作方法一般需要进行以下步骤: 将jar包解压,可以使用例如winrar等压缩软件进行解压,将jar包中的所有文件解压到一个单独的文件夹中。 找到需要修改的包目录,将目录和其中的类文件复制到新的包路径中。例如,若需要将com.example.original包中的所有类移动到com.example.new包中,需要在解压出的…

    other 2023年6月26日
    00
  • 关于Idea向GitHub push代码时一直重复提示输入用户名和密码的问题

    关于Idea向GitHub push代码时一直重复提示输入用户名和密码的问题 如果你使用Idea进行代码开发并将代码通过Git进行管理,此时你需要将代码推送到GitHub上。但是在此过程中,有时候会出现Idea重复提示输入GitHub用户名和密码的问题,这不仅会降低开发效率,还会影响开发体验。下面是解决该问题的攻略: 设置Git的全局用户名和邮箱 打开Git…

    other 2023年6月27日
    00
  • mac电脑系统截图名日期后缀去除方法

    Mac电脑系统截图名日期后缀去除方法攻略 在Mac电脑系统中,截图默认会在文件名中包含日期后缀,例如\”截图 2023-08-05 下午3.30.45.png\”。如果你想去除这个日期后缀,可以按照以下步骤进行操作: 步骤一:打开终端 终端是Mac系统中的命令行工具,可以通过以下方式打开: 点击屏幕左上角的\”Spotlight\”(放大镜)图标。 输入\”…

    other 2023年8月5日
    00
  • datagridview中添加checkbox和常用处理方式.

    DataGridView中添加Checkbox和常用处理方式 DataGridView是.NET Framework中常用的控件之一,它可以用于显示和编辑数据。在DataGridView中添加Checkbox可以方便地进行多选操作。本文将详讲解如何在DataGridView中添加Checkbox以及常用的处理方式。 添加Checkbox 在DataGridV…

    other 2023年5月7日
    00
  • C语言新建临时文件和临时文件名的方法

    C语言新建临时文件和临时文件名的方法 在C语言中,新建临时文件或获取临时文件名是非常常见的操作。本文将介绍如何在C语言中进行这些操作。 新建临时文件 新建临时文件可以使用标准库函数tmpfile()。该函数会在临时目录下创建一个新文件,并用读写模式打开文件。在程序结束后,文件会自动删除。 以下是一个使用tmpfile()函数创建临时文件的示例: #inclu…

    other 2023年6月26日
    00
  • sqljoinon多表连接

    当然,我很乐意为您提供有关“SQL JOIN ON多表连接”的完整攻略。以下是详细的步骤和两个示例: 1 JOIN ON多表连接 JOIN ON是SQL中用于连接多个表的一种方法。它可以将多个表中的数据组合在一起,以便进行更复杂的查询和分析。JOIN ON通常需要指定连接条件,以便确定如何将表中的数据组合在一起。 2 JOIN ON的用法 以下是JOIN O…

    other 2023年5月6日
    00
  • Android基础入门之dataBinding的简单使用教程

    Android基础入门之dataBinding的简单使用教程 什么是dataBinding? dataBinding是Android开发中的一个功能强大的库,它允许您以声明性的方式将布局文件中的视图与数据绑定在一起。通过使用dataBinding,您可以减少手动编写繁琐的findViewById代码,并且可以更轻松地在视图和数据之间进行双向绑定。 如何使用d…

    other 2023年8月21日
    00
  • Win10创意者更新Version 1703原版ISO镜像下载地址

    Win10创意者更新Version 1703原版ISO镜像下载攻略 Win10创意者更新Version 1703是Windows 10操作系统的一个重要版本,如果你需要下载其原版ISO镜像,可以按照以下步骤进行操作: 步骤一:准备工作 在开始下载之前,确保你已经准备好以下内容: 一台可以上网的电脑 稳定的网络连接 足够的存储空间来保存ISO镜像文件 步骤二:…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部