[英]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.