Как получить IP-адрес клиента в .net-core вместо балансировщиков нагрузки? (используя X-Forwarded-For)

Я просто пытаюсь получить IP-адрес клиента в контроллере .net-core после того, как они POST. У нас есть балансировщик нагрузки между клиентом и сервером.

Настройка в моем стартапе:

            services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders =
                    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
            });

И настроить:

app.UseForwardedHeaders();

Затем я пытаюсь вызвать приведенный ниже код, но он возвращает IP-адрес балансировщика нагрузки, а не IP-адрес клиента:

var clientIpAddress = HttpContext.Connection.RemoteIpAddress.ToString();

Я перепробовал все, что мог найти на этом веб-сайте и в документации, и ничего не работает. Я также пытался использовать HttpContext.Request.Headers["X-Forwarded-For"], который возвращает null/пусто.

Наша команда OPS говорит, что IP-адрес не изменяется балансировщиком и должен быть в значении заголовка x-Forwarded-For. Почему балансировщик нагрузки отправляет обратно свой IP-адрес, а не IP-адрес клиента?


person st0rch1991    schedule 29.01.2021    source источник
comment
SO не может помочь вам решить, кто не прав - ясно, что если вы не видите заголовок в запросе, этого заголовка там нет. Либо вы не знаете, где работает ваш код/какие другие прокси находятся на пути между клиентом и сервером, либо ваша команда OPS не сообщает вам все подробности о заголовке... Поскольку вы, очевидно, пытались вызвать свой код напрямую с помощью этот заголовок, и он сработал, я не понимаю, как SO может помочь.   -  person Alexei Levenkov    schedule 29.01.2021


Ответы (2)


Вы можете попробовать этот метод, чтобы получить IP-адрес клиента:

1. Добавьте пакет Microsoft.AspNet.HttpOverrides.

2. В методе configure() добавьте приведенный ниже код.

app.UseOverrideHeaders(new OverrideHeaderMiddlewareOptions
 {
    ForwardedOptions = ForwardedHeaders.XForwardedFor | 
                       ForwardedHeaders.XForwardedProto
 });
person samwu    schedule 29.01.2021

В X-Forwarded-For вы получите клиент ip,proxy1 & proxy2.

Получите первый элемент IP-адреса клиента/пользователя. Первый элемент — исходный IP-адрес клиента.

HttpContext.Current.Request.Headers["X-Forwarded-For"].Split(new 
char[] { ',' }).FirstOrDefault()
person JKC    schedule 29.01.2021
comment
Но он ничего не возвращает, как указано выше. Я ничего не возвращаю. - person st0rch1991; 29.01.2021