Определите маску подсети IPv4 в C # - PullRequest
2 голосов
/ 30 марта 2012

Поскольку мне нужно настроить довольно много компьютеров с Windows Server, я решил написать небольшую программу на C #, чтобы упростить некоторые из этих задач. Последнее, что я должен добавить, - это возможность ввести диапазон IP-адресов (например, 74.117.238.112/28) и автоматически добавить их все в качестве статических IP-адресов в сетевую карту.

В прошлом я всегда использовал для этого веб-калькуляторы, однако я пытаюсь понять, как это сделать программно в C #. Я нашел эту статью ЗДЕСЬ , которая имеет много смысла (чему-то научилась), но немного сбивает с толку. Калькуляторы, которые я использовал в прошлом, предоставили мне маски подсетей, такие как 255.255.255.240 или .248, где, как кажется, это возвращает только одно из четырех значений.

Правильно ли приведен этот пример кода, или его нужно будет изменить, чтобы он действительно мог использоваться?

1 Ответ

5 голосов
/ 30 марта 2012

ссылка, которую вы упомянули, дает вам стандартные маски подсетей для разных классов IP.Это не совсем подсеть.

Если я вас правильно понимаю, вам нужна только маска подсети, которая зависит только от подсети (/ 28 в вашем примере), а не от IP-адреса.

Я написал эту маленькую функцию ::

    public static string GetSubnetMask(byte subnet)
    {
        long mask = (0xffffffffL << (32-subnet)) & 0xffffffffL;
        mask=IPAddress.HostToNetworkOrder((int)mask);
        return new IPAddress((UInt32)mask).ToString();
    }

Если вы вызовете ее с подсетью (например, 28), она вернет подсеть как строку (255.255.255.240).

Скажите мнеесли это то, что вам нужно или есть что-то еще.

...