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; 
        } 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM