Вы знаете, что вы можете легко конвертировать адреса IPv4 в числа int (числа int32), не так ли? Работать с целыми числами намного проще. Таким образом, в основном каждый адрес представляет собой число в диапазоне от 0 до 2 ^ 32. Каждый диапазон имеет начальный номер и конечный номер. Ваш пример
1.1.1.1 to 2.2.2.5
1.1.1.2 to 2.2.2.4
можно записать как
16,843,009 to 33,686,021
16,843,010 to 33,686,020
Так что довольно легко увидеть, находится ли один диапазон в другом диапазоне. Диапазон полностью находится в другом диапазоне, если задано следующее условие
startIP2 >= startIP1 && startIP2 <= endIP1 &&
endIP1 >= startIP1 && endIP2 <= endIP1
В этом случае диапазон startIP2-endIP2 полностью находится в пределах startIP1-endIP1. Если верна только первая строка, то startIP2 находится в диапазоне startIP1-endIP1, но конец выходит за пределы диапазона. Если верна только вторая строка, endIP находится в пределах диапазона, но начальный IP находится вне диапазона. В этом случае, если верна только одна строка, вам нужно расширить диапазон в начале или в конце. Если обе строки ложные, диапазоны полностью не пересекаются, в этом случае это два полностью независимых диапазона.