Ruby: работа с сетью (библиотеки/гемы IPAddr, net-ping, net-snmp)

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

 

Leave a Reply