Как взять диапазон IP из консоли и сделать запросы ко всем IP в пределах диапазона, используя Ruby? - PullRequest
1 голос
/ 19 февраля 2012

Я хочу получить диапазон IP-адресов, например 192.168.1.10-40, из консоли и сделать запрос на каждый IP-адрес и распечатать ответы на консоли.

Возможно ли это сделать с помощью net / http и uri или нужно что-то еще?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2012

Сделав несколько предположений о синтаксисе ваших IP-диапазонов, я получил следующее. Возможно, вы захотите использовать два полных IP-адреса или CIDR .

require 'ipaddr'
require 'net/http'
require 'uri'

range = ARGV[0]
from, part = range.split("-")
arr_from, arr_part = from.split("."), part.split(".")
to = (arr_from.take(4-arr_part.length) << arr_part).join(".")

puts "HTTP responses from #{from} to #{to}"

ip_from = IPAddr.new(from)
ip_to = IPAddr.new(to)

(ip_from..ip_to).each do |ip|
  puts ip.to_s
  begin
    puts Net::HTTP.get( URI.parse("http://#{ip.to_s}/") )
  rescue => e
    puts e.message
  end
end
0 голосов
/ 19 февраля 2012

дополнение к steenslag ответ.

require 'net/http'
require 'uri'
require 'ipaddr'

(IPAddr.new("192.168.1.10")..IPAddr.new("192.168.1.40")).each do |address|
  puts Net::HTTP.get(URI.parse("http://#{address.to_s}"))
end

UPD: добавлено http://

0 голосов
/ 19 февраля 2012

Класс IPAddr включает в себя Comparable, поэтому вы можете делать такие вещи, как:

require 'ipaddr'
(IPAddr.new("192.168.1.10")..IPAddr.new("192.168.1.40")).each{|ip| puts ip}
...