gpt4 book ai didi

ruby - 确定给定的 IP 地址是否在网络数组中

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:29 27 4
gpt4 key购买 nike

我正在尝试确定给定 IP 是否在网络数组中。对一组 IPAddr 对象使用 include? 似乎不起作用(从未满足 if 条件),例如:

require 'ipaddr'

my_ipaddr = IPAddr.new("192.168.10.102")

# define our internal networks
internal = [IPAddr.new("192.168.50.1/24"), IPAddr.new("192.168.10.1/24")]

if internal.include?(my_ipaddr)
puts "I'm in the internal network"
end

但是,如果我定义一个没有数组的单一网络,它会很好地工作:

internal = IPAddr.new("192.168.10.1/24")

如果您需要更多信息,请告诉我。我是 ruby​​ 的新手,所以请善待 :)。

最佳答案

您要求 Ruby 查看数组中的任何对象是否与 IP 地址匹配,但它们不匹配。 IP 网络与主机 IP 不同。

相反,您必须将主机 IP 与单个 IP 范围进行比较,看看它是否包含在内。

参见 include?在 IPAddr 类中:

internal.any? { |i| i.include?(my_ipaddr) }

Enumerable 的 any? 返回 true/false。使用 find 获取第一个:

internal.find { |i| i.include?(my_ipaddr) }

如果您正在进行大量 IP 地址操作或子网划分,请查看 IPAddress gem 。真的很好。

关于ruby - 确定给定的 IP 地址是否在网络数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com