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

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日

相关文章

  • Shell脚本中$符号的嵌套使用方法小结

    Shell脚本中$符号的嵌套使用方法小结 在Shell脚本中,$符号是一个非常重要的特殊字符,用于引用变量的值。除了直接使用$变量名来引用变量的值外,$符号还可以嵌套使用,以实现更复杂的功能。下面是关于$符号嵌套使用的一些常见方法和示例说明。 1. 变量替换 使用$符号嵌套可以在字符串中进行变量替换。具体来说,可以使用${变量名}的形式来引用变量,并在变量名…

    other 2023年7月27日
    00
  • MySQL 中字符集详细介绍

    MySQL 中字符集详细介绍 MySQL 是一种流行的关系型数据库管理系统,它支持多种字符集。字符集决定了数据库中可以存储的字符的种类和编码方式。在本攻略中,我们将详细介绍 MySQL 中的字符集,并提供两个示例说明。 1. 字符集的概念 字符集是一组字符的集合,每个字符都有一个唯一的编码值。MySQL 使用字符集来存储和处理数据。常见的字符集包括 ASCI…

    other 2023年8月19日
    00
  • Swing常用组件之单选按钮和复选框

    作为一个Java Swing网站的作者,我非常愿意为大家分享Swing常用组件之单选按钮和复选框的攻略。 什么是单选按钮和复选框? 单选按钮和复选框都是Swing中常用的按钮类型。它们都继承自JToggleButton类,支持选中和非选中两种状态,并且可以通过setSelected()方法来进行设置。区别在于单选按钮只能够选中一个,而复选框则可以选中多个。 …

    other 2023年6月26日
    00
  • wordpress制作自定义菜单的方法

    下面是制作自定义菜单的完整步骤: 1. 在WordPress后台创建菜单 在WordPress后台的“外观”-“菜单”中,创建一个新的菜单,命名为“自定义菜单”。 2. 添加自定义链接 在菜单编辑界面中,可以添加自定义链接。例如,添加一个名为“联系我们”的自定义链接,链接到网站的联系我们页面。另外,还可以添加分类、标签等。 3. 编辑菜单 在左侧的可用项列表…

    other 2023年6月25日
    00
  • rocketmq安装部署详细解析

    以下是关于“RocketMQ安装部署详细解析”的完整攻略,包括安装部署的介绍、示例说明等。 安装部署 RocketMQ是一个分布式消息列系统,用于处理大规模数据流。以下是一些常用的安装部署步骤: 下载RocketMQ安装包。 解压安装包到指定目录。 配置环境变量。 启动NameServer。 启动Broker。 验证RocketMQ是否正常运行。 示例说明 …

    other 2023年5月7日
    00
  • Mybatis resultMap标签继承、复用、嵌套方式

    MyBatis resultMap标签继承、复用、嵌套方式攻略 MyBatis是一个流行的Java持久化框架,它提供了许多强大的功能来简化数据库操作。其中,resultMap标签是一个重要的元素,用于将查询结果映射到Java对象。在本攻略中,我们将详细讲解MyBatis resultMap标签的继承、复用和嵌套方式。 继承方式 使用继承方式可以减少重复的代码…

    other 2023年7月28日
    00
  • 详解易语言模块EDgame2d的模板

    详解易语言模块EDgame2d的模板攻略 简介 EDgame2d是易语言中的一个模块,它提供了一套简单易用的2D游戏开发框架。本攻略将详细介绍如何使用EDgame2d模板来创建一个基本的游戏。 步骤 步骤一:导入模块 首先,我们需要导入EDgame2d模块。在易语言的代码中,可以使用导入模块命令来导入模块。具体的代码如下: 导入模块 EDgame2d 步骤二…

    other 2023年7月29日
    00
  • java实现双向链表的增删改

    Java语言中实现双向链表的增删改可以通过以下步骤进行。 一、创建双向链表节点类 首先,需要创建一个双向链表节点类,该类包含节点值以及指向前驱节点和后继节点的指针。以下是该类的代码实现。 public class DoublyListNode { public int val; public DoublyListNode prev; public Doubl…

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