新闻建站cms系统、政府cms系统定制开发

广州网站建设公司-阅速公司

asp.net新闻发布系统、报纸数字报系统方案
/
http://www.ysneo.com/
广州网站建设公司
您当前位置:首页>系统知识

系统知识

REMOTE_ADDR、HTTP_X_FORWARDED_FOR、UserHostAddress获取 IP 地址的区别详解

发布时间:2021/12/16 16:09:49  作者:Admin  阅读:1510  

广告:阿里云采购优惠专区

REMOTE_ADDR 是离服务器“最近”的 IP。

没有使用代理时,也就是客户端 IP。
使用一层代理时,也就是代理的 IP。
使用多层代理时,也就是最近一个(最靠近服务器)的代理的 IP。

HTTP_X_FORWARDED_FOR 是从客户端到 REMOTE_ADDR 前一个 IP。

没有使用代理时,没有值。
使用一层代理时,也就是客户端 IP。
使用二层代理时,也就是“客户端IP,1层代理IP”,也就是相当于 IP 路径,中间用逗号隔开,注意不包括二层代理。
使用三层代理时,也就是“客户端IP,1层代理IP,2层代理”,也就是相当于 IP 路径,中间用逗号隔开,注意不包括三层代理。
……
注意:HTTP_X_FORWARDED_FOR 是 HTTP 头的一部分,就像 HTTP_REFERER 一样,是可以伪造的。这就造成一种情况,并没有使用代理,我们却认为使用了代理,而忽略了 REMOTE_ADDR 对应的是真实 IP。所以如果是做安全方面的记录,最好把 REMOTE_ADDR、HTTP_X_FORWARDED_FOR 二者的值都记录下来。

使用三层代理时经过的ip:
HTTP_X_FORWARDED_FOR (userrealip,dai1ip,dai2ip) + REMOTE_ADDR (dai3ip)
REMOTE_ADDR=Request.UserHostAddress

为了防止HTTP_X_FORWARDED_FOR伪造,又防止获取到的REMOTE_ADDR是反向代理服务器(nginx)的ip,可以从右向左取HTTP_X_FORWARDED_FOR第一个值:

string[] splitter = { "," };
string[] IP_Array = User_IPAddressRange.Split(splitter, System.StringSplitOptions.None);
int LatestItem = IP_Array.Length - 1;
User_IPAddress = IP_Array[LatestItem];

广告:阿里云新人采购专场

相关文章
REMOTE_ADDR、HTTP_X_FORWARDED_FOR、UserHostAddress获取 IP 地址的区别详解
cms新闻系统购买咨询
扫描关注 广州阅速软件科技有限公司
扫描关注 广州阅速科技