【问题标题】:Broadcast address based on IP and subnet mask with mysql使用mysql根据IP和子网掩码广播地址
【发布时间】:2009-02-03 21:23:18
【问题描述】:

我有以下两列:

选择 b.ip_address 作为 IP,b.mask 作为接口 b 的掩码,其中 b.ip_address = 167804290; +-----------+------------+ |知识产权 |面膜 | +-----------+------------+ | 167804290 | 4294967168 | +-----------+------------+ 实际 IP 地址及其子网掩码在哪里 选择 INET_NTOA(b.ip_address) 作为 IP,INET_NTOA(b.mask) 作为接口 b 的掩码,其中 b.ip_address = 167804290;
+--------------+------------------+ |知识产权 |面膜 | +--------------+------------------+ | 10.0.125.130 | 255.255.255.128 | +--------------+------------------+ 一组中的 1 行(0.00 秒) 我正在尝试用 mysql 找到一种方法来获取实际的广播范围,在这种情况下是 10.0.125.255167804415,但我看不到它。 我得到的最接近的是

SELECT INET_NTOA(b.ip_address+(POWER(2,32)- b.mask - 1)) 从接口 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 的开始

我们将不胜感激。

【问题讨论】:

    标签: mysql subnet


    【解决方案1】:

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

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

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

    【讨论】:

    • 太棒了。感谢您的快速回答。
    猜你喜欢
    • 2010-10-21
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2016-05-22
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多