ruby-on-rails - 如何使用 Ruby 生成两个地址之间的 IP 地址列表
问题描述
我有一个用户输入了他们想要使用的 IP 地址字符串。该字符串看起来像:
192.168.1.3-192.168.1.100
我正在尝试生成一个 IP 地址数组,包括起始地址和结束地址之间的地址,如下所示:
["192.168.1.3","192.168.1.4",.....,"192.168.1.99","192.168.1.100"]
我希望它会像
("192.168.1.3".."192.168.1.100").step(1).to_a
但我想不是。
解决方案
使用Ruby Stdlib中的 IPAddr。
IPAddr 提供了一组方法来操作 IP 地址。支持 IPv4 和 IPv6。
require 'ipaddr'
# I used a smaller number to limit the output
ip_range = IPAddr.new("192.168.1.3")..IPAddr.new("192.168.1.13")
ip_range.to_a
输出是 IPAddr 实例的数组。
=> [#<IPAddr: IPv4:192.168.1.3/255.255.255.255>, #<IPAddr: IPv4:192.168.1.4/255.255.255.255>, #<IPAddr: IPv4:192.168.1.5/255.255.255.255>, #<IPAddr: IPv4:192.168.1.6/255.255.255.255>, #<IPAddr: IPv4:192.168.1.7/255.255.255.255>, #<IPAddr: IPv4:192.168.1.8/255.255.255.255>, #<IPAddr: IPv4:192.168.1.9/255.255.255.255>, #<IPAddr: IPv4:192.168.1.10/255.255.255.255>, #<IPAddr: IPv4:192.168.1.11/255.255.255.255>, #<IPAddr: IPv4:192.168.1.12/255.255.255.255>, #<IPAddr: IPv4:192.168.1.13/255.255.255.255>]
一句警告的话。如果您正在接受用户输入,请确保抓住可能IPAddr::InvalidAddressError
发生的潜力。
begin
IPAddr.new(params[:from])..IPAddr.new(params[:to])
rescue IPAddr::InvalidAddressError
# @todo handle error
logger.info("Oh Noes!")
end
推荐阅读
- tensorflow - 在 Keras 中使用 TF Dataset API 的既定方法是使用 `make_one_shot_iterator()` 提供 `model.fit`,但这个迭代器只适用于一个 Epoch
- python-3.x - isatty() 总是返回 False?
- python-3.x - 从 aws lambda 函数连接到 redshift 时出错
- java - 如何在 Java 中使用 Sphinx 搜索
- javascript - 使用 preventDefault 方法删除 click 事件后如何继续?
- forms - 没有提交按钮的表单的可能性
- java - java - 如何使用Java中参数中的索引使用递归创建删除方法?
- tsql - 如何从给定日期(不包括周末)将日期范围创建为从日期到截止日期
- html - 我怎么能对齐这三个底部的 div 上升?
- python - 如何使用python从spark中获取已处理和未处理数据的数量