关于网友提出的“ 如何判断一个内网IP网段是不是另一个内网IP网段的子网段?”问题疑问,本网通过在网上对“ 如何判断一个内网IP网段是不是另一个内网IP网段的子网段?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 如何判断一个内网IP网段是不是另一个内网IP网段的子网段?
描述:本帖最后由 hjgzj 于 2017-08-09 18:33:24 编辑
如图

里面有许多子节点和根节点,我怎么校验子节点的网段是不是父节点网段的子网段
求个代码
解决方案1: 你好歹说一下是什么语言啊……
算法是这样:完整的网段由IP a.b.c.d,加上掩码长度 e组成。
1. 把父节点和子节点的a,b,c,d写成8位2进制,不足8位的,在前面补0
2. 把4个8位二进制数按a在高位,d在低位的顺序拼起来(其实就是(a<<24) + (b <<16) + (c<<8) +d的二进制形式),这样就把两个IP转成了一个32位的二进制形式
3. 按父节点的掩码长度e,从高位向低位截取两个IP(截取的结果叫网络位),剩下的位数全置为0(这个叫主机位)
4. 判断一下两个截取结果是否相等
具体做的话,其实就是用掩码和两个IP按位与运算,得到的结果做一次异或,看结果是不是为0
重点是,要用父节点的掩码来做运算
(
(
(2^e-1)<<(32-e)
)
&
(
(a1<<24) + (b1 <<16) + (c1<<8) +d1
)
)
^
(
(
(2^e-1)<<(32-e)
)
&
(
(a2<<24) + (b2 <<16) + (c2<<8) +d2
)
)
以上介绍了“ 如何判断一个内网IP网段是不是另一个内网IP网段的子网段?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/4525536.html