使用 ip 和掩码获取网络地址。 (php, IPv6)
Get network address using ip and mask. (php, IPv6)
如何获取网络的第一个ip地址(使用ipv6)(php)
示例:
input - d7a:5949:11d0:bd9e:b2c1:6268:d889:de9b / 48
output- d7a:5949:11d0::
我已经创建了自己的 class IpUtils。你可以找到 class here。这使您的任务非常容易解决。
$ip = IpUtils::create('d7a:5949:11d0:bd9e:b2c1:6268:d889:de9b/48');
echo $ip->netAdr(); // d7a:5949:11d0::
网络的起始地址是通过将掩码的所有主机位设置为零来计算的。换句话说,它是地址和掩码的简单按位与运算。
使用inet_pton解析IP地址。标准库中没有生成二进制网络掩码的函数,所以你必须自己写一个:
<?php
function mask(int $bits, int $ones): string
{
$m = "";
for ($i = 0; $i < $bits/8; $i++) {
if ($ones >= 8) {
$m .= chr(0xff);
$ones -= 8;
} else {
$m .= chr(~(0xff >> $ones));
$ones = 0;
}
}
return $m;
}
$addr = inet_pton("d7a:5949:11d0:bd9e:b2c1:6268:d889:de9b");
$mask = mask(128, 48);
$start = $addr & $mask;
echo inet_ntop($start), "\n"; // d7a:5949:11d0::
在 3v4l.org 上试用:https://3v4l.org/hrD6a
如何获取网络的第一个ip地址(使用ipv6)(php) 示例:
input - d7a:5949:11d0:bd9e:b2c1:6268:d889:de9b / 48
output- d7a:5949:11d0::
我已经创建了自己的 class IpUtils。你可以找到 class here。这使您的任务非常容易解决。
$ip = IpUtils::create('d7a:5949:11d0:bd9e:b2c1:6268:d889:de9b/48');
echo $ip->netAdr(); // d7a:5949:11d0::
网络的起始地址是通过将掩码的所有主机位设置为零来计算的。换句话说,它是地址和掩码的简单按位与运算。
使用inet_pton解析IP地址。标准库中没有生成二进制网络掩码的函数,所以你必须自己写一个:
<?php
function mask(int $bits, int $ones): string
{
$m = "";
for ($i = 0; $i < $bits/8; $i++) {
if ($ones >= 8) {
$m .= chr(0xff);
$ones -= 8;
} else {
$m .= chr(~(0xff >> $ones));
$ones = 0;
}
}
return $m;
}
$addr = inet_pton("d7a:5949:11d0:bd9e:b2c1:6268:d889:de9b");
$mask = mask(128, 48);
$start = $addr & $mask;
echo inet_ntop($start), "\n"; // d7a:5949:11d0::
在 3v4l.org 上试用:https://3v4l.org/hrD6a