gpt4 book ai didi

mysql - 如何在mysql上使用IP和CIDR计算网络和广播地址

转载 作者:行者123 更新时间:2023-11-29 11:59:49 25 4
gpt4 key购买 nike

在我的数据库中,地址范围使用 IP/CIDR 表示法存储在单列中。该值包含起始和结束 IP 地址,但需要将它们提取到广播和网络字段中。起始和结束 IP 地址存储为数字。我读过的一篇文章提到,使用 MySQL 的 native inet_aton() 函数将 IP 转换为 IP 数字,然后使用 inet_ntoa() 函数转换回点分 IP 地址。所以将地址存储为数字可以更有效地查询数据库。

根据我的理解,使用IP和CIDR,可以计算出广播地址。广播地址是网络IP,加上32减去CIDR,2的次方减1

因此,我运行了以下 SQL 更新来填充两列。

UPDATE blocks SET 
broadcast = (INET_ATON(SUBSTRING_INDEX(network_cidr, '/', 1)) + (POW(2, (32-SUBSTR(network_cidr, INSTR(network_cidr, '/')+1)))-1)),
network = INET_ATON(SUBSTRING_INDEX(network_cidr, '/', 1));

但这对我不起作用。我做错了什么吗?

这是 mysql 表:

network_cidr    network broadcast
2001:1200::/32 (NULL) (NULL)
2001:1208::/32 (NULL) (NULL)
2001:1210:1000::/36 (NULL) (NULL)
2001:1210:100:8000::/49 (NULL) (NULL)
2001:1210:100::/49 (NULL) (NULL)
2001:1210:101::/48 (NULL) (NULL)
2001:1210:102::/47 (NULL) (NULL)
2001:1210:104::/46 (NULL) (NULL)
2001:1210:108::/45 (NULL) (NULL)
2001:1210:110::/44 (NULL) (NULL)
2001:1210:120::/43 (NULL) (NULL)
2001:1210:140::/42 (NULL) (NULL)

最佳答案

我认为您的问题是您的 cidr 地址是 IPv6 地址。不幸的是,根据 MySQL 文档,INET_ATON 仅适用于 IPv4 地址。请改用 INET6_ATON。您可能需要检查您的 MySQL 版本是否支持 INET6_ATON。

http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html

关于mysql - 如何在mysql上使用IP和CIDR计算网络和广播地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32576733/

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