根据netmask快速判断是否在一个网域

natmask就是子网掩码,与ip进行与的运算,得到一个网域。

ip 由4段构成,例 172.25.45.10 每段由8位二进制组成

即 11111111.11111111.11111111.11111111这个代表的是255.255.255.255

同理 子网掩码也是由8位二进制组成。它又分为网络位和主机位。

172.25.45.10/24 表示有24个1 组成网络位  剩余 8位组成主机位。

一般情况最常见到的子网掩码是 8 即8个1 即 255.0.0.0 16个1 255.255.0.0 24个1 255.255.255.0

32个1 是广播地址 255.255.255.255

这个的计算就是二进制想十进制的转化。

明白了这个一般情况,来谈谈不一样的。举个例子由于惯性思维当我们看到

172.25.42.10/21 和 172.25.47.100/21 这两个ip是感觉就是不在一个网域,因为第三段的不想同 42和47 不一样。但事实它们在一个网段。

我们以第三段为例。 它们各自的网域应该这样计算。

21-16=5就是所有的1的数减去前两段的16个1的数就是第三段的1的个数。第三段的掩码相当于为5

42转化为8位二进制为 00101010 与 第三网段的子网掩码5个1 即 11111000 对应位置与的运算

00101010 对应十进制数是42

11111000 子网掩码

00101000 对应位与的运算得到的 网域

同理

00101111 对应十进制数是47

11111000 子网掩码 00101000 对应位与的运算得到的 网域

一个网域的判断是看它的网络位 所以在不在一个网域在这个例子中和第四段没有关系

可以看到172.25.42.10/21 和 172.25.47.100/21 是在一个网域的。

****************************************************

那如何快速的根据netmask来判断ip是否在一个网域?

172.25.42.10/21 和 172.25.47.100/21

第三段的网络位 为 21-16=5 那主机位 位 8-5=3

根据位权值得计算方法可得

1  1  1  1  1  1  1  1

128 64 32 16   8  4  2  1

3个主机位即是 4+2+1=7 5个网络位就是 128+64+32+16+8=248

由于子网掩码是 11111000 与ip进行与的运算 要想运算后在同一个网域 也就是说 ip 的前5个1 也就是网络位要一样 ,那么网络位一样的前提下, 主机位之间 的变化就是 小于等于7.

  • ①  所以 当看到一个ip和它的子网掩码时,先计算出它的关键段的 主机位的变化,

例 9和17 10和18 11和19 它们分别在第一段和第二段 但他们的主机位是一致的

9   11111111 10000000 00000000 0000000

17  11111111 11111111 10000000 0000000

它们的关键段主机位是 127  关键段就是可以判断是否在一个网域的关键段 子网掩码 0到8 就是第一段 8到16 就是第二段 16到24 就是第三段 24到32就是第四段


② 计算出关键段的主机位 例 172.25.42.10/21 和 172.25.47.100/21 它们的关键段是第三段 主机位是 7  那么 首先判断 关键段的ip 是否小于 主机位 ,在例子中 42和47 相差位5小于 7 所以有可能在一个网段。 如果大于 7 则肯定 不在一个网域。

③ 如果小于 7 则可能在一个网域。

0-7

8-15

16-23

24-31

32-39

.

.

.

248-255

可以发现规律

主机位是0到7 是8个一循环

所以 在 小于等于7 的前提下  可以 用关键段的 ip/8 看他们的商是否相同 相同则在一个网域 反之不在一个网域。

例 42/8=5 47/8=5 求商即可  都是5 所以在一起  那 42和48 就不在一个网域。

这样可以用算术的方法来快速的判断。

时间: 2024-10-12 07:52:40

根据netmask快速判断是否在一个网域的相关文章

vuex中filter的使用 && 快速判断一个数是否在一个数组中

vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr) { return index < 5 }) }), 如上所示,对于vuex,我们在使用mapState获取state时, 可以使用filter来过滤其中的元素,在filter的回调函数中接受三个参数,第一个是value,即每一个元素的值: 第二个是index, 即每一个元素所在的index, 第三个

js快速判断IE浏览器(兼容IE10与IE11)

在很多时候,我们一般采用navigator.userAgent和正则表达来判断IE浏览器版本,下面介绍用IE浏览器中不同特性来判断IE浏览器   1 判断IE浏览器与非IE 浏览器 IE浏览器与非IE浏览器的区别是IE浏览器支持ActiveXObject,但是非IE浏览器不支持ActiveXObject.在IE11浏览器还没出现的时候我们判断IE和非IE经常是这么写的 ? 1 2 3 function isIe(){        return window.ActiveXObject ? tr

布隆过滤器 - 如何在100个亿URL中快速判断某URL是否存在?

题目描述 一个网站有 100 亿 url 存在一个黑名单中,每条 url 平均 64 字节.这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中? 题目解析 这是一道经常在面试中出现的算法题.凭借着题目极其容易描述,电面的时候也出现过. 不考虑细节的话,此题就是一个简单的查找问题.对于查找问题而言,使用散列表来处理往往是一种效率比较高的方案. 但是,如果你在面试中回答使用散列表,接下来面试官肯定会问你:然后呢?如果你不能回答个所以然,面试官就会面无表情的通

如何利用一些小工具快速判断电脑是否中毒

在这个网上支付流行的时代,人们最害怕的事情莫过于电脑病毒了.以前不装杀毒软件"裸奔"是一件再平常不过的事情.现在估计很少有人敢这么干了,生怕自己网银里的钱被别人神不知鬼不觉的偷走了.今天,我就写一篇新手小白文来告诉大家如何快速判断自己的电脑是否已经中毒. 在讨论如何判断电脑是否中毒之前,我们先来说一下病毒常见的一些的特征. 1. 计算器里运行的各种程序我们都可以找到相对应的进程.病毒的进程名通常会比较奇怪.比如一串奇怪的随机名,再比如伪装成一些系统进程名.举个栗子,svchost.ex

————————————————素数的快速判断方法————————————————————

1:   当n>=6   且n-1和n+1是孪生素数的话那么n一定是6的倍数. 证明:因为n-1和n+1为素数----① 所以n-1和n+1为奇数----② 所以n是偶数是2的倍数--③ 假设n不是3的倍数,得: n=3x+1或n=3x+2, 如果n=3x+1则n-1=3x这和①违背所以n≠3x+1 如果n=3x+2,zen+1=3(x+1)与①违背 所以假设不成立,既n是3的倍数又有②结论则n是6的倍数. 由上面的规律可以推出下面的结论: 如x>=1且n=6x+1或n=6x+1,那么n一定不

互联网新手必备丨如何快速判断文章是否值得细读

互联网新手必备丨如何快速判断文章是否值得细读 祝拙租缀状阻酌桌追捉锥租资遵转互联网新手必备丨如何快速判断文章是否值得细读 http://www.songtaste.com/user/10341669/info http://www.songtaste.com/user/10341674/info http://www.songtaste.com/user/10341679/info http://www.songtaste.com/user/10341730/info http://www.so

Java快速判断是不是手机号

假如现在有一个字符串,如何快速准确的判断其是否为手机号? public boolean isMobileNO(String mobiles) { Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$"); Matcher m = p.matcher(mobiles); return m.matches(); } 相当简单-------------------------- Java快速判断是不是手

Delphi 7 中,如何快速判断SQL是否能连接上??

Delphi 7 中,如何快速判断SQL是否能连接上?? 谢谢各位!! with DM do begin Conn.Connected := False; Conn.ConnectionString := Connstring; try Conn.Connected := True; except Application.MessageBox('Server connect error!!',cp_Main,MB_OCE); end; end; 你这个只是先断开再重新连接一下,如果SQL服务是没

如何快速判断一个文件是否为病毒

先说一下写这篇文章的背景和目的.现在吾爱的『原创发布区』和『精品软件区』人气很旺,发布的软件非常多.但也有一些小人,在发布的软件里插些小玩具,当灰客.论坛派专人检测也是很困难的,工作量太大,查不过来,因此很大程度上要靠用户自己识别,于是就有了这篇文章.需要说明一下的是,这篇文章主要是快速辨别正常文件与病毒,我自己也不是专业人员,方法是我自己总结出来的,很业余,不过我觉得还是有些用处的.如果你有更好的办法,欢迎跟帖提出.下面正文开始. 分析一个文件是否为病毒有多种方法,比如用OD这样的调试器,用H