繁体   English   中英

使用 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。 这使您的任务很容易解决。

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM