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