ASP.NET Core获取用户IPv6地址

在 ASP.NET Core 中,可以通过 HttpContext.Connection.RemoteIpAddress 获取客户端的 IP 地址,包括 IPv4 和 IPv6。以下是几种获取 IPv6 地址的方法:

方法 1:直接从 HttpContext.Connection.RemoteIpAddress 读取

public string GetClientIp(HttpContext context)
{
    var ipAddress = context.Connection.RemoteIpAddress;
    return ipAddress?.ToString();
}

如果客户端使用 IPv6,则返回的就是 IPv6 地址。

方法 2:通过 Request.Headers 获取真实 IP

如果服务器部署在 反向代理(如 Nginx、Cloudflare)后,RemoteIpAddress 可能返回的是代理服务器的 IP,你需要从 X-Forwarded-For 或 X-Real-IP 头部获取客户端真实 IP:

public string GetClientIp(HttpContext context)
{
    var headers = context.Request.Headers;

    if (headers.ContainsKey("X-Forwarded-For"))
    {
        return headers["X-Forwarded-For"].ToString().Split(',')[0].Trim();
    }
    else if (headers.ContainsKey("X-Real-IP"))
    {
        return headers["X-Real-IP"].ToString();
    }

    return context.Connection.RemoteIpAddress?.ToString();
}

注意:需要在 反向代理服务器(如 Nginx、Apache)上配置 X-Forwarded-For,否则 Request.Headers 可能为空。

方法 3:检查是否为 IPv6

如果你只想获取 IPv6 地址,可以增加一个判断:

public string GetClientIPv6(HttpContext context)
{
    var ipAddress = context.Connection.RemoteIpAddress;

    if (ipAddress != null && ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
    {
        return ipAddress.ToString();
    }

    return "No IPv6 Address Detected";
}

方法 4:在 Controller 端点中使用

如果你在 ASP.NET Core API 控制器 中,可以这样调用:

[ApiController]
[Route("api/[controller]")]
public class IpController : ControllerBase
{
    [HttpGet("get-ip")]
    public IActionResult GetIp()
    {
        var clientIp = HttpContext.Connection.RemoteIpAddress?.ToString();
        return Ok(new { IP = clientIp });
    }
}

IPv4和IPv6的区别

IPv4 和 IPv6 的主要区别在于地址长度、数量、安全性和配置方式。IPv4 使用 32 位地址,支持约 42 亿个地址,而 IPv6 使用 128 位地址,几乎可无限分配,解决了 IPv4 地址枯竭问题。此外,IPv6 具备更高的安全性,原生支持 IPsec,加密通信更安全,同时支持自动地址配置(SLAAC),无需 DHCP 服务器。而 IPv4 依赖 NAT 共享 IP,网络管理较为复杂。IPv6 还优化了数据包头部结构,提高传输效率,并用组播替代广播,减少网络拥塞,使其更适应未来互联网的发展。

总结

  • 默认方式:HttpContext.Connection.RemoteIpAddress 适用于一般情况。
  • 反向代理情况:需要从 Request.Headers["X-Forwarded-For"] 获取真实 IP。
  • IPv6 判断:使用 AddressFamily.InterNetworkV6 检测是否是 IPv6。

这样,你就可以正确获取用户的 IPv6 地址了!

您可能感兴趣:

DOVE 网络加速器 梯子 免费 试用

评论 添加
暂无评论,来聊两句?