gpt4 book ai didi

mysql - 基于IP和子网掩码的广播地址与mysql

转载 作者:行者123 更新时间:2023-11-29 05:46:54 29 4
gpt4 key购买 nike

我有以下两列:

SELECT  b.ip_address AS IP ,b.mask AS MASK FROM interfaces b WHERE b.ip_address = 167804290;+-----------+------------+| IP        | MASK       |+-----------+------------+| 167804290 | 4294967168 | +-----------+------------+
实际 IP 地址及其子网掩码在哪里
SELECT INET_NTOA(b.ip_address) AS IP,INET_NTOA(b.mask) AS MASK FROM interfaces b WHERE b.ip_address = 167804290;
+--------------+-----------------+| IP | MASK |+--------------+-----------------+| 10.0.125.130 | 255.255.255.128 | +--------------+-----------------+1 row in set (0.00 sec)
我正在尝试使用 mysql 找到一种获取实际广播范围的方法,在本例中为 10.0.125.255167804415,但我无法找到它。我得到的最接近的是

SELECT INET_NTOA(b.ip_address+(POWER(2,32)- b.mask - 1)) FROM interfaces b WHERE b.ip_address = 167804290; +---------------------------------------------------+| INET_NTOA(b.ip_address+(POWER(2,32)- b.mask - 1)) |+---------------------------------------------------+| 10.0.126.1                                        | +---------------------------------------------------+

唯一的问题是,这是假设 ip_address 列是子网 10.0.125.128

的开始

我们将不胜感激。

最佳答案

广播地址是子网掩码的补码,与 IP 地址相或。

SELECT INET_NTOA( ~b.mask & 0xffffffff | b.ip_address) 
FROM interfaces b
WHERE b.ip_address = 167804290;

(您必须使用“& 0xffffffff”进行屏蔽,因为在 MySQL 中,按位补码运算符返回 64 位值。)

关于mysql - 基于IP和子网掩码的广播地址与mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/508958/

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