服务端获取客户端IP的几种方式

协议头中的字段(均可被伪造)

Name Description
Client-Ip 理论上是代理服务器附加的客户端IP。
X-Forwarded-For 从客户端到服务器,经过的每一级代理服务器的IP,格式如:X-Forwarded-For: client1, proxy1, proxy2。
X-Real-Ip 没有相关标准,通常由Nginx设置,当服务通过Nginx反向代理时,应用获取REMOTE_ADDR时会被替换成Nginx的IP,但Nginx自身能拿到请求原始的REMOTE_ADDR, 再通过将X-Real-Ip头添加到Header中,将真实的客户端IP(最后一个代理服务器的IP),通过X-Real-Ip传给应用。
Via 列出从客户端到服务器或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。根据顺序从左到右,格式如: WTP/1.1 GDSZ-PS-GW010-WAP05.gd.chinamobile.com (Nokia WAP Gateway 4.0 CD3/ECD13_C/NWG4.0 CD3 ECD13_C 4.1.03)

不在协议头中:

Name Description
Remote_addr 发生在TCP握手的时候,所以不易被伪造,取的是最后一个代理服务器的IP

代理服务器类型(主要区别在于X-Forwarded-For头):

Name Description
透明代理服务器 Transparent Proxies:不隐藏客户端IP,e.g. X-Forwarded-For: client1, proxy1, proxy2。
普通匿名代理服务器 Anonymous Proxies:隐藏客户端IP,e.g. X-Forwarded-For: proxy1, proxy2。
欺骗性代理服务器 Distorting Proxies:隐藏客户端IP,并用假的代理服务器IP,e.g. X-Forwarded-For: fake_proxy1, fake_proxy2。
高匿名代理服务器 High Anonymity Proxies (Elite proxies):客户端IP与代理服务器IP均被隐藏,e.g. X-Forwarded-For:(没数值或不显示)。但用Remote_addr能取到

你可能感兴趣的:(服务端获取客户端IP的几种方式)