• C#验证子网掩码的正确性


    1.       IP合法关于IP地址的合法性验证很简单,方法也很多,比如字符串分解、正则表达式等。

    2.       子网掩码是否合法简单来讲,子网掩码就类似这样一串数字,前面一段是连续的1, 类似“111111111”,后面一段是连续的0,类似“00000”,这样合法的样子是“11111111000000000”,总共是32位。

      一个合法的子网掩码要满足如下条件:1、是合法的IP地址2、二进制码要相邻,即形如111……11000……0的形式3、与IP地址对应,A、B、C、D各类IP地址都有对应的掩码范围  

    原理很简单,任何int数字都可以换成8位二进制0,1表示如 1是 0000 0001, ip地址有4个小于256的数字组成,这样组成32位0,1的二进制数据。其中,这32位0,1数字以1开头,并且一旦出现0,后面就不能再出现1了,即1和0的出现都是连续的才是合法的,如此可以一个个字节的判断1后面出现0后是不是就全是0了。

    下面给出子网掩码的合法性判断:

    public bool checkMask(string mask) 
            {
                string[] vList = mask.Split('.'); 
                if (vList.Length != 4) return false; 
    
                bool vZero = false; // 出现0 
                for (int j = 0; j < vList.Length; j++) 
                {
                    int i;
                    if (!int.TryParse(vList[j], out i)) return false;
                    if ((i < 0) || (i > 255)) return false;
                    if (vZero)
                    {
                        if (i != 0) return false;
                    }
                    else
                    { 
                        for (int k = 7; k >= 0; k--)
                        {
                            if (((i >> k) & 1) == 0) // 出现0 
                            {
                                vZero = true;
                            }
                            else
                            {
                                if (vZero) return false; // 不为0 
                            }
                        }
                    } 
                }
    
                return true; 
            } 
  • 相关阅读:
    Linux下的输入/输出重定向
    strcpy与strncpy的区别
    C++的函数重载
    gtest 学习二
    gtest 学习一
    char* wchar* char wchar转换
    iconv 编译不通过问题
    嵌入式常用库
    驱动编程class_create说明
    libiconv 交叉编译
  • 原文地址:https://www.cnblogs.com/jhlong/p/5501482.html
Copyright © 2020-2023  润新知