加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

mysql – 检查IP是否在子网中

发布时间:2021-04-02 11:49:20 所属栏目:编程 来源:网络整理
导读:我有一个表A,个中IP地点(ipNumeric)存储为无标记整数,表B包括子网(subnetNumeric): INET_NTOA(ipNumeric) = 192.168.0.1INET_NTOA(subnetNumeric) = 192.168.0.0 我想搜查一下这个IP是否是子网的成员. 子网是A,B和C类. 这是否可以在MySQL中的公道时刻内举办

我有一个表A,个中IP地点(ipNumeric)存储为无标记整数,表B包括子网(subnetNumeric):

INET_NTOA(ipNumeric) = 192.168.0.1
INET_NTOA(subnetNumeric) = 192.168.0.0

我想搜查一下这个IP是否是子网的成员.

子网是A,B和C类.

这是否可以在MySQL中的公道时刻内举办,可能子网范畴是否应该预先计较?

最佳谜底 虽然,这是可行的.我们的设法是,我们通过将最高有用位配置为1来计运算符网掩码,这与子网类所划定的一样多.对付C类,那就是

SELECT -1 << 8;

然后,用你拥有的IP地点和子网掩码;假如IP在子网内,功效应该便是子网地点 – 尺度收集内容.以是我们最终获得:

SELECT (-1 << 8) & INET_ATON("192.168.0.1") = INET_ATON("192.168.0.0");

更新:是的,有须要知道收集类或子网掩码(这是等效信息).假如您没有此信息,请思量如那里理赏罚子网为X.Y.0.0的环境.这是X.Y.0.0 / 16照旧X.Y.0.0 / 8,个中第三个八位字节刚好是0?没步伐知道.

假如您确实知道子网掩码,则可以将查询写为

SELECT (-1 << (33 - INSTR(BIN(INET_ATON("255.255.255.0")),"0"))) &
       INET_ATON("192.168.0.1") = INET_ATON("192.168.0.0");

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读