我想找到一种方法来执行 SQL 查询,该查询将计算存储在数据库中的子网掩码的 cidr(位表示)。例如,我在数据库中存储了 255.255.255.0 或其十进制值 (4294967040)。我想通过查询进行选择并返回 /24 表示。
我已经执行了类似以下操作来确定子网的最后一个 IP,因此我希望执行类似的操作来确定掩码的 cidr 表示形式。
select concat(inet_ntoa(ip_addr),'-',
inet_ntoa(ip_addr+(POWER(2,32)-ip_mask-1))) range
from subnets
order by ip_addr
最好是在 mysql、postgres、oracle 等下运行的 SQL 语句。
我想我已经找到了解决我的问题的方法。这是我所做的:
select CONCAT(INET_NTOA(ip_addr),'/',32-log2((4294967296-ip_mask))) net
from subnets
order by ip_addr
基本上,我采用十进制掩码并从最大十进制值中减去它。然后我对该值进行 log2 以获得对数值。然后只需从 32(可用的最大位)中减去该值即可。
希望对其他人有帮助。
Thanks
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)