![](/user_photo/_userpic.png)
- •Основы работы с Internet (комплексов протоколов tcp/ip)
- •Оглавление
- •Содержательная постановка задачи
- •Структура решения
- •Типы адресов: физический (mac-адрес), сетевой (ip-адрес), символьный (dns-имя)
- •Подсети
- •Сетевые протоколы
- •Служба dns
- •Межсетевой экран
- •Обзор и анализ методов решения
- •Просмотр текущих параметров
- •Структура университетской сети
- •Сбор информации о сети вручную
- •Сбор информации о сети при помощи самостоятельно написанной программы
- •Ввод и генерация диапазона адресов
- •Определение работоспособности узла и его доменного имени
- •Анализ информации о сети
- •Построение карты сети
- •Параметры настройки межсетевого экрана
- •Обзор межсетевых экранов
- •Настройка межсетевого экрана
- •Сбор информации о сети
- •Анализ сети
- •Руководство программиста
- •Интерфейс
- •Специфика применяемых методов
- •Руководство пользователя
- •Результат анализа сети
- •Параметры настройки межсетевого экрана
- •Загрузка и установка
- •Создание правила
Анализ сети
Для начала введем функции:
uint GetMask(uint low, uint high) - получение маски сети,
-low– начальный адрес сети
-high– конечный адрес сети
uintGetAddress(uintip,uintmask) - получение адреса сети,
uintGetBroadcast(uintip,uintmask) - получение широковещательного адреса сети,
-ip- начальный адрес сети
-mask– маска сети
uint GetGateway(uint address) – получение шлюза сети,
-address – адрес сети.
Функция GetMask(uint low, uint high):
Обнулить маску
mask = 0;
Для каждого i-го бита от 31-го по 0-й
for (int i=31; i>= 0; --i)
Сравнить i-е биты low и high
if (((high >> i) & 1) == ((low >> i) & 1))
Если совпадают, увеличить маску на 2i
mask = mask + pow(2,i);
Иначе, выход из цикла
elsebreak;
Вернуть маску
return mask;
Функция GetAddress(uint ip, uint mask):
Применить поразрядную конъюнкцию к ipи mask
address=ip&mask;
Вернуть результат
return address;
Функция GetBroadcast(uint ip, uint mask):
Применить поразрядную дизъюнкцию к ipи результату применения отрицания кmask
broadcast = ip | ~mask;
Вернуть результат
return broadcast;
Функция GetGateway(uint address):
Прибавить единицу к адресу сети
gateway = address + 1;
Вернуть результат
return gateway;
Руководство программиста
Интерфейс
Рисунок 16. Главное окно программы (пока без подписей)
Использующиеся пространства имен:
System - содержит фундаментальные и базовые классы.
System.Windows.Forms - содержит классы для создания приложений Windows, которые позволяют наиболее эффективно использовать расширенные возможности пользовательского интерфейса.
System.Net - содержит классы, обеспечивающие простой интерфейс программирования для различных сетевых протоколов.
System.Threading - содержит классы и интерфейсы, которые дают возможность программировать в многопоточном режиме.
Компоненты пользовательского интерфейса
Объект |
Комментарий |
Тип |
Nud11, nud12, nud13, nud14 |
Регуляторы для ввода начального IP-адреса диапазона |
NumericUpDown– регулятор, отображающий числовые значения |
Nud21, nud22,.nud23, nud24 |
Регуляторы для ввода последнего IP-адреса диапазона | |
btnScan |
Кнопка начала сканирования |
Button- кнопка |
btnExit |
Кнопка выхода из приложения | |
btnAnal |
Кнопка анализа подсети | |
tbNetwork |
Текстовое поле для адреса сети |
TextBox– текстовое поле |
tbMask |
Текстовое поле для маски сети | |
tbBroadcast |
Текстовое поле для широковещательного адреса | |
tbGateway |
Текстовое поле для шлюза | |
progressBar |
Индикатор выполнения сканирования |
ProgressBar- индикатора выполнения |
dgvIpTable |
Таблица с результатами сканирования сети |
DataGridView- таблица |
Специфика применяемых методов
Рисунок 17. Функциональная схема
При нажатии кнопки btnScan вызывается её метод обработчик btnScan_Click, который берет информацию с компонент ввода диапазона адресов nud11-nud24 и передает их в функцию Scan. В функции Scan начальный и конечный адреса диапазона передаются в методы SendPings и SendDns. Первый метод – асинхронно пингует все адреса из диапазона, второй – для каждого адреса из диапазона запрашивает в новом потоке Dns имя. При этом в методе SendPings перед вызовом асинхронных функций привязывается callback метод PingCompletedCallback, в котором извлекается информация об адресе, для которого пришел ответ и его статусе, после чего информация записывается в таблицу scanning_table и увеличивается значение прогресса scanning_progress. В методе SendDns для каждого адреса из диапазона создается новый поток, которому в качестве параметра указывается функция GetDns. GetDns в свою очередь пытается получить Dns имя соответствующего адреса, после чего записывает результат в таблицу scanning_table, в случае ошибки в таблицу записывается значение «Хост неизвестен», и увеличивается значение прогресса progressBar.
При нажатии кнопки btnAnal вызывается её обработчик btnScan_Click, которые берет информацию о выделенных адресах из таблицы dgvIpTable: начальный и конечный адрес подсети. Затем, передает их в функцию GetMask, которая вычисляет и возвращает маску подсети. Далее передает начальный адрес и найденную в функции GetNetworkAddress и GetBroadcast, первая вычисляет адрес подсети, вторая – широковещательный адрес. Далее передает найденный адрес подсети в функцию GetGateway, которая вычисляет шлюз подсети. Затем все результаты записываются в соответствующие компоненты: в tbMask – маска подсети, tbNetwork – адрес подсети, tbBroadcast – широковещательный адрес, tbGateway – шлюз подсети.
При нажатии кнопки btnExit приложение закрывается.