1

可能重复:
使用 PHP 获取用户真实 IP 地址

我在一个网站上有一个脚本,可以在客户离开页面时保存一些关于客户的信息。是否有可能获得他的网络地址,例如192.168.1.154

我在论坛上看到一个关于这个的讨论,他们说可以使用$_SERVER['HTTP_X_FORWARDED_FOR'],但它不起作用!它显示了我的真实 IP。

我怎样才能做到这一点?

4

5 回答 5

3

如果您的服务器位于 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())
于 2012-08-28T14:28:56.977 回答
2

$_SERVER['REMOTE_ADDR']

文档http://php.net/manual/en/reserved.variables.server.php

如果客户端会从本地网络访问你,你会得到192.168.*.*,否则远程 ip 就像35.88.33.11

于 2012-08-28T14:12:33.540 回答
2

用这个:

<?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
            }
    );

});

希望这可以帮助。

于 2012-08-28T14:13:01.853 回答
0

这是不可能的服务器端。像 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

于 2012-08-28T14:16:16.257 回答
0

我会看看哪个参数var_dump($_SERVER);显示您的网络IP。

于 2012-08-28T14:16:36.793 回答