如何使用 PHP 代码同时获得 IPv4 和 IPv6 地址?
How can I get both IPv4 and IPv6 address using PHP code?
我有一个向另一台服务器发送请求的脚本,但问题是 IPv6
不受支持,所以如果我发送 IPv6
然后给出错误,所以我需要这两个中的一个:
- 一直获取
IPv4
地址
或
- 获取
IPv4
和 IPv6
地址
我使用此代码获取 IP
地址
function getRealIP()
{
if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_X_FORWARDED"])) {
$ip = $_SERVER["HTTP_X_FORWARDED"];
} elseif (isset($_SERVER["HTTP_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_FORWARDED"])) {
$ip = $_SERVER["HTTP_FORWARDED"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
// Strip any secondary IP etc from the IP address
if (strpos($ip, ',') > 0) {
$ip = substr($ip, 0, strpos($ip, ','));
}
return $ip;
}
但是这个函数只有returns一个IPv
地址。如何获得所有时间 IPv4
或同时获得两个地址?
你不能。
只有请求来自的 IP 地址可用。
没有可靠的方法来识别路由到同一台计算机的其他 IP 地址(我的笔记本电脑目前有 12 个 IP 地址)。
客户端将仅使用一种协议向您的服务器发送请求。它不会同时使用 both IPv4 和 IPv6 发送请求,并且无法交错两种协议,而且 IPv4 地址也不会转换为等效的 IPv6 地址。如果客户端使用 IPv4 发送请求,那么您将获得 IPv4 地址。如果他们使用 IPv6 发送请求,您将获得 IPv6 地址。时期。故事结束。
如果您需要 一个 IPv4 地址,那么您必须在您的 server/DNS 条目上禁用 IPv6 支持,因此所有客户端都被迫使用 IPv4 作为唯一可用的协议。但这在当今时代也是可怕的倒退。
我有一个向另一台服务器发送请求的脚本,但问题是 IPv6
不受支持,所以如果我发送 IPv6
然后给出错误,所以我需要这两个中的一个:
- 一直获取
IPv4
地址 或 - 获取
IPv4
和IPv6
地址
我使用此代码获取 IP
地址
function getRealIP()
{
if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_X_FORWARDED"])) {
$ip = $_SERVER["HTTP_X_FORWARDED"];
} elseif (isset($_SERVER["HTTP_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_FORWARDED"])) {
$ip = $_SERVER["HTTP_FORWARDED"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
// Strip any secondary IP etc from the IP address
if (strpos($ip, ',') > 0) {
$ip = substr($ip, 0, strpos($ip, ','));
}
return $ip;
}
但是这个函数只有returns一个IPv
地址。如何获得所有时间 IPv4
或同时获得两个地址?
你不能。
只有请求来自的 IP 地址可用。
没有可靠的方法来识别路由到同一台计算机的其他 IP 地址(我的笔记本电脑目前有 12 个 IP 地址)。
客户端将仅使用一种协议向您的服务器发送请求。它不会同时使用 both IPv4 和 IPv6 发送请求,并且无法交错两种协议,而且 IPv4 地址也不会转换为等效的 IPv6 地址。如果客户端使用 IPv4 发送请求,那么您将获得 IPv4 地址。如果他们使用 IPv6 发送请求,您将获得 IPv6 地址。时期。故事结束。
如果您需要 一个 IPv4 地址,那么您必须在您的 server/DNS 条目上禁用 IPv6 支持,因此所有客户端都被迫使用 IPv4 作为唯一可用的协议。但这在当今时代也是可怕的倒退。