PHP | Get private IP address from a client user?
我知道问题,但没有在 stackoverflow 上找到真正的答案。这不是
解释一下:
1 | ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC |
我想知道什么?
如何解决这个问题?我有答案,所以我想如果想知道本地 IP 地址,每个人都应该知道:
你应该使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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); ?> |
关注响应您的公共地址的
1 2 3 4 5 6 | ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC /\\ /\\ || || \\/ \\/ $response["primary_ip"] <----> $response["local_ip"] 213.x.x.x (for example) 192.168.1.3 (for example) |
结果:
1 2 3 | array (size=2) 'client_public_address' => string '213.xxx.xxx.xxx' (length=14) 'client_local_address' => string '192.168.1.3' (length=11) |
这不会给出真实的本地 IP 地址!
谢谢。
本地IP地址默认不暴露给应用层。您需要可以从网络数据包中提取此信息的较低级别的工具。
这永远不会起作用。
首先,您需要客户端上的 HTTP 服务器以使其响应 CURL。
即使会 - 也不能保证返回任何"本地 IP"。
接下来,ping 它的客户端的 HTTP 服务器看起来很可疑,很可能会被禁止。
无论如何,我在远程 IP 上尝试了您的代码:
1 2 3 4 5 6 |
什么也没返回
当我尝试使用本地路由器时,它工作正常
1 2 3 4 5 6 | array(2) { ["client_public_address"]=> string(13)"XXX" ["client_local_address"]=> string(12)"192.168.1.37" } |
它只适用于您自己的本地路由器,但它无法从远程系统获取任何本地地址。
坦率地说,它只显示分配给您 PC 的本地 IP 地址。
您可以使用 HTML5 功能(CORS 和 WebSocket)来确定范围(xxx.xxx.xxx.xxx/24),请参见这个实时示例:
JS-侦察
它的工作原理是什么?
您可以扫描 IP 地址范围(192.168.1.0/24、192.168.0.1/24 等)并找到用户使用的范围,但是要找到确切的 IP 地址仍然很困难。
结果:
不工作。 IP为192.168.1.200返回192.168.1.2;网站无效,工具不能真正工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } |