【发布时间】:2015-05-29 07:11:09
【问题描述】:
我想向我的访问者显示他们的 IPv4 地址,如果他们有 IPv6 和 IPv4 地址,我希望它只显示 IPv4 地址。这是我目前拥有的:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
echo $ip;
如果访问者有 IPv6 地址,上面将显示而不是他们的 IPv4 地址,我该如何防止这种情况并且只显示他们的 IPv4 地址?
【问题讨论】:
-
有些客户端根本没有 IPv4 地址。 AFAIK,没有办法说“哦,这个 IPv6 地址映射到这个 IPv4 地址”
-
这仅适用于同时拥有 IPv4 和 IPv6 的访问者,例如美国的所有 AT&T 客户。我不担心只有 IPv6 地址的访问者。
-
做一个
print_r($_SERVER),看看你的IPv4是否在某处出现。 -
谢谢,我现在无法检查这个,我使用的是仅 IPv4 的网络连接。任何人都拥有并想要检查这将是很棒的。
-
@Mave 确实有些用户没有 IPv4 地址。但其中绝大多数将可以访问 NAT64,并且他们访问的网站将能够看到 NAT64 的 IPv4 地址。与 NAT44 确实没有什么不同,因为网站也看到 NAT 的 IPv4 地址而不是客户端的地址。