[英]PHP | Get private IP address from a client user?
我知道问题,但没有在stackoverflow上找到真正的答案。 这不是X_FORWARDED_FOR
, SERVER_NAME
或SERVER_REMOTE_ADDR
,我想获取连接到服务器的远程客户端的本地IP地址,以检测实际连接了本地远程网络的人。
说明一下:
ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC
我想知道什么?
$_SERVER["REMOTE_ADDR"]
公共IP地址,可以,但是! 如何解决这个问题呢? 我有答案,所以我想如果想知道本地IP地址,每个人都应该知道:
您应该使用CURL
和curl_getinfo()
函数。 然后,指向您想要的任何人的URL地址(您的主服务器ip或其他),例如:
<?php
$ch = curl_init();
$opt = curl_setopt($ch, CURLOPT_URL, "YOUR_SOME_URL_ADDRESS");
curl_exec($ch);
$response = curl_getinfo($ch);
$result = array('client_public_address' => $response["primary_ip"],
'client_local_address' => $response["local_ip"]
);
var_dump($result);
curl_close($ch);
?>
专注于响应您的公共地址的$response["primary_ip"]
和$response["local_ip"]
本地地址的$response["local_ip"]
。 现在这是示例:
ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC
/\ /\
|| ||
\/ \/
$response["primary_ip"] <----> $response["local_ip"]
213.x.x.x (for example) 192.168.1.3 (for example)
结果:
array (size=2)
'client_public_address' => string '213.xxx.xxx.xxx' (length=14)
'client_local_address' => string '192.168.1.3' (length=11)
这不会提供真实的本地IP地址!
谢谢。
这将永远无法正常工作。
首先,您需要客户端上的HTTP服务器以使其响应CURL。
即使有,也不保证返回任何“本地IP”。 接下来,对客户端执行ping操作的HTTP服务器看起来可疑,并且很可能被禁止。
无论如何,我在远程IP上尝试了您的代码:
array(2) {
["client_public_address"]=>
string(7) "8.8.8.8"
["client_local_address"]=>
string(0) ""
}
它什么也没返回
当我尝试使用本地路由器时,它可以正常工作
array(2) {
["client_public_address"]=>
string(13) "XXX"
["client_local_address"]=>
string(12) "192.168.1.37"
}
它仅适用于您自己的本地路由器 ,但无法从远程系统获取任何本地地址。
坦白说,它仅显示分配给您PC的本地IP地址。
默认情况下,寻址的本地IP不暴露给应用程序层。 您需要较低级别的工具,这些工具可以从网络数据包中提取此信息。
您可以使用HTML5功能(CORS和WebSocket)来确定范围(xxx.xxx.xxx.xxx/24),请参见以下实时示例:
它是如何工作的? 您可以扫描IP地址的范围(192.168.1.0/24、192.168.0.1/24等),并找到用户使用的范围,但是,查找准确的IP地址仍然很困难。
结果:不起作用。 IP为192.168.1.200返回192.168.1.2; 网站无效,工具无法真正发挥作用。
function getRealIpAddr(){
//check ip from share internet
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip=$_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
//to check ip is pass from proxy
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.