我有一个可供内部人员访问该组织的网站。该组织正在使用代理来使用Internet。代理服务器具有静态IP(例如10.12.13.14)和端口(3128)。我想检查网站主页上的任何请求是否通过代理服务器。我相信通过多个网关/中继或代理服务器进行传输时的IP存储在HTTP请求标头中(封装)。
我的环境详细信息: PHP v5.6 Apache v2.4
此外,我也尝试了其他在stackoverflow上回答的方法,但没有帮助。
方法1:
$proxy_headers = array(
'HTTP_VIA',
'HTTP_X_FORWARDED_FOR',
'HTTP_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_FORWARDED',
'HTTP_CLIENT_IP',
'HTTP_FORWARDED_FOR_IP',
'VIA',
'X_FORWARDED_FOR',
'FORWARDED_FOR',
'X_FORWARDED',
'FORWARDED',
'CLIENT_IP',
'FORWARDED_FOR_IP',
'HTTP_PROXY_CONNECTION'
);
foreach($proxy_headers as $x){
if (isset($_SERVER[$x])) die("You are using a proxy!");
}
方法2:
$ports = array(8080,80,81,1080,6588,8000,3128,553,554,4480); // See Note
foreach($ports as $port) {
if (@fsockopen($_SERVER['REMOTE_ADDR'], $port, $errno, $errstr, 30)) {
die("You are using a proxy!");
}
}
注意:不知道他为什么要对所有端口进行阵列,所以我删除了所有端口并仅保留3128,但是即使我通过代理访问它,它也将所有请求显示为非代理请求。
我想检测此人是否来自代理网络,而我的逻辑是通过PHP检查标头中的代理服务器IP(即10.12.13.14)或端口(即3128)。当前,即使我正在通过代理访问它,它也将所有请求显示为非代理请求。