首页 文章

php cidr前缀到netmask

提问于
浏览
5

我正在寻找将cidr前缀(例如/ 28)转换为网络掩码(例如255.255.255.240)并且没有为此定位函数,PHP中是否存在一个?如果没有,我将如何做到这一点?

2 回答

  • 7

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

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

    我在snipplr发布了全班 .

  • 5

    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);
    
      }
    

    Usage

    echo cidr2NetmaskAddr ('194.234.213.0/28');
    

    Output

    255.255.255.240


    Example #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);
    
      }
    

    Usage

    echo createNetmaskAddr (28);
    

    Output

    255.255.255.240

相关问题