努力思考 + 实践, 眼高手低是不行的. 注册 | 登陆

PHP检测客户端是否通过代理上网[备忘]

1. 要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。 如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。

2. $_SERVER['HTTP_VIA'] 代理服务器IP

3. Anonymity types
Anonymous - HTTP Proxy server does not send HTTP_X_FORWARDED_FOR variable to host, this improves privacy since your IP address can not be logged.
High-anonymous (elite proxy) - HTTP Servers of this type do not send HTTP_X_FORWARDED_FOR, HTTP_VIA and HTTP_PROXY_CONNECTION variables. Host doesn't even know you are using proxy server an of course it doesn't know your IP address.

4. 参考代码 Sablog-x 1.6下的 ./include/fense.php

=====

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

Tags: php

« 上一篇 | 下一篇 »

只显示5条记录相关文章

Notepad++运行PHP, Python (浏览: 4015, 评论: 0)
守护进程删除smarty的缓存文件(注释版) (浏览: 3429, 评论: 0)
Php ini_set ini_get可操作配置参数列表 (浏览: 9137, 评论: 1)
资料备忘,保持更新。 (浏览: 6039, 评论: 0)
40个迹象表明你还是PHP菜鸟 (浏览: 4218, 评论: 2)

Trackbacks

点击获得Trackback地址,Encode: UTF-8

1条记录访客评论

我只是知道:
$_SERVER[\\\"HTTP_X_FORWARDED_FOR\\\"]  可以知道代理服务器的服务器名以及端口
$_SERVER[\\\"HTTP_VIA\\\"] 可以知道客户的内部ip
但是下面的两个是什么意思?
$_SERVER[\\\'HTTP_PROXY_CONNECTION\\\']  $_SERVER[\\\'HTTP_USER_AGENT_VIA\\\']
好像也是和代理有关的,但不知道他们表示的具体意思.......

Post by dajiji on 2009, January 2, 1:29 AM 引用此文发表评论 #1


本文因为某种原因此时不允许访客进行评论