读取X-Forwarded-For标题

时间:2011-06-11 15:35:17

标签: c# asp.net

我想读取请求中X-Forwarded-For标头值的值。

我试过

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

在C#中。

或者我需要将标题分割为":"并取出第二个字符串吗? 我问这个是因为,维基百科说

  

该领域的一般格式是:   X-Forwarded-For:client1,proxy1,proxy2

4 个答案:

答案 0 :(得分:17)

您获得的格式是 client1,proxy1,proxy2

所以你用逗号分开它,然后第一个看到你客户的ip。

答案 1 :(得分:7)

如果有帮助,这是一种获取用户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();

答案 2 :(得分:3)

不要忘记X-Forwarded-For可以包含任何客户端写入的内容。它可以包含XSS或SQL注入。

答案 3 :(得分:3)

有时第一个可能包含一个本地(私有)保留地址,这是无用的。第一个位置也可以进行欺骗。

更新 - 2018年4月:对第一个地址为本地(私有)的实时制作网站的案例进行抽样,表明最终用户的网络或其ISP存在一些配置问题。这些案例很少发生(<1%)并且对于相同的最终用户始终如一。

下面的答案表明从右到左走,直到你到达公共地址。不确定是否有人这样做但是它指出了问题。

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