PHP 获取 IPv4 地址

问题描述 投票:0回答:1

我无法获取 IPv4 地址,因为 IPv6 似乎自动成为首选。

但是,这非常困难,因为我的 IP 白名单系统仅使用 IPv4。

我使用以下代码来获取客户端的IP:

$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

这为某些客户端输出 IPv4,为某些客户端输出 IPv6,但是,大多数客户端都注册了 IPv6,目前,我的代码库都不支持 IPv6 系统,因此这会导致愚蠢的错误和错误,因为有只接受 IPv4 的白名单系统。

如何过滤 IPv6,以便代码只组装 IPv4 而不是 v6?

此外,服务器位于 HTTP/HTTPS 代理后面,因此我需要使用转发标头。

php ip ipv6 ipv4
1个回答
0
投票

我正在使用以下代码来获取客户端的 IP ...这为某些客户端输出 IPv4,为某些客户端输出 IPv6

代码为所有客户端执行相同的操作:输出它们连接的 IP 地址。如果有人使用 IPv6 连接,这是您可以获得的唯一地址。

假设您有一个系统,假设每个人在挪威都有一个邮政地址。然后有人用英国的地址注册;试图为他们找到一个挪威地址是没有意义的,他们没有。您要么更改系统来处理英国地址,要么阻止他们注册。

您在这里有相同的两个选项:

  • 扩展您的系统,使其能够处理 IPv6 地址以及 IPv4 地址。这显然是首选,因为随着 IPv6 变得更加普遍,它允许每个人访问它。
  • 阻止人们使用 IPv6 访问您的网站。理想情况下,您可以在 DNS 级别执行此操作,无需使用“AAAA”记录,该记录会公布 IPv6 地址以供人们连接;这样,有能力连接 IPv4 的用户就会这样做。无论在哪里配置了代理,都需要发生这种情况,因为当请求到达您的应用程序服务器时,已经太晚了。
© www.soinside.com 2019 - 2024. All rights reserved.