Php | Get Private Ip Address from a Client User?

Php | Get Private Ip Address from a Client User?

I know question but didn't find real answer on stackoverflow. This is not X_FORWARDED_FOR, SERVER_NAME or SERVER_REMOTE_ADDR, I want get local IP address of remote client connected to my server to detect who is really on local remote network is connected.

Explain this:

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

What I want to know?

  1. Public IP address of connected remote client $_SERVER["REMOTE_ADDR"], okay, but!...
  2. Local IP address of connected client on public network (192.168.x.x, 10.x.x.x, 172.x.x.x)

How to solve this problem? I have answer, so I think this should be know for everyone if want to know local IP address:

You should use CURL and curl_getinfo() function. Then, point URL address anyone that you want (your main server ip or whatever), for example:

<?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.

10

4 Answers

This will never get to work.
First, you need an HTTP server on a client to make it response to CURL.
Even if ther would be - it is not guarantted to return whatever "local IP". Next, an HTTP server which pings it's clients back looks suspicious and most likely gets banned.

Anyway, I tried your code on a remote IP:

array(2) {
  ["client_public_address"]=>
  string(7) "8.8.8.8"
  ["client_local_address"]=>
  string(0) ""
}

it returned nothing

While when I tried my local router it works okay

array(2) {
  ["client_public_address"]=>
  string(13) "XXX"
  ["client_local_address"]=>
  string(12) "192.168.1.37"
}

It works only for your own local router, but it cannot get whatever local address from a remote system.
Frankly, it shows you just local IP address assigned to your PC.

1

The local IP addressed is not exposed to the application layer by default. You need lower level tools that can extract this information from the network packets.

You can use HTML5 features (CORS and WebSocket) for determining the range () see this live example:

JS-RECON

How its work? You can scan range of IP addresses (192.168.1.0/24, 192.168.0.1/24, etc) and find the range that used by user, however, finding exact IP address is still difficult.

Result: Doesn't work. IP is 192.168.1.200 returns 192.168.1.2; site invalid, tools don't really work.

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Marcus Vance
Author

Marcus Vance

Marcus Vance is a cybersecurity auditor and technology writer dedicated to educating the public about online safety, data privacy regulations, enterprise security, and emerging cyber threats.