我需要检索通过远程桌面连接到windows服务器的客户端的ip地址。
我需要可能通过php获得它。
因此客户端连接到远程桌面,并从浏览器运行客户端所连接的服务器上的php页面。
如果我运行print_r($_SERVER),我会得到:
Array (
...
[HTTP_HOST] => 10.80.3.107 //This is server ip
...
[SERVER_NAME] => 10.80.3.107 //This is server ip
[SERVER_ADDR] => 10.80.3.107 //This is server ip
[SERVER_PORT] => 80
[REMOTE_ADDR] => 10.80.3.107 //This is server ip -> I need client ip here
...
)有什么解决方案吗?
我是否可以使用cmd获取该信息,然后使用exec从php获取该信息?
我不能使用netstat -n | find ":3389" | find "ESTABLISHED",因为它为我提供了所有连接的客户端,而不仅仅是我需要的客户端。
谢谢!
发布于 2014-03-24 19:41:02
这可以通过使用PHP的$_SERVER‘’REMOTE_ADDR‘或$_SERVER’‘REMOTE_HOST’变量来实现。
下面的两个函数等效,只是检索值的方式和位置有所不同。
在第一个使用的函数中,getenv()用于在PHP中获取环境变量的值
//使用getenv()函数获取客户端ip地址的函数
function get_client_ipaddress() {
$ip_address = '';
if (getenv('HTTP_CLIENT_IP'))
$ip_address = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ip_address = getenv('HTTP_X_FORWARDED_FOR'");
else if(getenv('HTTP_X_FORWARDED'))
$ip_address = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ip_address = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ip_address = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ip_address = getenv('REMOTE_ADDR');
else
$ip_address = 'UNKNOWN';
return $ip_address;
}不使用getenv()函数:
function get_client_ipaddress() {
$ip_address = '';
if ($_SERVER['HTTP_CLIENT_IP'])
$ip_address = $_SERVER['HTTP_CLIENT_IP'];
else if($_SERVER['HTTP_X_FORWARDED_FOR'])
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if($_SERVER['HTTP_X_FORWARDED'])
$ip_address = $_SERVER['HTTP_X_FORWARDED'];
else if($_SERVER['HTTP_FORWARDED_FOR'])
$ip_address = $_SERVER['HTTP_FORWARDED_FOR'];
else if($_SERVER['HTTP_FORWARDED'])
$ip_address = $_SERVER['HTTP_FORWARDED'];
else if($_SERVER['REMOTE_ADDR'])
$ip_address = $_SERVER['REMOTE_ADDR'];
else
$ip_address = 'UNKNOWN';
return $ip_address;
}https://stackoverflow.com/questions/22607371
复制相似问题