Чтение заголовка X-Forwarded-For

Я хочу прочитать значение X-Forwarded-For в запросе.

Я пробовал

HttpContext.Current.Request.Headers["X-Forwarded-For"].Split(new char[] { ',' }).FirstOrDefault();  

в С#.

ИЛИ мне нужно разделить заголовок на ":" и взять вторую строку? Я спрашиваю об этом, потому что, по словам Википедии,

Общий формат поля: X-Forwarded-For: client1, proxy1, proxy2

Ответы

Ответ 1

Формат, который вы получаете в ответ, client1, proxy1, proxy2

Итак, вы разделили его на запятую и первыми увидели ip вашего клиента.

Ответ 2

Если это помогает, это простой способ получить IP-адрес пользователя, учитывая заголовок X_FORWARDED_FOR

var forwardedFor = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

var userIpAddress = String.IsNullOrWhiteSpace(forwardedFor) ?
    Request.ServerVariables["REMOTE_ADDR"] : forwardedFor.Split(',').Select(s => s.Trim()).First();

Ответ 3

Не забывайте, что X-Forwarded-For может содержать любой клиент, который там пишет. Он может содержать XSS или SQL-инъекцию внутри.

Ответ 4

Иногда первый может содержать один из локальных (закрытых) зарезервированных адресов, который не является полезным. Также первая позиция (позиции) открыта для подмены.

В приведенном ниже ответе предлагается идти справа налево, пока вы не нажмете на публичный адрес.

https://husobee.github.io/golang/ip-address/2015/12/17/remote-ip-go.html