1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 101
1

Маска подсети по IP

14.03.2013, 20:00. Показов 5171. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Помогите пожалуйста. Есть проблемка. как сделать так, чтобы по заданному IP адресу и длине маски подсети вычислять маску подсети, номер подсети и широковещательный адрес для этой подсети? не могу понять что дальше делать. Есть часть кода и задание. Нужно например чтобы так было то есть вводишь длину маски и ай пи и он выводит маску подсети, номер подсети и широковещательный адрес.. и чтобы маска через слеш задавалась, точку и запятую.
Входные данные: 172.16.33.54/20
Результат:
Маска подсети: 255.255.240.0
Номер подсети: 172.16.32.0
Широковещательный адрес: 172.16.47.255

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void button1_Click(object sender, EventArgs e)
        {
            string ip = textBox1.Text;
            string[] split = ip.Split(new Char[] { '.', ',' , '/' }, 4);
            if (split.Length == 4)
            {
                foreach (string s in split)
                {
                    try
                    {
                        if (int.Parse(s) > 255 || int.Parse(s) < 0)
                        {
                            MessageBox.Show("Неправильно задан IP");
                            textBox1.Clear();
                            return;
                        }
                    }
 
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
           
             /*string mask = textBox1.Text;
           // string split2 = mask.Split(new String[] {"/"}, 1);o
 
            for (int i = 0; i < mask.Length; i++)
            {
                char aChar = mask.charAt(i);
            }*/
        }
Задание

Лабораторная работа N1

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

Пример:

Входные данные: 172.16.33.54/20
Результат:
Маска подсети: 255.255.240.0
Номер подсети: 172.16.32.0
Широковещательный адрес: 172.16.47.255
Для получения маски подсети необходимо создать 32-битное число у которого старшие биты установлены в 1, а младшие равны нулю. Количество битов равных единице равно длине маски подсети. В вышеуказанном примере маска подсети в двоичном виде:

11111111 11111111 11110000 00000000
Для получения такого числа можно использовать операцию сдвига. Создайте 32-битное число у которого все биты равны 1, а затем сдвиньте это число влево на число битов, которые должны быть равны нулю.
Для вычисления номера подсети нужно наложить на адрес маску подсети с помощью операции побитового И. Рассмотрим адрес из примера:

Адрес: 10101100 00010000 00100001 00110110
Маска: 11111111 11111111 11110000 00000000
-----------------------------------
Подсеть: 10101100 00010000 00100000 00000000
Для выполнения операции используйте операцию побитового И между двумя целыми переменными. В C это операция &, а в Delphi AND.
Наконец, для получения широковещательного адреса нужно установить в 1 все биты в номере хоста (это те биты, которые в маске подсети равны нулю). Инвертируйте маску и добавьте её к номеру подсети. Для выполнения операции используйте операцию побитового Или между двумя целыми переменными:

Подсеть: 10101100 00010000 00100000 00000000
НЕ маска: 00000000 00000000 00001111 11111111
-----------------------------------
10101100 00010000 00101111 11111111
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2013, 20:00
Ответы с готовыми решениями:

Маска и номер подсети по IP
Всем привет! Помогите пожалуйста. Есть проблемка. как сделать так, чтобы по заданному IP адресу и длине маски подсети вычислять маску...

Дана маска подсети определить максимальное число хостов в одной подсети при этих масках
Не знаю в каком разделе создавать пост. Просьба перекинуть в нужный если я не по адресу. a) 255.255.255.224 b) 255.255.128.0 c)...

Маска подсети
Доброго времени суток) Подскажите ) Как определить маску подсети для IP адреса 197.148.185.32/9.. Добавлено через 30 минут ...

4
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
15.03.2013, 07:17 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
        private bool validateIpMaskString(String stringValue)
        {
            string[] ipMaskParts = stringValue.Split('/');
            if (ipMaskParts.Length != 2)
                return false;
            int afterSlashInt;
            if (!int.TryParse(ipMaskParts[1], out afterSlashInt) && afterSlashInt < 0 && afterSlashInt > 32)
                return false;
            string[] ipParts = ipMaskParts[0].Split('.');
            if(ipParts.Length != 4)
                return false;
            foreach (String partString in ipParts)
            {
                int partInt;
                if (!int.TryParse(partString, out partInt) && partInt < 0 && partInt > 255)
                    return false;
            }
            return true;
        }
 
        private UInt32 ipFromStringToInt(String stringValue)
        {
            UInt32 intValue = 0;
            foreach (String stringPart in stringValue.Split('.'))
            {
                intValue <<= 8;
                intValue |= UInt32.Parse(stringPart);
            }
            return intValue;
        }
 
        private String ipFromIntToString(UInt32 intValue)
        {
            return ((intValue >> 24) & 255).ToString() + "." + ((intValue >> 16) & 255).ToString() + "." + ((intValue >> 8) & 255).ToString() + "." + (intValue & 255).ToString();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (validateIpMaskString(textBox1.Text))
            {
                UInt32 ipAddressInt = ipFromStringToInt(textBox1.Text.Split('/')[0]);
                UInt32 subnetMask = UInt32.MaxValue << (32 - int.Parse(textBox1.Text.Split('/')[1]));
                UInt32 subnetNumber = ipAddressInt & subnetMask;
                UInt32 broadcastAddress = subnetNumber | ~subnetMask;
                label1.Text = ipFromIntToString(subnetMask);
                label2.Text = ipFromIntToString(subnetNumber);
                label3.Text = ipFromIntToString(broadcastAddress);
            }
            else
                MessageBox.Show("Введена строка не верного формата");
        }
1
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 101
15.03.2013, 09:43  [ТС] 3
Спасибо! А не могли бы Вы оставить комментарии где что происходит?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
15.03.2013, 10:22 4
Спрашивайте, что вам не понятно - поясню. Вы, скорее всего, на программиста учитесь, и, судя по заданию, сейчас проиходит битовые операции, поэтому, думаю, что бОльшая часть кода вам должна быть понятна. Поэтому не вижу смысла писать комментарий возле каждой строки.
0
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 101
15.03.2013, 12:21  [ТС] 5
Мы изучаем сейчас протоколы и сети. Если можно, к каждой строчке лучше. Чтобы понятнее было. я примерно понимаю, что в первой части ставятся ограничения на цифры и разделители. Но хотелось бы подробнее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2013, 12:21
Помогаю со студенческими работами здесь

маска подсети
1. Напишите маску в двоичном и десятичном виде для разделения IP адреса по 4 компьютера в сети. 2. Распишите в двоичном виде и выберите...

маска подсети
132.45.96.0/19 есть такой Ip маска под сети, у него получается равна 255.255.224.0 верно я понимаю?

Маска подсети
Здравствуйте, правильно ли я думаю что допустим есть ip 192.168.0.3 и 192.168.0.4 и 192.168.0.5 У них маска подсети 255.255.255.0. ...

Маска подсети
Ответьте на вопросы, пожалуйста: 1. Как определить на сколько подсетей делится маска подсети? 2. У меня Мегафон интернет IP -...

Маска подсети
1. Напишите маску в двоичном и десятичном виде для разделения IP адреса по 15 компьютеров в сети. 2. Распишите в двоичном виде и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
Предсказание ветвлений - путь к высокопроизводи­тельному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
Позиционировани­е Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru