Gen*_*ric 5 c# ip-address azure cloudflare asp.net-core
我在 Azure 中有一个网站,该网站通过 Cloudflare 路由以获得额外保护。
Cloudflare 添加了一个标头CF-Connecting-IP,该标头应该是客户端的 IP 地址,但有时这会提供真实的 IP 地址,但大多数时候我会获得保留的 IP 地址而不是客户端的 IP。
我测试了它通过我的办公室互联网访问该网站,cloudflare 返回一个保留的 IP 地址,但是当我访问 Whatsmyip.org 时,我得到了我真实的办公室 IP 地址。
我怎样才能确保始终获得客户端的 IP 地址,除非它们位于代理或 VPN 之后。
根据Masoud ch 的回答,.NET Core 版本可能看起来像这样,IHttpContextAccessor而不是使用HttpRequestBase:
using Microsoft.AspNetCore.Http;
using System.Linq;
namespace myproject.Extensions
{
public static class HttpContextAccessorExtensions
{
public static string GetIpAddress(this IHttpContextAccessor accessor)
{
if (!string.IsNullOrEmpty(accessor.HttpContext.Request.Headers["CF-CONNECTING-IP"]))
return accessor.HttpContext.Request.Headers["CF-CONNECTING-IP"];
var ipAddress = accessor.HttpContext.GetServerVariable("HTTP_X_FORWARDED_FOR");
if (!string.IsNullOrEmpty(ipAddress))
{
var addresses = ipAddress.Split(',');
if (addresses.Length != 0)
return addresses.Last();
}
return accessor.HttpContext.Connection.RemoteIpAddress.ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
要在控制器中使用扩展,请执行以下操作:
HomeController.cs
private readonly IHttpContextAccessor _accessor;
public HomeController(IHttpContextAccessor httpContextAccessor)
{
_accessor = httpContextAccessor; // Dependency Injection:
}
public IActionResult Index()
{
var IP = _accessor.GetIpAddress());
return View();
}
Run Code Online (Sandbox Code Playgroud)
他们提供 CF-Connect ing -IP,这应该是正确的。
我不确定 CF-Connect ion -IP中会包含什么
| 归档时间: |
|
| 查看次数: |
6461 次 |
| 最近记录: |