繁体   English   中英

需要有关在PHP中将IP地址获取到NAT之后的建议

[英]Need advice about getting IP address behind NAT in PHP

我在这里想要实现的是获取使用公共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 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM