Ваше решение работает;Вам не нужно проверять высокие адреса. Я бы не советовал писать собственное решение для чего-то, что уже работает, но проверить сеть как подсеть другой сети не сложно.
Просто используйте маску сети большей сети, чтобы увидеть, меньше лисеть является подмножеством большой сети.
Вот пример в java ...
String[] c1 = s1.split("/");
String[] c2 = s2.split("/");
if (c1.length != 2 || c2.length != 2) {
throw new Exception("malformed cidr address" + " " + "(s1=" + s1
+ ", " + "s2=" + s2 + ")");
}
String[] a1 = c1[0].split("\\.");
String[] a2 = c2[0].split("\\.");
if (a1.length != 4 || a2.length != 4) {
throw new Exception("malformed cidr address" + " " + "(s1=" + s1
+ ", " + "s2=" + s2 + ")");
}
int m1, m2;
try {
m1 = Integer.parseInt(c1[1], 10);
m2 = Integer.parseInt(c2[1], 10);
} catch (NumberFormatException ne) {
throw new Exception("malformed cidr address" + " " + "(s1=" + s1
+ ", " + "s2=" + s2 + ")");
}
if ((m1 < 0) || (m1 > 32) || (m2 < 0) || (m2 > 32)) {
throw new Exception("malformed cidr address" + " " + "(s1=" + s1
+ ", " + "s2=" + s2 + ")");
}
int i1 = 0, i2 = 0;
for (int i = 0; i < 4; i++) {
try {
int x1 = Integer.parseInt(a1[i], 10);
int x2 = Integer.parseInt(a2[i], 10);
if ((x1 < 0) || (x1 > 255) || (x2 < 0) || (x2 > 255)) {
throw new Exception("malformed cidr address" + " " + "(s1=" + s1
+ ", " + "s2=" + s2 + ")");
}
i1 = i1 | (x1 << (24 - (i << 3)));
i2 = i2 | (x2 << (24 - (i << 3)));
} catch (NumberFormatException ne) {
throw new Exception("malformed cidr address" + " " + "(s1=" + s1
+ ", " + "s2=" + s2 + ")");
}
}
int l1 = (int) (((long)1 << (32 - m1)) - 1);
int l2 = (int) (((long)1 << (32 - m2)) - 1);
i1 = i1 & ~l1;
i2 = i2 & ~l2;
if ((i1 & ~l2) == i2 ||
(i2 & ~l1) == i1)
return true;
return false;