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日

相关文章

  • C# BinarySearch(Object):在整个集合中搜索指定的对象,并返回第一个匹配项的索引

    C# BinarySearch(Object) 方法完整攻略 1. 方法简介 C# BinarySearch(Object) 方法用于在已排序的一维数组中搜索指定的对象,并返回数组中指定对象的索引。该方法采用二分查找算法,如果搜索到指定对象则返回该对象的索引,否则返回一个负数。 2. 方法声明 public static int BinarySearch(A…

    C# 2023年4月19日
    00
  • C#配置文件Section节点处理总结

    C#配置文件是存储应用程序的重要组成部分,通常包括键值对和节点等信息。其中节点是配置文件的逻辑分组,为了更好地管理配置文件,我们可以对它们进行统一管理,这就需要使用到配置文件的Section节点处理。 Section节点的概念 Section节点代表一个配置文件的逻辑分组,称为一个配置文件“段落”,它可以包含若干个键值对。Section节点是配置文件的一个顶…

    C# 2023年6月1日
    00
  • C# DateTime.AddMinutes()方法: 将指定的分钟数加到指定的日期上

    DateTime.AddMinutes()是C#语言中DateTime类型的一个方法,它可以在现有日期上增加指定的分钟数,并返回得到的新日期(新的DateTime对象)。其具体定义为 public DateTime AddMinutes(double value),其中value表示要增加的分钟数,可以是正数(增加)也可以是负数(减少)。 下面是DateTi…

    C# 2023年4月19日
    00
  • C#实现简单的聊天窗体

    C#实现简单的聊天窗体 1. 确定窗体样式和布局 简单的聊天窗体通常包含一个用于显示聊天记录的文本框,一个用于输入聊天信息的文本框和一个发送按钮。布局可以使用WinForm中自带的TableLayoutPanel或者Panel组件自行进行布局设置。 2. 实现简单的网络通信 为了实现聊天功能,我们需要使用一些网络通信相关的库来帮助我们达成通信的目标,例如.N…

    C# 2023年6月1日
    00
  • .Net 自定义转换器JsonConverter的使用详解

    什么是JsonConverter JsonConverter是.Net框架中提供的一种用于序列化和反序列化Json格式数据的类库,它可以通过自定义转换器来灵活地完成对象和Json之间的转换。 如何使用JsonConverter 2.1 引用命名空间 为了使用JsonConverter类库,我们需要在代码中引入Newtonsoft.Json命名空间。 usin…

    C# 2023年6月3日
    00
  • c#二维码生成的代码分享

    下面是关于“C#二维码生成的代码分享”的完整攻略: 目录 前言 准备工作 安装QRCoder 使用QRCoder生成二维码 示例说明 前言 随着移动应用和微信公众号的普及,二维码已经成为了一个不可或缺的元素。今天,我们就来学习一下如何使用C#来生成二维码。 准备工作 在开始之前,我们需要确保以下几个条件: 你已经安装了Visual Studio 2017或更…

    C# 2023年6月7日
    00
  • C#中的匿名函数、lambda表达式解读

    C#中的匿名函数、lambda表达式解读 在C#中,匿名函数和lambda表达式提供了更强大、更简洁的代码实现方式,这两个概念通常都是一起出现的。 匿名函数 匿名函数就是没有名字的函数,在C#中可以使用delegate来定义。匿名函数主要有以下两种形式: delegate (parameters) { statements } delegate { stat…

    C# 2023年6月1日
    00
  • 非常实用的C#字符串操作处理类StringHelper.cs

    我们来详细讲解一下C#字符串操作处理类StringHelper.cs。 一、概述 StringHelper.cs是一个字符串操作类,主要提供了一些常见的字符串操作方法。这些方法包括截取字符串、判断字符串是否为空、去除字符串中的空格等。 二、类中方法的介绍 下面我们来分别介绍该类中的方法。 1. IsNullOrEmpty public static bool…

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