我想读取请求中X-Forwarded-For
标头值的值。
我试过
HttpContext.Current.Request.Headers["X-Forwarded-For"].Split(new char[] { ',' }).FirstOrDefault();
在C#中。
或者我需要将标题分割为":"
并取出第二个字符串吗?
我问这个是因为,维基百科说
该领域的一般格式是: X-Forwarded-For:client1,proxy1,proxy2
答案 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