PHP CIDR前缀转换为子网掩码

7

我想将一个CIDR前缀(例如/28)转换为网络掩码(例如255.255.255.240),但是没有找到PHP中的函数来实现这一点。如果没有,我该如何处理?


这是基本的数学运算,可以在几分钟内轻松实现。 - zerkms
顺便说一下,https://dev59.com/UG445IYBdhLWcg3wTIjm - zerkms
$nvm,搞定了:搞定了!$cidr_mask = 24;$bin = ''; for($i=1;$i<=32;$i++) { $bin .= $cidr_mask >= $i ? '1' : '0'; } $netmask = bindec($bin); echo long2ip($netmask); - phpnoobipv4
2个回答

12

我写了一个,其中包含一个执行此操作的方法。

function CIDRtoMask($int) {
    return long2ip(-1 << (32 - (int)$int));
}

我将整个类作为gist发布。


6

Example #1:

function cidr2NetmaskAddr()

  function cidr2NetmaskAddr ($cidr) {

    $ta = substr ($cidr, strpos ($cidr, '/') + 1) * 1;
    $netmask = str_split (str_pad (str_pad ('', $ta, '1'), 32, '0'), 8);

    foreach ($netmask as &$element)
      $element = bindec ($element);

    return join ('.', $netmask);

  }

使用方法

  echo cidr2NetmaskAddr ('194.234.213.0/28');

输出

255.255.255.240


示例 #2:

function createNetmaskAddr()

  function createNetmaskAddr ($bitcount) {

    $netmask = str_split (str_pad (str_pad ('', $bitcount, '1'), 32, '0'), 8);

    foreach ($netmask as &$element)
      $element = bindec ($element);

    return join ('.', $netmask);

  }

使用方法

  echo createNetmaskAddr (28);

Output

255.255.255.240


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接