Ruby ip addr class
Используя стандартную библиотеку Ruby IPaddr можно работать с IP (как IPv4, так и IPv6) адресами – проверка формата, генерация array на основе Ip/mask, проверка относится ли хост к сети. Очень удобно.
Метод для проверки формата полагается на rescue создания объекта в классе IPaddr. Используя !! происходит конвертация значения (успешно созданного объекта класса IPaddr) в true.
require "ipaddr" def ip?(ip) !!IPAddr.new(ip) rescue false end puts ip?("192.168.0.1") puts ip?("192.168.1111.1")
.to_range – используя .to_range в связке с .map (вместо .map можно сделать простой .to_a, но тогда в array будет объекты с ip/mask) можно сгенерировать array из ip на основе ip/mask.
require "ipaddr" def calc_net_range(ip, mask) IPAddr.new("#{ip}/#{mask}").to_range.map { |ip_obj| ip_obj.to_s } end print calc_net_range("192.168.1.0", "255.255.255.0").inspect
.include? – можно использовать для проверки относится ли определенный хост к сети.
require 'ipaddr' net1 = IPAddr.new("192.168.2.0/24") net2 = IPAddr.new("192.168.2.100") net3 = IPAddr.new("192.168.3.0") p net1.include?(net2) #=> true p net1.include?(net3) #=> false
net-ping
Популярная и поддерживаемая (что очень важно) библиотека для проверки по ICMP хостов.
ВЗЯТЬ ИЗ NET_QUERY.RB