我在这里尝试实现的是获取连接到具有公共IP地址的计算机的计算机的本地IP地址。
我们有带有公共IP地址的服务器(让我们说X)。我们办公室还有15台计算机,带有本地IP地址(192.168.20 ....)。我想知道哪台电脑在我们的系统上有所改变。我们都在公共IP Y上网。我们都知道$_SERVER['REMOTE_ADDR']
我只能获得地址Y,但无法获得本地IP地址(192.168.20.N)。
所以我已在其中一台本地计算机上安装了网络服务器,然后我将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']).')';
和 public getIP.php
echo json_encode(array('local' => $_POST['ip'], 'public' => $_SERVER['REMOTE_ADDR']));
提前致谢
注意: 代码仅用于测试目的。
答案 0 :(得分:3)
IP地址信息绝不能用于身份验证。这是不安全的。点。
如果要对人员甚至计算机进行身份验证,请使用身份验证系统。基于用户名/密码,或基于公钥/私钥的身份验证系统,请记住..
答案 1 :(得分:1)
Javascript在HTTP级别运行,因此在Javascript世界中没有IP地址这样的东西。
您设计的is widely used解决方法,我认为,它是获取客户私人地址的唯一途径。 As hek2mgl advises,这个解决方案确实是不安全的,尽管在您的情况下,关注点不太重要,因为您似乎完全控制了客户端,服务器和网络之间的连接。
要获得真正安全的解决方案,请使用client certificates。我知道你并不真正关心客户端的IP地址本身,但只想将它们用作身份验证的平均值(或者仅仅是识别?:D)。
配置并非微不足道,但也不是火箭科学。这是a nice tutorial(Apache)。它假定使用由公共证书颁发机构颁发的证书,但您可以生成并使用自己的自签名证书(tutorial 1,tutorial 2)