PHP | Get private IP address from a client user?
我知道问题,但没有在 stackoverflow 上找到真正的答案。这不是 X_FORWARDED_FOR、SERVER_NAME 或 SERVER_REMOTE_ADDR,我想获取连接到我的服务器的远程客户端的本地 IP 地址,以检测谁真正在本地远程网络上。
解释一下:
1
|
ISP <—-> ROUTER <—-> LOCAL NETWORK <—-> LOCAL PC
|
我想知道什么?
如何解决这个问题?我有答案,所以我想如果想知道本地 IP 地址,每个人都应该知道:
你应该使用 CURL 和 curl_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”], 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 地址? PHP 中有会话 cookie 的想法和其他唯一标识用户的方法。
- 但这就是您获取服务器本地 IP 而不是客户端的方式…使用任何代理进入您的站点,这样您就会发现自己完全错了
- 思考!您想在房子上找到一个真实的人吗?您不知道内部是否有太多具有不同 user_agent 和端口的人?您的答案是获取他们的本地 IP 地址并要求获取房屋中连接的主机名?
- 在发布之前测试您的发明总是一个好主意……
- @MarinSagovac,即使使用用户代理和私人 IP 地址,您也不能保证这是同一个人,可能不止一个人使用具有相同浏览器和相同 windows/linux 登录名的特定计算机,或者没有登录总而言之,这就是几乎所有家庭计算机的工作方式,以及许多企业在使用”办公桌轮用”时的工作方式。
- I think this could help many people 此刻你只是让人们感到困惑,所以让我澄清一下:没有办法使用 HTTP 获取用户/客户端私有 IP(任何语言:PHP、Ruby、Java 等)
- 这是行不通的。用户的私网IP不关我们的事
- 您可以从编写自己的浏览器开始,它会在每个请求的标头中添加本地 IP。
- 试想一下当成百上千的用户共享同一个 IP 地址的情况。想象一下用户的 ISP 和他的计算机之间有几十个路由器。最后,想象一下:多个用户在不同的路由器上使用相同的本地 IP,都连接到相同的共享公共 IP。不可能而且没用。
- (我之所以这样说是因为这个答案在我的问题上在谷歌搜索中显示为高,以帮助其他人。)我的类似问题是服务器和客户端是否都在专用网络上,可能有一个 NATing 实例附加到互联网网关。我想要获取客户端地址的通信是访问 PRIVATE 服务器的私有客户端的 PRIVATE IP。那应该是 $_SERVER[\\’HTTP_CLIENT_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 地址。
- 是的。你说的对。我已经在 VPS 服务器上进行了测试,它将返回 NULL。我的错误,对不起。
您可以使用 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;网站无效,工具不能真正工作。
- 经测试。没有给出正确的结果。它响应 192.168.x.x 而不是 10.1.x.x
- 您是否单击了”发现我的私人 IP 地址?”,无论如何,它是唯一可用的工具。
- 是的。我点击’Discoer my private ip address’并扫描ip地址192.168.0.x……并自动增加。
- 是的,使用 HTML-Webworker 您可以在后台扫描 IP 列表,一旦发现您可以使用 AJax 将其发回…
- 我知道为什么不适合我。我在 linux 上,Currently works on WINDOWS ONLY.
- 不,该站点使用预定义的 IP 范围,您的路由器 IP 可能未在此处列出…扫描仪取决于浏览器(是否支持 HTML5)
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; |
- 这不是为了获取本地 IP 地址。
来源:https://www.codenong.com/15044486/