需要关于在PHP中获取NAT背后的IP地址的建议



我在这里试图实现的是获取连接到具有公共ip地址的机器的计算机的本地ip地址。

我们有一个带有公共IP地址的服务器(比如说X(。此外,我们办公室有15台本地ip地址为(192.168.20….(的电脑。我想知道是哪台电脑改变了我们的系统。我们都在互联网上使用公共IP Y。众所周知,使用$_SERVER['REMOTE_ADDR'],我只能获得地址Y,但无法获得本地IP地址(192.168.20.N(。

所以我在一台本地机器上安装了Web服务器,然后我向该本地机器发送ajax(jsonp(请求,我得到计算机的本地IP地址,然后在每个请求中将该IP地址发送到公共服务器。一切都很好,我得到了本地和公共IP地址但我想知道有没有更好的方法

这是我的test.js脚本

$(document).ready(function(){
    var _ip = '';
    $.ajax({
        url: 'http://192.168.20.24/getIP.php', //local machine
        dataType: 'jsonp',
        success: function(response){
            _ip = response;
            $.ajax({
                url: 'getIP.php', //public address
                type: 'POST',
                dataType: 'json',
                data: {
                    ip: _ip
                },
                dataType: 'json',
                success: function(response){
                    $('#local').html(response.local);
                    $('#public').html(response.public);
                }
            })
        }
    });
});

本地getIP.php

header('content-type: application/json; charset=utf-8');
echo $_GET['callback'] . '('.json_encode($_SERVER['REMOTE_ADDR']).')';

公共getIP.php

echo json_encode(array('local' => $_POST['ip'], 'public' => $_SERVER['REMOTE_ADDR']));

提前感谢

注意:代码仅用于测试目的。

IP地址信息不得用于身份验证。这是不安全的。指向

如果要对个人甚至计算机进行身份验证,请使用身份验证系统。基于用户名/密码或基于公钥/私钥的身份验证系统。。

Javascript在HTTP级别运行,因此在Javascript世界中没有IP地址这回事。

你设计的解决方法被广泛使用,我相信这是获取客户私人地址的唯一方法。正如hek2mgl所建议的,这种解决方案确实是不安全的,尽管在您的情况下,这种担忧并不那么重要,因为您似乎完全控制着客户端、服务器和其间的网络。

对于真正安全的解决方案,请使用客户端证书。我知道您并不真正关心客户端的IP地址本身,而是只想将其用作身份验证的一种手段(或者只是身份验证?:D(。


配置不是琐碎的,但也不是火箭围攻。这里有一个很好的教程(Apache(。它假设使用公共证书颁发机构颁发的证书,但您可以生成并使用自己的自签名证书(教程1、教程2(

最新更新