确定访问网站的计算机的ip地址,如在cmyip.com中


Determine ip address of computer accessing the website like in cmyip.com

可能重复:
如何找到用户';s的IP地址?

有什么方法可以确定访问网站的计算机的ip地址吗。比如cmyip.com或whatismyip.com。在我要做的项目中,我并不完全需要这个功能。但这是解决问题的第一个想法。一个唯一的id,它将区分机器A和机器B。你能给我一些想法吗,以防像我这样的初学者无法确定ip。

您将能够以不同的方式跟踪用户的IP地址。。。如果用户在代理后面,您将有一个不同的IP地址。。。

因此,如前所述,环境变量REMOTE_ADDR表示您的机器或代理的IP地址。如果设置了环境变量"HTTP_X_FORWARDED_FOR",那么您在一个代理之后,您可能有一个不同的代理。。。下面是一个返回正确IP和代理IP的函数。

function getIpAddresses() {
   $ipAddresses = array();
   if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
      $ipAddresses['proxy'] = isset($_SERVER["HTTP_CLIENT_IP"]) ? $_SERVER["HTTP_CLIENT_IP"] : $_SERVER["REMOTE_ADDR"];
      $ipAddresses['user'] = $_SERVER["HTTP_X_FORWARDED_FOR"];
   } else {
      $ipAddresses['user'] = isset($_SERVER["HTTP_CLIENT_IP"]) ? $_SERVER["HTTP_CLIENT_IP"] : $_SERVER["REMOTE_ADDR"];
   }
   return $ipAddresses;
}

现在,调用此方法的结果将始终为您提供一个密钥为"user"的映射,如果您在代理后面,则可以通过密钥"proxy"获取它。下面是一个例子。。。

$ips = getIpAddresses();
echo "Your IP " . $ips['user'] . "<BR>";
if (isset($ips['proxy'])) {
    echo "Your proxy IP is " . $ips['proxy'] . "<BR>";
}
// Running this will give you the following:
// From another machine
Starting the IPs... 
Your IP 192.168.48.4
// From the same machine
Starting the IPs... 
Your IP 127.0.0.1
// From the same machine with a system proxy
Starting the IPs... 
Your IP 127.0.0.1
Your proxy IP is 127.0.0.1
// From another machine with a system proxy
Starting the IPs... 
Your IP 192.168.48.4
Your proxy IP is 192.168.48.5

正如@cweiske所说,您可以通过$_SERVER['REMOTE_ADDR'];找到IP,但它可能是一个共享IP。你对动态(由于调制解调器重置等原因而更改(ip很不满意,但共享ip有一个变通方法:一个广泛使用的技巧是不仅保存ip,还保存用户代理字符串(也在$_SERVER数组中(。

如果他们更新浏览器和所有浏览器,这种情况就会改变,而且不会被认为是唯一的,但最终它可以足够接近。

如果你安装了PHP,你可以用获得远程(用户(IP

<?php
echo $_SERVER['REMOTE_ADDR'];
?>

它始终可用(CLI上除外(,但可能是代理的IP。

听起来你正试图识别唯一的访问者,看看这个答案:只跟踪唯一的访问者?。