Недавно мне поставили задачу в моей компании, где я должен создать такую функцию:
boolean addrMatch(String IP, String netMask);
Это не имеет никакого отношения к маршрутизации. У нас есть сетевая служба, которая будет использовать эту функцию. Параметр IP зависит от всех запросов, параметр netMask задается пользователем. Функция должна сообщать, совпадает ли фактический IP-адрес с предоставленной сетевой маской или нет. Это похоже на то, как пользователь говорит нашей системе обслуживать запросы в общедоступном Интернете только на определенное подмножество IP-адресов, а не на все из них. Мои знания, связанные с сетями, далеки от совершенства, поэтому я провел глубокий поиск по этой теме, но не продвинулся очень далеко. Что я знаю (или мне сказали): все два параметра являются действительными IP-адресами или сетевыми масками в нотации xxx.xxx.xxx.xxx. Я должен выполнить побитовое И над ними (очевидно, после преобразования их в массив BitSet или, по крайней мере, byte[]). Но я думаю, что это не полный алгоритм. Итак, мой вопрос: каков правильный алгоритм сопоставления IP-адреса с сетевой маской?
PS: я работаю на Java, но мне нужен общий метод.