可能重复:
使用 PHP 获取用户真实 IP 地址
我在一个网站上有一个脚本,可以在客户离开页面时保存一些关于客户的信息。是否有可能获得他的网络地址,例如192.168.1.154
。
我在论坛上看到一个关于这个的讨论,他们说可以使用$_SERVER['HTTP_X_FORWARDED_FOR']
,但它不起作用!它显示了我的真实 IP。
我怎样才能做到这一点?
可能重复:
使用 PHP 获取用户真实 IP 地址
我在一个网站上有一个脚本,可以在客户离开页面时保存一些关于客户的信息。是否有可能获得他的网络地址,例如192.168.1.154
。
我在论坛上看到一个关于这个的讨论,他们说可以使用$_SERVER['HTTP_X_FORWARDED_FOR']
,但它不起作用!它显示了我的真实 IP。
我怎样才能做到这一点?
如果您的服务器位于 NAT 网络之外,则您无法获取客户端的内部本地 IP。这不仅会带来安全风险,而且会破坏 NAT 的目的。
如果你想要他的本地 NAT'd IP,你可以运行一个 javascript,这样的东西可能会起作用:
function myIP(){
var yip2=java.net.InetAddress.getLocalHost();
var yip=yip2.getHostAddress();
return yip;
}//end myIP
alert("your machine's local network IP is "+ myIP())
$_SERVER['REMOTE_ADDR']
文档http://php.net/manual/en/reserved.variables.server.php
如果客户端会从本地网络访问你,你会得到192.168.*.*
,否则远程 ip 就像35.88.33.11
用这个:
<?php
echo $_SERVER['REMOTE_ADDR']; //ip of visitor - you need this
echo $_SERVER['SERVER_ADDR']; //ip of server
?>
使用 JSON,您还可以使用以下代码获取客户端 ip:
$(document).ready(function(){
//Service 1
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
//Service 2
$.getJSON( "http://jsonip.appspot.com/?callback=?",
function (json){
alert( "User ip: " + json.ip); // alerts the ip address
}
);
});
希望这可以帮助。
这是不可能的服务器端。像 192.168.1.154 这样的地址是不可路由的,所以服务器对它们一无所知。某些路由器可能设置了 HTTP_X_FORWARDED_FOR 标头,但您不应该指望它。除非脚本只在本地网络上运行,就像 Peter Szymkowski 建议的那样。
有关 NAT 的更多信息,请参阅https://superuser.com/questions/63124/is-it-possible-to-get-the-nat-i p-address
我会看看哪个参数var_dump($_SERVER);
显示您的网络IP。