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;
    }
  • 相关阅读:
    docker常用命令
    Jenkins 插件开发记录
    【转】python作用域
    git备忘录
    【笔记】script.sh: source: not found in docker 问题
    (转)JavaScript判断浏览器类型及版本
    (转)webstorm快捷键
    (转)javaScript call 函数的用法说明
    (转载)记录函数 getStyle() 获取元素 CSS 样式
    (转)resize扩展
  • 原文地址:https://www.cnblogs.com/zl181015/p/10918533.html
Copyright © 2011-2022 走看看