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?
- Public IP address of connected remote client
$_SERVER["REMOTE_ADDR"]
, okay, but!... - 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.