IP 범위를 IP 배열로 변환하는 쉬운 방법이 있습니까?Ruby : IP 범위를 IP 배열로 변환하는 방법
def convertIPrange (start_ip, end_ip)
#output: array of ips end
end
입력
('192.168.1.105', '192.168.1.108')
출력
['192.168.1.105','192.158.1.106','192.158.1.107','192.158.1.108']
IP 범위를 IP 배열로 변환하는 쉬운 방법이 있습니까?Ruby : IP 범위를 IP 배열로 변환하는 방법
def convertIPrange (start_ip, end_ip)
#output: array of ips end
end
입력
('192.168.1.105', '192.168.1.108')
출력
['192.168.1.105','192.158.1.106','192.158.1.107','192.158.1.108']
사용하여 루비 표준 라이브러리 IPAddr
# I would suggest naming your function using underscore rather than camelcase
# because of Ruby naming conventions
#
require 'ipaddr'
def convert_ip_range(start_ip, end_ip)
start_ip = IPAddr.new(start_ip)
end_ip = IPAddr.new(end_ip)
# map to_s if you like, you can also call to_a,
# IPAddrs have some neat functions regarding IPs,
# be sure to check them out
#
(start_ip..end_ip).map(&:to_s)
end
올바른 일을하고 IPAddr을 사용하는 유일한 대답은 +1입니다. [IPAddress] (https://github.com/bluemonk/ipaddress) 젬은 특히 네트워크 조작을 할 때 더욱 완벽한 기능을 갖추고 있습니다. –
+1, 그러나 IPAddr은 핵심이지만 표준 lib에는 없습니다. – steenslag
이것이 올바른 대답 인 이유는 IPAddr이 마지막 옥텟 변경이 아닌 IP 범위를 자동으로 처리한다는 것입니다. 큰 배열을 만들지 만 여전히 올바른 일을 할 것입니다. –
def convertIPrange first, last
first, last = [first, last]
.map{|s| s.split(".").inject(0){|i, s| i = 256 * i + s.to_i}}
(first..last).map do |q|
a = []
(q, r = q.divmod(256)) && a.unshift(r) until q.zero?
a.join(".")
end
end
convertIPrange('192.168.1.105', '192.168.1.108')
# => ["192.168.1.105", "192.168.1.106", "192.168.1.107", "192.168.1.108"]
convertIPrange('192.255.255.254', '193.0.0.1')
# => ["192.255.255.254", "192.255.255.255", "193.0.0.0", "193.0.0.1"]
가 배열의 범위를 변환 쉽게하는 동안은, 그렇게 조심 매우 * * 수. Range는 엔드 포인트 만 있기 때문에 엔드 포인트를 저장하는 매우 컴팩트하고 효율적인 방법입니다. 반면에 배열은 모든 요소를 포함하여 모든 요소를 포함하여 모든 요소가 메모리를 사용합니다./8 CIDR에서 IP가 포함 된 배열의 의미를 고려하십시오. 더 큰 네트워크이거나 IPv6을 다루는 경우에만 악화됩니다. –