如何从控制台获取 IP 范围并使用 Ruby 向范围内的所有 IP 发出请求?

发布于 2025-01-07 18:01:03 字数 114 浏览 2 评论 0原文

我想从控制台获取像 192.168.1.10-40 这样的 IP 范围,并想向每个 IP 发出请求并在控制台上打印响应。

是否可以使用 net/http 和 uri 来做到这一点,或者需要其他东西?

I want to take IP range like 192.168.1.10-40 from console and want to make request to each IP and print responses on console.

Is this possible to do this using net/http and uri or one needs something else?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月亮邮递员 2025-01-14 18:01:03

通过对 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

By making a few assumptions of the syntax of your IP-ranges I ended up with the following. You might want to consider taking two full IP-addresses or CIDR instead.

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
相守太难 2025-01-14 18:01:03

IPAddr 类包含 Comparable,因此您可以执行以下操作:

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

The IPAddr class includes Comparable, so you can do things like:

require 'ipaddr'
(IPAddr.new("192.168.1.10")..IPAddr.new("192.168.1.40")).each{|ip| puts ip}
感性 2025-01-14 18:01:03

添加到 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://

Addition to steenslag answer.

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: added http://

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文