2

我尝试使用 php 代码获取用户的 IP 地址:

$_SERVER["REMOTE_ADDR"];

当我检查与同一网络关联的计算机时,它为所有计算机提供了相同的 IP 地址......为什么会这样。我期待不同的IP地址。如何使用 php 获取不同的 IP 地址?

4

4 回答 4

3

IPV4 IP 地址数量有限。因此,大多数不运行面向公众的服务器的人都使用网络地址转换

这将涉及他们使用 LAN 上的计算机(在私有地址空间中具有 IP,例如 192.168.1.2)和具有 LAN IP 地址和 Internet IP 地址的路由器,用于中继它们与 Internet 上的服务器之间的流量。

互联网上的服务器只会看到路由器的面向互联网的 IP 地址。

要查看私有 IP 地址,您必须在 LAN 边界内运行软件。理论上,如果您可以说服用户运行允许签名的 Java 小程序执行,您就可以获取该地址,但即便如此,如果使用多个 IP,您也可能会遇到问题。(例如,我目前有一个环回 IP、一个以太网 IP、一个 Wi-Fi IP,并且正在运行两个虚拟机,我的工作站有几个 IP 供它们连接)。

于 2013-03-27T09:55:46.193 回答
1

您的服务器有一个 ip,本地网络有一个外部 ip(这就是您所看到的)。该网络上的所有计算机都有自己的内部 IP。

当计算机连接到您的服务器时,它会通过路由器/交换机的 ip 进行连接。

于 2013-03-27T09:54:30.920 回答
1

当您在同一个 LAN 中时,如果您的路由器使用 NAT(大多数都使用 NAT),您将拥有相同的 IPv4 地址。你对此无能为力,这就是它的工作方式。请注意,如果有人使用 IPv6,大多数情况下每台计算机都有自己唯一的 IP 地址。

一点额外的说明:您的路由器正在跟踪传出连接,从而确保每个数据包都到达正确的来源(内部计算机)。也没有办法跟踪它,所以你真的必须处理它。但还要注意,使用“普通 IP 地址”和您正在使用的代码,它是非常独特的。也许网络中的某些用户具有相同的 IP 地址,但它是该特定网络的唯一标识符。另请注意,人们可以拥有动态 IPv4 地址,这意味着 IP 地址经常更改。“静态”IP 地址是留在网络中的地址。这是 ISP 控制的东西。

于 2013-03-27T09:55:21.420 回答
0

您的机器可能位于网络代理服务器后面。

在这种情况下,您的 Web 服务器位于本地网络之外。它只能从服务器变量中看到代理服务器 IP 地址。

于 2013-04-01T22:36:06.680 回答