我知道问题,但没有在stackoverflow上找到真正的答案。这不是X_FORWARDED_FOR
,SERVER_NAME
或者SERVER_REMOTE_ADDR
,我想获取连接到我的服务器的远程客户端的本地 IP 地址,以检测谁真正在本地远程网络上连接。
解释一下:
ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC
我想知道什么?
- 已连接远程客户端的公共 IP 地址
$_SERVER["REMOTE_ADDR"]
,可以,但是!... - 公网连接客户端的本地IP地址(192.168.xx、10.xxx、172.xxx)
如何解决这个问题呢?我有答案,所以我认为如果想知道本地 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);
?>
Focus on $response["primary_ip"]
which responses your Public address and $response["local_ip"]
which reponses local address. Now this is example:
ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC
/\ /\
|| ||
\/ \/
$response["primary_ip"] <----> $response["local_ip"]
213.x.x.x (for example) 192.168.1.3 (for example)
Result:
array (size=2)
'client_public_address' => string '213.xxx.xxx.xxx' (length=14)
'client_local_address' => string '192.168.1.3' (length=11)
This will NOT be giving a REAL local IP address!
Thank you.