Я не могу получить реальный IP-адрес клиента, используя заголовок X-Forwarded-For
. Мое приложение построено на Dot Net Core 1.1, а не 3.0, которая является последней. И у нас есть балансировщик нагрузки, настроенный для распределения нагрузки.
И я реализовал код, как упомянуто в статье MSDN ниже.
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.0&viewFallbackFrom=aspnetcore-1.1#forwarded-headers-middleware-options
эта статья используется для реализации
пример кода
1) Настроить сервисы с опциями переадресации
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.Configure<AppSettings>(Configuration);
services.AddMvc();
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.ForwardLimit = 2;
options.KnownProxies.Add(System.Net.IPAddress.Parse("123.111.11.88"));
//options.KnownProxies.Clear();
//options.KnownNetworks.Clear();
});
}
здесь 123.111.11.88 isпример IP-адреса балансировщика нагрузки.
2) Настройте изменения метода следующим образом:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
--------
app.UseForwardedHeaders();
-------
}
3) Код для чтения заголовков, как показано ниже:
string realClientIP = GetHeaderValueAs<string>("X-Cluster-Client-Ip");
public T GetHeaderValueAs<T>(string headerName)
{
StringValues values;
Request.Headers.TryGetValue(headerName, out values);
if (!StringValues.IsNullOrEmpty(values))
{
var rawValues = values.ToString();
if (!string.IsNullOrEmpty(rawValues))
return (T)Convert.ChangeType(values.ToString(), typeof(T));
}
return default(T);
}
запросы:
1) это правильный способ получить реальный IP-адрес клиента с помощью dot net core 1.1, так как я мог видеть, что статья MSDN предназначена для dot net core 3.0, а справочной статьи для core 1.0 нет.
2) Можно ли получить результат с помощью пользовательских заголовков и как это можно сделать, если это возможно?
3) Пожалуйста, дайте мне знать, если есть какой-либо другой способ?