我在这里试图实现的是获取连接到具有公共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(