C#获取真实IP地址实现方法

下面是详细讲解“C#获取真实IP地址实现方法”的完整攻略和示例:

一、获取真实IP的意义

在进行网络编程开发时,获取客户端的真实IP地址非常重要,因为很多情况下客户端和服务器之间可能存在代理服务器、反向代理等中间层,这些中间层会在请求头中添加一些信息,从而导致服务器获取到的IP地址不是客户端的真实IP地址。因此,需要通过一些技术手段来获得客户端的真实IP地址。

二、获取真实IP的实现方法

1.获取客户端IP地址的常规方法

在C#编写的Web应用程序中,可以通过查找HTTP请求头中的"X-Forwarded-For"、"Proxy-Client-IP"、"WL-Proxy-Client-IP"等信息,来获取客户端真实的IP地址。具体代码如下:

public static string GetClientIP()
{
    string ip = string.Empty;
    if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
    {
        ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim();
    }
    else
    {
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
    }
    return ip;
}

2.通过Socket获取客户端IP地址

除了常规方法外,还可以通过Socket获取客户端的真实IP地址,具体代码如下:

public static string GetClientIP()
{
    string ip = string.Empty;
    try
    {
        ip = HttpContext.Current.Request.UserHostAddress;
        if (string.IsNullOrEmpty(ip) || ip == "::1")
        {
            //如果是本地访问
            IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipAddress = ipHost.AddressList.Where(x => x.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault();
            ip = ipAddress.ToString();
        }
    }
    catch
    {
        //如果获取失败
        ip = "";
    }
    return ip;
}

三、示例

示例一:获取客户端IP地址

下面是一个WebAPI控制器的示例,该控制器可用于获取客户端IP地址:

[Route("api/[controller]")]
[ApiController]
public class IPController : ControllerBase
{
    [HttpGet]
    public IActionResult GetIP()
    {
        string ip = HttpHelper.GetClientIP();
        if (string.IsNullOrEmpty(ip))
        {
            return NotFound();
        }
        else
        {
            return Ok(ip);
        }
    }
}

上述控制器可以通过访问"http://localhost:5000/api/IP"来获取客户端IP地址。

示例二:通过Socket获取客户端IP地址

下面是一个可以通过Socket获取客户端IP地址的示例,代码如下:

Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
listenSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080));
listenSocket.Listen(10); 
while (true)
{ 
    Socket clientSocket = listenSocket.Accept(); 
    string ip = ((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString();
    Console.WriteLine(ip);
} 

上述代码会监听本地的8080端口,当有客户端连接时,会通过RemoteEndPoint属性获取客户端的IP地址。

四、总结

以上就是C#获取真实IP地址实现方法的攻略和示例。在实际开发过程中,根据实际需求和环境选择恰当的方法获取客户端IP地址。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#获取真实IP地址实现方法 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • ASP.NET Core中Startup类、Configure()方法及中间件详解

    在 ASP.NET Core 中,Startup 类是应用程序的入口点,它负责配置应用程序的服务和中间件。Configure() 方法是 Startup 类中的一个方法,它用于配置应用程序的 HTTP 请求管道。本文将详细讲解 Startup 类、Configure() 方法及中间件的相关知识。 Startup 类 Startup 类是 ASP.NET Co…

    C# 2023年5月17日
    00
  • C#的四种基本数据类型

    当我们进行C#编程时,常常需要使用到不同类型的数据,C#中共有四种基本的数据类型,它们分别是整型(int)、浮点型(float)、布尔型(bool)和字符型(char)。 整型(int) 整型在C#中表示数值,其中的值可以是正数,负数或0。整型变量可以存储在2字节、4字节或8字节内,根据使用情况可以选择适当的存储空间。下面是一个整型变量的声明和赋值示例: i…

    C# 2023年6月7日
    00
  • C#中out参数、ref参数与值参数的用法及区别

    C#中out参数、ref参数与值参数的用法及区别 C#中方法调用时有三种参数传递方式,分别是值参数、引用参数和out参数,本文将详细说明这三种参数的使用方法和区别。 值参数 值参数是默认的传递方式,当我们调用一个方法时,传递的参数就是参数的值副本,而不是原始变量。这就意味着我们不能修改原始变量的值。 示例: static void Main(string[]…

    C# 2023年6月7日
    00
  • .NET Core 依赖注入

    在.NET Core中,依赖注入(Dependency Injection,简称DI)是框架的一个重要特性,可以帮助我们解耦代码、管理对象生命周期以及提高可测试性等.一下是.NET Core中依赖注入的一些基本概念和用法:   1、服务(Service):在DI中,服务即一个对象或者类型。用于完成特定的功能.例如,数据库访问、日志记录等都可以看作一个服务  …

    C# 2023年4月27日
    00
  • c#数据库与TXT导入导出的实例

    下面就是“C#数据库与TXT导入导出的实例”的完整攻略,包含以下内容: 一、编写C#程序连接数据库 首先,需要引用System.Data.SqlClient命名空间。 csharp using System.Data.SqlClient; 然后,需要定义一个SqlConnection对象来连接数据库,这个对象需要传入一个连接字符串。其中,连接字符串中需要填写…

    C# 2023年6月1日
    00
  • 在asp.NET中字符串替换的五种方法第1/2页

    让我来为您详细讲解“在asp.NET中字符串替换的五种方法第1/2页”的完整攻略。 标题格式 在ASP.NET中字符串替换的五种方法 第1/2页 文本格式 在ASP.NET中,字符串替换是一个常见的任务。下面介绍ASP.NET中实现字符串替换的五种方法: 使用Replace()方法 使用正则表达式 使用StringBuilder 使用StringBuffer…

    C# 2023年6月8日
    00
  • WinForm导出文件为Word、Excel、文本文件的方法

    WinForm是一种典型的Windows桌面应用程序开发技术,它提供了丰富的界面控件和处理逻辑的能力。在WinForm应用中,我们需要经常使用到文件导出功能,常见的导出格式包括Word文档、Excel文档以及文本文件。本篇攻略将详细介绍WinForm导出文件为Word、Excel、文本文件的方法,并提供两个示例说明。 1. 导出Word文档 1.1 安装并引…

    C# 2023年6月1日
    00
  • 浅析如何截获C#程序产生的日志

    浅析如何截获C#程序产生的日志 在处理C#程序的开发过程中,我们通常会遇到需要对程序产生的日志进行截获的情况,这有助于我们更好地掌握程序的执行情况,进行问题排查和优化。那么如何进行日志截获呢?下面我将以两个示例来分别说明。 示例1: 使用log4net进行日志输出 首先,我们需要在程序中引入log4net。在Visual Studio中,可以通过以下步骤来实…

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