搜索

首页  >  问答  >  正文

ruby 将ip长度换算成掩码

求ruby 将ip长度换算成掩码?
比如:41.58.0.0 - 41.58.255.255 65536
将65536 分别换算成255.255.0.0/16

不会ruby ,请帮助谢谢!

PHP中文网PHP中文网2777 天前827

全部回复(1)我来回复

  • 大家讲道理

    大家讲道理2017-04-22 09:02:12

    def mask(ip1, ip2)
        num = ->(ip) { n=ip.split("."); n[0].to_i()*0x1000000+n[1].to_i()*0x10000+n[2].to_i()*0x100+n[3].to_i() }
        m=(/(1+)$/.match((num.call(ip1)^num.call(ip2)).to_s(2))[1])
        nip = m.to_i(2)^0xFFFFFFFF
        (nip/0x1000000%0x100).to_s + '.' + (nip/0x10000%0x100).to_s + '.' + (nip/0x100%0x100).to_s + '.' + (nip%0x100).to_s + '/' + m.size.to_s
    end
    

    测试:

    irb(main):001:0> mask("41.58.0.0", "41.58.255.255")
    => "255.255.0.0/16"
    

    回复
    0
  • 取消回复