0

我正在使用此代码获取我的本地 IP

if (getenv('HTTP_X_FORWARDED_FOR')) 

    $ip=getenv('HTTP_X_FORWARDED_FOR');
else

    $ip=getenv('REMOTE_ADDR');

我正在获取客户端默认网关 IP,但我想要客户端的实时 IP。

4

2 回答 2

1

PHPs getenv(REMOTE_ADDR) 将为您提供客户端的可见网络地址

 REMOTE_ADDR  = hostnumber
 hostnumber   = ipv4-address | ipv6-address
 ipv4-address = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
 ipv6-address = hexpart [ ":" ipv4-address ]
 hexpart      = hexseq | ( [ hexseq ] "::" [ hexseq ] )
 hexseq       = 1*4hex *( ":" 1*4hex )

但是,如前所述,您的服务器只能获取它实际可以看到的 IP 地址。如果客户端隐藏在网关后面(带有 NAT 的 pe),那么您将只能看到 NAT 地址。PHPgetenv()无法改变那些基本的网络基础。

于 2013-07-15T11:26:36.230 回答
1

第一条评论是正确的,但是 HTTP_X_FORWARDED_FOR 中提供了一些代理客户端的 IP,这似乎不是你的情况。

查看其他环境变量(phpinfo() 或 print_r($_SERVER))以查看您的客户端 IP 是否可用。

如果没有,这是不可能的。代理正在隐藏真实 IP(应该如此)。

于 2013-07-15T11:26:44.473 回答