导读:本期聚焦于小伙伴创作的《C#怎么获取内网和公网IP?C#通过外部接口获取真实IP地址有哪些方案?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么获取内网和公网IP?C#通过外部接口获取真实IP地址有哪些方案?》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,获取设备的IP地址是常见需求,内网IP可以通过本地网络配置直接获取,而公网IP属于运营商分配,需要借助外部接口才能拿到真实地址。

C#怎么获取内网和公网IP?C#通过外部接口获取真实IP地址有哪些方案?

C#获取内网IP的方法

内网IP是设备在当前局域网中的地址,我们可以通过遍历本地的网络适配器信息来获取,核心是使用System.Net.NetworkInformation命名空间下的相关类。

实现步骤

  • 获取本地计算机的所有网络适配器
  • 筛选出处于启用状态且支持IPv4的适配器
  • 提取适配器的单播IP地址,过滤掉回环地址

代码示例

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;

public class LocalIpHelper
{
    // 获取所有内网IPv4地址
    public static List<string> GetLocalIpv4()
    {
        List<string> ipList = new List<string>();
        // 获取所有网络适配器
        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        foreach (NetworkInterface adapter in interfaces)
        {
            // 筛选启用的、非回环的适配器
            if (adapter.OperationalStatus != OperationalStatus.Up) continue;
            if (adapter.NetworkInterfaceType == NetworkInterfaceType.Loopback) continue;
            // 获取适配器的IP属性
            IPInterfaceProperties properties = adapter.GetIPProperties();
            foreach (UnicastIPAddressInformation ipInfo in properties.UnicastAddressAddresses)
            {
                // 筛选IPv4地址,排除回环地址
                if (ipInfo.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    if (!IPAddress.IsLoopback(ipInfo.Address))
                    {
                        ipList.Add(ipInfo.Address.ToString());
                    }
                }
            }
        }
        return ipList;
    }
}

上述方法会返回当前设备所有可用的内网IPv4地址,如果有多个网卡(比如有线、无线、虚拟机网卡),会全部返回,开发者可以根据实际需求筛选使用。

C#通过外部接口获取公网IP的方案

公网IP是设备在公网中的唯一标识,本地无法直接获取,需要向外部提供IP查询服务的接口发送请求,从响应中提取真实公网IP。常见的方案有以下几种:

方案一:调用第三方IP查询接口

目前有很多免费的第三方接口可以直接返回请求者的公网IP,比如ipify、ipinfo等,这类接口返回格式简单,调用方便。

以下是调用ipify免费接口获取公网IP的示例:

using System;
using System.Net.Http;
using System.Threading.Tasks;

public class PublicIpHelper
{
    // 调用ipify接口获取公网IP
    public static async Task<string> GetPublicIpByIpify()
    {
        try
        {
            using (HttpClient client = new HttpClient())
            {
                // 发送GET请求,接口返回纯文本格式的IP
                string response = await client.GetStringAsync("https://api.ipify.org");
                return response.Trim();
            }
        }
        catch (Exception ex)
        {
            return $"获取失败:{ex.Message}";
        }
    }
}

方案二:请求网页类IP查询服务

有些IP查询网站会在返回的网页内容中直接展示公网IP,我们可以通过请求这类网页,解析响应内容提取IP。以ipipp.com的查询页面为例:

using System;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

public class PublicIpHelper
{
    // 从ipipp.com页面解析公网IP
    public static async Task<string> GetPublicIpByPage()
    {
        try
        {
            using (HttpClient client = new HttpClient())
            {
                // 设置UserAgent避免被服务器拒绝请求
                client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
                // 请求ipipp.com的IP查询页面
                string html = await client.GetStringAsync("https://ipipp.com");
                // 正则匹配IP地址格式(简单匹配,实际可根据页面结构调整)
                Match match = Regex.Match(html, @"bd{1,3}.d{1,3}.d{1,3}.d{1,3}b");
                if (match.Success)
                {
                    return match.Value;
                }
                return "未匹配到IP地址";
            }
        }
        catch (Exception ex)
        {
            return $"获取失败:{ex.Message}";
        }
    }
}

方案三:自建IP查询服务

如果项目对稳定性要求较高,也可以自己搭建一个简单的IP查询接口,部署在有公网访问权限的服务器上,返回请求者的RemoteAddr即可,这种方式不受第三方接口限制,稳定性更高。

不同方案对比

方案优点缺点
第三方接口调用实现简单,无需额外部署,免费接口足够日常使用依赖第三方服务,接口不稳定会导致获取失败
网页解析方案接口选择多,大部分IP查询网站都可尝试需要解析网页内容,页面结构变化会导致解析失败
自建服务方案完全可控,稳定性高,无调用限制需要额外的服务器资源,部署成本较高

开发者可以根据项目的实际需求和成本预算选择合适的方案,如果是小型项目或者测试使用,优先选择第三方免费接口即可,实现成本最低。

C#内网IP公网IP外部接口真实IP修改时间:2026-06-19 07:51:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。