zoukankan      html  css  js  c++  java
  • 如何判断两个IP地址是不是处于同一网段?

    个人理解,欢迎指正。

    一、要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果-->网络号,如果网络号相同,

      就在同一子网,否则,不在同一子网。

    例:假定选择了子网掩码255.255.254.0,把IP地址和子网掩码转换为二进制,分别将上述两个IP地址分别与掩码做与运算,如下所示:

      211.95.165.24 11010011 01011111 10100101 00011000

      255.255.254.0 11111111 11111111 111111110 00000000
      与的结果是: 11010011 01011111 10100100 00000000
     
      211.95.164.78 11010011 01011111 10100100 01001110
      255.255.254.0 11111111 11111111 111111110 00000000
      与的结果是: 11010011 01011111 10100100 00000000
     
    可以看出,得到的结果(这个结果就是网络地址)都是一样的,因此可以判断这两个IP地址在同一个子网。
     
    一、互联网的地址
      互联网上的每个接口必须有个唯一的Internet地址(也称作IP地址),IP地址长32bit,Internet地址并不采用平面形式的地址空间,如1,2,3等。
      五类不同的互联网复制格式如图所示:
              

                        五类互联网IP地址

      这些32位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称为"点分十进制表示法"。如:192.168.10.11。

      ① IP地址 和 子网掩码相与得到得到网络号

      ② 子网掩码先取反,在 和 IP地址相与得到主机号

     判断两个Ip是否在同一网段的方法,前提是两个ip的子网掩码相同;(子网掩码,ip1,ip2)
    public static bool CheckIPAndMask(string mask,string ip1,string ip2){
       string[] maskList=mask.Split('.');
       string[] ip1List=ip1.Split('.');
       string[] ip2List=ip2.Split('.');
       for(int j=0;j<maskList.length;j++)
       {
             if((int.Parse(ip1List[j])&int.Parse(maskList[j]))!=
                (int.Parse(ip1List[j])&int.Parse(maskList[j])))
          {
               return false;
          }
       }
       return true;
    }
  • 相关阅读:
    启用div作为编辑器 添加contentEditalbe属性
    AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖-转
    angularjs的懒加载
    JavaScript 中的this指向问题
    Project Euler:Problem 41 Pandigital prime
    Android 消息机制
    新西兰天维网登录发送明文password
    使用Reveal来查看别人的APP界面+白苹果不刷机解决方式
    Android中List循环遍历性能对照
    2016年最新苹果开发人员账号注冊申请流程最强具体解释!
  • 原文地址:https://www.cnblogs.com/zl181015/p/10918533.html
Copyright © 2011-2022 走看看