我需要检索通过远程桌面连接到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"
,因为它为我提供了所有客户端连接,而不仅仅是我需要的客户端。
谢谢!
答案 0 :(得分:0)
这可以通过使用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;
}