Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
 Аватар для АлексПрайм
29 / 26 / 6
Регистрация: 18.09.2014
Сообщений: 161
.NET 4.x

Работа с маской подсети

22.04.2019, 09:16. Показов 4839. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте. Народ, всем кому не сложно, кого не бесит и у кого есть время - помогите разобраться с масками, пожалуйста.

Я пытаюсь получить из ip-адреса и маски подсети диапазон IP-адресов. У меня есть код, который вроде и работает, но я тупо не знаю что дальше писать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// получаю имя хоста и свой ip
String host = Dns.GetHostName(); // Хост имя - Server
IPAddress ip = Dns.GetHostEntry(host).AddressList[3]; // 10.0.21.182(/27)
 
UInt32 a = Convert.ToUInt32(ip.Address); // перевожу свой ip в 32-битное число без знака
byte[] a1 = BitConverter.GetBytes(a); // просто проверяю (для отладчика)
 
UInt32 b = 0xe0ffffff; // создаю маску подсети - 27
byte[] b1 = BitConverter.GetBytes(b); // просто проверяю (для отладчика)
 
UInt32 c = a & b; // накладываю маску подсети на ip и получаю начальный сетевой адрес
byte[] с1 = BitConverter.GetBytes(c); // должно быть 10.0.21.160 - получил правильно
 
b = 0xffffffe0; // создаю обратную маску подсети
b1 = BitConverter.GetBytes(b); // просто проверяю (для отладчика)
 
c = a & b; // получаю конечный сетевой адрес
с1 = BitConverter.GetBytes(c); // должно быть 10.0.21.190 - не правильно
Я пытаюсь сделать по этому примеру: Как вычислить диапазон ip адресов по адресу и маске сети?
Что я делаю не так? Как мне получить конечный адрес хоста? Что в этом коде не правильно?

p.s.: я знаю, что подобные темы уже были и там есть некоторые наброски для решения, но этого не всегда достаточно.
Если вдруг видите просто наитупейшие ошибки в моём коде, помидорами пожалуйста не закидывайте. Я стараюсь сделать аккуратно и в меру своих возможностей.

Заранее, всем спасибо за помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.04.2019, 09:16
Ответы с готовыми решениями:

Могут ли быть одни подсети с разной маской?
Есть сеть А: IP – 10.14.33.2 Маска – 255.255.255.0 /24 Шлюз – 10.14.33.251 Адрес сети: 10.14.30.0 Сеть B: IP –...

Сколько хостов может существовать в ipv4 подсети с маской в 15 разрядов
Cколько хостов может существовать в ipv4 подсети с маской в 15 разрядов?

В терминологии сетей TCP/IP маской подсети называется 32-разрядное двоичное число
В терминологии сетей TCP/IP маской подсети называется 32-разрядное двоичное число, определяющее, какие именно разряды IP-адреса компьютера...

2
 Аватар для АлексПрайм
29 / 26 / 6
Регистрация: 18.09.2014
Сообщений: 161
22.04.2019, 09:19  [ТС]
То есть, на входе я имею - IP-адрес и маску подсети (10.0.21.182/27)
На выходе должна быть примерно такая табличка:
Миниатюры
Работа с маской подсети  
0
 Аватар для АлексПрайм
29 / 26 / 6
Регистрация: 18.09.2014
Сообщений: 161
22.04.2019, 11:28  [ТС]
Из этой таблицы я знаю: как определить адрес хоста, маску хоста, сеть хоста, начальный адрес диапазона.
Как мне получить самому те же значения, что из той таблицы: Wildcard, Hostmax, Hosts ?

Добавлено через 1 час 25 минут
Поправочка, понял как делать ))

Всё напрямую зависит от маски подсети (Netmask) и ее подстановочного символа (Wildcard).
1. Первым делом мы переводим полученный ip-адрес в HEX вид.
2. Потом накладываем Netmask на ip-адрес и получаем адрес сети - Network.
3. Потом мы преобразуем Netmask в Wildcard. Как это сделать, я пока не понял....
4. И уже после этого накладываем Wildcard на ip-адрес и получаем широковещательный адрес - Broadcast.

Осталось понять, как получить Wildcard...

p.s.: вспомнил работу с бинарными значениями и логическими операциями - https://upread.ru/art.php?id=475

Добавлено через 16 минут
Хэхэ, сам сделал.
Сделал через побитовое отрицание ))
Цитата Сообщение от АлексПрайм Посмотреть сообщение
Осталось понять, как получить Wildcard...
Добавлено через 9 минут
В общем, вот и все!
Реализовал решение к данной теме - Как вычислить диапазон ip адресов по адресу и маске сети?
Вот готовый код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String host = Dns.GetHostName(); // Имя моего хоста - Server
IPAddress ip = Dns.GetHostEntry(host).AddressList[3]; // ip-адрес мой - 10.0.21.182(/27)
UInt32 a = Convert.ToUInt32(ip.Address); // перевожу свой ip в 32-битное число без знака
 
UInt32 b = 0xe0ffffff; // создаю маску подсети с CIDR 27 (HEX)
// byte[] b1 = BitConverter.GetBytes(b); // просто проверяю (для отладчика)
 
UInt32 c = a & b; // накладываю маску подсети на ip и получаю сетевой адрес
byte[] с1 = BitConverter.GetBytes(c); // 10.0.21.160
с1[3]++; // получаем начальный диапазон 10.0.21.161
 
UInt32 b2 = ~b; // создаю обратную маску подсети через побитовое отрицание - 0.0.0.31
// byte[] b22 = BitConverter.GetBytes(b2); // просто проверяю (для отладчика)
 
c = a | b2; // получаю конечный сетевой адрес диапазон
с1 = BitConverter.GetBytes(c); // широковещательный адрес 10.0.21.191
с1[3]--; // получаем конечный сетевой адрес диапазон 10.0.21.191
p.s.: можете свои варианты накидать
Кстати, если это вам помогло - не забывайте ставить - "+1 Спасибо"

Тему считаю закрытой.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2019, 11:28
Помогаю со студенческими работами здесь

В терминологии сетей TCP/IP маской подсети называется 32-разрядное двоичное число
В терминологии сетей TCP/IP маской подсети называется 32-разрядное двоичное число, определяющее, какие именно разряды IP-адреса компьютера...

Работа с маской
имеется название файла cdr.201456.01.34 как написать маску,которая отбирала бы только файлы для которых предпоследние поле принимает...

EventRecord.Keywords работа с маской
Есть свойство EventRecord.KeywordsDisplayNames Property, про него написано: Returns an enumerable collection of strings that contain the...

Работа в подсети
Всем привет. Вопрос у меня такой: комп подключен к лок сети (10.28.16.*), основной шлюз 10.28.16.254, dns сервер 172.16.31.11, лок адрес...

Как разбить сеть на две подсети при помоши маски подсети
Добрый день. Я хочу в Cisco Packet Tracer разбить сеть класса(левая на ресунке) С на две подсети при помощи маски подсети. Я понимаю что...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru