Я пытаюсь сделать следующее в C # /. NET 2.0:
Учитывая объект IPAddress (скажем, 192.168.127.100) и другой объект IPAddress, содержащий маску IPv4Mask / subnet (скажем, 255.255.248.0), я должен иметь возможность вычислять начало и конец диапазона IP-адресов.
(Да, я пытаюсь выполнить цикл for через диапазон адресов в подсети.)
Теоретически, я должен иметь возможность побитового И на IP-адресе и SubnetMask, чтобы получить IPStart. Тогда я смогу выполнить побитовое XOR для IPStart и перевернутой (NOT'd) SubnetMask, чтобы получить IPEnd.
Объект IPAddress предоставляет методы для вывода адреса как «long» или как «byte []» (массив байтов).
Выполнение побитовой операции над long (потому что она подписана?) Приводит к неверным результатам. И я не могу выполнить битовую операцию над IP-адресами в виде массива байтов.
РЕДАКТИРОВАТЬ-1: Хорошо, цикл по каждому байту в массиве и выполнение побитовых операций И, НЕ и XOR (в каждой соответствующей ситуации) дает правильные результаты.
Следующая проблема, с которой я сталкиваюсь, заключается в том, что я не могу легко выполнить цикл for после преобразования массивов byte [] в UInt32 или long. Итак, первое значение работает правильно, но увеличение значения uint / long на единицу увеличивает IP-адрес с 192.168.127.0 до 193.168.127.0 - кажется, что после преобразования массива byte [] в uint / long порядок байты меняются местами. Так что нет простого способа перейти от IPStart к IPEnd.
У кого-нибудь есть предложения?