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