【发布时间】:2017-01-12 03:46:58
【问题描述】:
我有一个处理大量 IP 地址的应用程序(分析检查点防火墙规则集)。有一次我想检查一个特定的地址对象是 /32 还是“网络”。
目前我正在这样做:
next unless ip.inspect.match(/\/255\.255\.255\.255/)
它可以工作,但似乎效率低下,但我看不到任何从地址对象中提取掩码的方法。
【问题讨论】:
-
您不能在不知道掩码或拥有其他某种数据的情况下执行此操作。
192.168.1.0是 IP 还是网络?它可能是 /23 的一部分。你能举出更好、更完整的例子吗? -
这很奇怪,确实没有网络掩码的访问器。您可以通过不对整个字符串进行
Regexp匹配来提高代码效率:ip.inspect.end_with?('/255.255.255.255>'),但这就是您所能做的。 -
Jorg:谢谢,这肯定比 RE 调用更快!
-
Tadman:关键是 IPAddr 类将网络掩码存储为每个对象的一部分,但似乎没有任何明显的方法可以访问它。在我的应用程序中,我混合了从 /32 到 /8 的网络掩码,其中 /32s 是我需要检查的特殊情况。
-
@tadman:或者拿点盐和一瓶龙舌兰酒。
标签: ruby ip-address