一、判断子网掩码的有效性
子网掩码满足的条件:
是一个合法的IP地址
掩码中的1是连续的
各类地址中掩码的范围(此文中不做判断)
Java实现:
1 //掩码是否是连续1判断
2 private boolean IsSubnetMask(String netmask) {
3 String[] masks = netmask.split("\\.");
4 int mask = (Integer.parseInt(masks[0]) = 0 && n >>“的区分
Java实现:
1 //根据IP与掩码获取网络号(环回地址)和广播地址
2 private Map getNetwork(String address, String netmask) {
3 Map map = new HashMap();
4 String network = new String();
5 String broadcast = new String();
6 String[] addresses = address.split("\\.");
7 String[] masks = netmask.split("\\.");
8 for(int i = 0; i < 4; i++) {
9 int opmasksegement = ~Integer.parseInt(masks[i]) & 0xFF;
10 //此处有坑,正常的int有32位,如果此数没有32位的话,就会用0填充前面的数,从而导致取反0的部分会用1来填充,用上述方法可以获取想要的部分
11 int netsegment = Integer.parseInt(addresses[i]) & Integer.parseInt(masks[i]);
12 network = network + String.valueOf(netsegment) + ".";
13 broadcast = broadcast + String.valueOf(opmasksegement | netsegment) + ".";
14 }
15 map.put("network", network.substring(0, network.length() - 1));
16 map.put("broadcast", broadcast.substring(0, broadcast.length() - 1));
17 return map;
18 }
三、判断IP是否在某个网段中
将IP与掩码相与,如果其与网络号相同,则返回true
1 //判断IP是否在某个网段内
2 private boolean isInRange(String ip, String netmask, String network) {
3 String[] ips = ip.split("\\.");
4 int ipAddr = (Integer.parseInt(ips[0]) |