rubyip

Netmask to CIDR in ruby


I've been using the ip-address gem and it doesn't seem to have the ability to convert from a netmask of the form

255.255.255.0 

into the CIDR form

/24

Does anyone have an ideas how to quickly convert the former to the latter ?


Solution

  • Here is the quick and dirty way

    require 'ipaddr'
    puts IPAddr.new("255.255.255.0").to_i.to_s(2).count("1")
    

    There should be proper function for that, I couldn't find that, so I just count "1"

    If you're going to be using the function in a number of places and don't mind monkeypatching, this could help:

    IPAddr.class_eval
      def to_cidr
        "/" + self.to_i.to_s(2).count("1")
      end
    end
    

    Then you get

    IPAddr.new('255.255.255.0').to_cidr
    # => "/24"