[英]Calculating IP Address Long Form Number for IPv6 Compared to IPv4 Using PHP
[英]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。 这使您的任务很容易解决。
$ip = IpUtils::create('d7a:5949:11d0:bd9e:b2c1:6268:d889:de9b/48');
echo $ip->netAdr(); // d7a:5949:11d0::
通过将掩码的所有主机位设置为零来计算网络的起始地址。 换句话说,它是地址和掩码的简单按位与。
使用inet_pton解析IP地址。 标准库中没有生成二进制网络掩码的 function,因此您必须自己编写:
<?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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.