Назад | Перейти на главную страницу

Добавьте проверку данных в настройки IP-адреса, чтобы пользователю было показано, настроены ли IP-адреса в той же подсети

Я должен добавить проверки в пользовательский интерфейс моего программного обеспечения (Пользовательский интерфейс IP-подсети), который позволяет пользователю ввести пару IP-адресов и масок подсети. Я должен убедиться, что два сетевых интерфейса не настроены в одной подсети.

Насколько я понимаю, если я выполню побитовое И между IP-адресом и маской подсети, я получу идентификатор сети, и если идентификаторы N / W не совпадают, будет ли этого достаточно, чтобы утверждать, что два сетевых интерфейса не находятся в одной подсети?

Этот вопрос ограничен IPV4.

Вам нужно замаскировать два адреса с помощью тем же маска сети, чтобы определить, является ли сеть такой же. Для сравнения необходимо использовать самую короткую маску сети. Таким образом вы определяете, находятся ли оба адреса в одной сети.

Процедура одинакова как для IPv4, так и для IPv6, за исключением размеров адреса и маски.

Например, 10.0.0.0/25 и 10.0.0.64/26 повторно запустит ту же сеть с самой короткой маской (255.255.255.128), но вернет разные сети с самой длинной маской (255.255.255.192) даже если вторая сеть является подсетью первой сети, поэтому любые адреса во второй сети попадают в первую сеть.

С самой короткой маской:

       10.0.0.0 -> 00001010000000000000000000000000
255.255.255.128 -> 11111111111111111111111110000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

      10.0.0.64 -> 00001010000000000000000001000000
255.255.255.128 -> 11111111111111111111111110000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

С самой длинной маской:

       10.0.0.0 -> 00001010000000000000000000000000
255.255.255.192 -> 11111111111111111111111111000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

      10.0.0.64 -> 00001010000000000000000001000000
255.255.255.192 -> 11111111111111111111111111000000
            AND -> ================================
                   00001010000000000000000001000000 = 10.0.0.64

С назначенными масками:

       10.0.0.0 -> 00001010000000000000000000000000
255.255.255.128 -> 11111111111111111111111110000000
            AND -> ================================
                   00001010000000000000000000000000 = 10.0.0.0

      10.0.0.64 -> 00001010000000000000000001000000
255.255.255.192 -> 11111111111111111111111111000000
            AND -> ================================
                   00001010000000000000000001000000 = 10.0.0.64

Как видите, только пример с использованием кратчайшей маски фактически возвращает правильный ответ, что второй адрес находится в сети первого адреса.

Во-первых, вам действительно нужна только одна запись маски подсети, поскольку их не следует помещать в одну подсеть, если у них две разные маски. Но помимо этого, да, вы И адреса с маской, и если вы получите тот же результат, они находятся в одной подсети.