C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析

C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析

概述

在C#中,获取本机IP地址是非常常见的功能,但如何获取本机所处的网络IP地址呢?本文将详细讲解获取本地内网(局域网)和外网(公网)IP地址的方法分析,并提供两条示例说明。

获取本地内网IP地址

获取本地内网(局域网)IP地址可以使用System.Net.NetworkInformation.NetworkInterface类,该类提供了获取网络接口的信息的方法,包括IP地址、MAC地址等信息。

using System.Net.NetworkInformation;
...
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
    // 找到本机第一个非回环地址的IPv4地址
    if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet || ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
    {
        foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
        {
            if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork && !IPAddress.IsLoopback(ip.Address))
            {
                Console.WriteLine($"本机内网IP地址:{ip.Address}");
                break;
            }
        }
    }
}

该代码使用了NetworkInterface.GetAllNetworkInterfaces()方法来获取所有网络接口信息,然后利用UnicastIPAddressInformation类中的Address属性获取IP地址。其中,NetworkInterfaceType用于指明网络接口类型,AddressFamily.InterNetwork表示IPv4地址,IPAddress.IsLoopback()方法用于判断是否为回环地址。

获取外网(公网)IP地址

获取外网(公网)IP地址需要借助网络请求。常用的网站为http://www.ip138.com/http://icanhazip.com/,通过访问该网站获取本机的公网IP地址。

using System.Net;
...
string content;
using (WebClient wc = new WebClient())
{
    content = wc.DownloadString("http://www.ip138.com/ip2city.asp");
}
Match match = Regex.Match(content, @"\[(.*)\]");
if (match.Success)
{
    Console.WriteLine($"本机公网IP地址:{match.Groups[1].Value}");
}

该代码使用了WebClient.DownloadString(string address)方法来获取网站的内容,然后借助正则表达式匹配IP地址。由于不同的网站可能返回的字符串格式不同,所以需要根据实际情况进行修改。

总结

本文介绍了获取本地内网(局域网)和外网(公网)IP地址的方法,分别使用了System.Net.NetworkInformation.NetworkInterfaceSystem.Net.WebClient类。实际开发中,应根据需要使用相应的方法进行IP地址获取。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析 - Python技术站

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

相关文章

  • C#之set与get方法的用法案例

    C#之set与get方法的用法案例 什么是set和get方法 set和get方法是面向对象编程中的两个方法,例如在C#中,每个类都可以有自己的属性,通过set和get方法来访问和修改这些属性。 set方法用于设置属性的值。 get方法用于获取属性的值。 set方法的使用 假设有一个名为Person的类,包含了姓名和年龄两个属性: class Person {…

    C# 2023年6月7日
    00
  • c#实现数据同步的方法(使用文件监控对象filesystemwatcher)

    下面我来详细讲解一下“c#实现数据同步的方法(使用文件监控对象filesystemwatcher)”的完整攻略。整个过程中主要包括以下几个步骤: 创建两个文件夹folder1和folder2,用于模拟需要实现的数据同步场景; 在C#的控制台应用中,创建FileSystemWatcher类的实例; 配置FileSystemWatcher的监控参数(包括路径、所…

    C# 2023年5月15日
    00
  • 基于数据类型转换(装箱与拆箱)与常量详解

    基于数据类型转换(装箱与拆箱)与常量详解 数据类型转换 数据类型转换是指将一种数据类型转换成另一种数据类型的过程。在Java中,数据类型可以分为两种:基本数据类型和引用数据类型。而数据类型转换又分为两种:自动类型转换和强制类型转换。 自动类型转换 自动类型转换是指将数据类型范围小的类型转换为数据类型范围大的类型的过程。在此过程中,系统会自动将数据类型范围小的…

    C# 2023年5月15日
    00
  • Asp.NET生成各种网页快捷方式的代码(桌面url快捷方式,收藏夹/开始菜单快捷方式)

    生成桌面和收藏夹/开始菜单快捷方式的代码在ASP.NET中比较简单,只需要使用标准的标签和javascript就行了。以下是两个生成桌面快捷方式和收藏夹/开始菜单快捷方式的完整攻略示例: 生成桌面快捷方式的代码 使用标签生成快捷方式链接 在HTML页面或ASP.NET WebForm中,你需要定义一个链接,用来作为桌面快捷方式。下面是标签的代码示例: &lt…

    C# 2023年5月31日
    00
  • ASP.NET Internet安全Forms身份验证方法

    ASP.NET Internet安全Forms身份验证方法 ASP.NET Internet安全Forms身份验证方法是一种用于保护ASP.NET Web应用程序的身份验证方法。本文将提供详细的“ASP.NET Internet安全Forms身份验证方法”的完整攻略,包括如何配置Web.config文件、如何使用Forms身份验证方法以及两个示例。 配置We…

    C# 2023年5月15日
    00
  • C#中类与接口的区别讲解

    下面是”C#中类与接口的区别讲解”的完整攻略。 类和接口的定义 C#中的类是一种具有属性、方法和事件等成员的结构化数据类型,它描述了一个对象的特征和行为。而接口则是一种只定义方法签名的结构,不包含实现的成员,它定义了与类有关的一组方法、属性和事件的规范。 类的特点 类是一种实现,它可以被实例化。 类可以包含字段、属性、构造函数、方法等成员。 类支持继承,可以…

    C# 2023年6月7日
    00
  • 大家应该掌握的多线程编程

    作为网站的作者,我很高兴能够为大家详细讲解一下“大家应该掌握的多线程编程”的完整攻略。 一、什么是多线程编程 多线程编程是一种并发编程方式,它允许程序同时执行多个任务,从而提高程序的性能和响应速度。在多线程编程中,同一时间可以运行多个线程,不同的线程可以使用共享内存或消息传递的方式进行通信。 二、为什么要学习多线程编程 多线程编程能够提高程序的响应速度和性能…

    C# 2023年5月15日
    00
  • ASP.NET Core Web资源打包与压缩技术介绍

    ASP.NET Core Web资源打包与压缩技术介绍 背景 在Web开发中,为了提高网站的性能和用户体验,我们通常会使用资源优化技术对前端资源进行打包和压缩。以ASP.NET Core为例,可以通过bundle和minfy等技术实现Web资源(如CSS、JavaScript等)的打包和压缩。 打包技术介绍 ASP.NET Core有一个官方推荐的打包工具 …

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部