关于http:PHP |从客户端用户获取私有 IP 地址?

PHP | Get private IP address from a client user?

我知道问题,但没有在 stackoverflow 上找到真正的答案。这不是 X_FORWARDED_FORSERVER_NAMESERVER_REMOTE_ADDR,我想获取连接到我的服务器的远程客户端的本地 IP 地址,以检测谁真正在本地远程网络上。

解释一下:

1
ISP  <---->  ROUTER <----> LOCAL NETWORK <----> LOCAL PC

我想知道什么?

  • 已连接远程客户端 $_SERVER["REMOTE_ADDR"] 的公共 IP 地址,好的,但是!...
  • 公网连接客户端的本地IP地址(192.168.x.x, 10.x.x.x, 172.x.x.x)
  • 如何解决这个问题?我有答案,所以我想如果想知道本地 IP 地址,每个人都应该知道:

    你应该使用 CURLcurl_getinfo() 函数。然后,将 URL 地址指向您想要的任何人(您的主服务器 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);

    ?>

    关注响应您的公共地址的 $response["primary_ip"] 和响应本地地址的 $response["local_ip"]。现在这是示例:

    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
    array(2) {
      ["client_public_address"]=>
      string(7)"8.8.8.8"
      ["client_local_address"]=>
      string(0)""
    }

    什么也没返回

    当我尝试使用本地路由器时,它工作正常

    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;
        }