读取X-Forwarded-For标题

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

我试过了

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

在C#中。

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

该字段的一般格式为:X-Forwarded-For:client1,proxy1,proxy2

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

所以你用逗号分隔它,并获得第一个看到你的客户端的IP。

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

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

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

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

下面的答案建议从右到左走,直到你到达公共地址。 不确定是谁真的这样做但它指出了问题。

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