我需要检索通过远程桌面连接到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来获取该信息,然后从PHP使用exec?
我不能使用netstat -n | find ":3389" | find "ESTABLISHED"
,因为它给了我所有的客户端连接,而不仅仅是我需要的一个。
谢谢!
这可以通过使用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;
}