Posterior a de una larga búsqueda de datos pudimos solucionar este apuro que pueden tener muchos los lectores. Te regalamos la solución y nuestro deseo es que te resulte de mucha ayuda.
Solución:
>> require "ipaddr"
=> true
>> low = IPAddr.new("62.0.0.0").to_i
=> 1040187392
>> high = IPAddr.new("62.255.255.255").to_i
=> 1056964607
>> ip = IPAddr.new("62.156.244.13").to_i
=> 1050473485
>> (low..high)===ip
=> true
Si se le proporciona la red en lugar de las direcciones de inicio y finalización, es aún más simple
>> net = IPAddr.new("62.0.0.0/8")
=> #
>> net===IPAddr.new("62.156.244.13")
=> true
IPAddr
también funcionará con direcciones IPv6
>> low = IPAddr.new('1::')
=> #
>> high = IPAddr.new('2::')
=> #
>> (low..high)===IPAddr.new('1::1')
=> true
Usaría esta pequeña función asesina para convertir las direcciones IP en números enteros y luego compararlas.
def ip_addr_in_range?(low, high, addr)
int_addr = numeric_ip(addr)
int_addr <= numeric_ip(high) && int_addr >= numeric_ip(low)
end
def numeric_ip(ip_str)
ip_str.split('.').inject(0) ( ip_num << 8 ) + part.to_i
end
def test_ip_addr_in_range(low, high, addr, expected)
result = ip_addr_in_range?(low, high, addr)
puts "#addr #(expected ? 'should' : 'should not') be within #low and #high: #(expected == result ? 'PASS' : 'FAIL')"
end
test_ip_addr_in_range("192.168.0.0", "192.168.0.255", "192.168.0.200", true)
test_ip_addr_in_range("192.168.0.0", "192.168.0.155", "192.168.0.200", false)
test_ip_addr_in_range("192.168.0.0", "192.168.255.255", "192.168.100.200", true)
test_ip_addr_in_range("192.168.0.0", "192.168.100.255", "192.168.150.200", false)
test_ip_addr_in_range("192.168.255.255", "192.255.255.255", "192.200.100.100", true)
test_ip_addr_in_range("192.168.255.255", "192.255.255.255", "192.100.100.100", false)
test_ip_addr_in_range("192.168.255.255", "255.255.255.255", "200.200.100.100", true)
test_ip_addr_in_range("192.168.255.255", "255.255.255.255", "180.100.100.100", false)
$ ruby ip_range.rb
192.168.0.200 should be within 192.168.0.0 and 192.168.0.255: PASS
192.168.0.200 should not be within 192.168.0.0 and 192.168.0.155: PASS
192.168.100.200 should be within 192.168.0.0 and 192.168.255.255: PASS
192.168.150.200 should not be within 192.168.0.0 and 192.168.100.255: PASS
192.200.100.100 should be within 192.168.255.255 and 192.255.255.255: PASS
192.100.100.100 should not be within 192.168.255.255 and 192.255.255.255: PASS
200.200.100.100 should be within 192.168.255.255 and 255.255.255.255: PASS
180.100.100.100 should not be within 192.168.255.255 and 255.255.255.255: PASS
Hay un metodo #include?
Y puedes hacer solo:
IPAddr.new("127.0.0.1/8").include? "127.1.10.200"
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)