Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Верхотуров ПЗ 1.docx
Скачиваний:
67
Добавлен:
25.04.2017
Размер:
1.42 Mб
Скачать
        1. Анализ сети

Для начала введем функции:

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):

  1. Обнулить маску

mask = 0;

  1. Для каждого i-го бита от 31-го по 0-й

for (int i=31; i>= 0; --i)

    1. Сравнить i-е биты low и high

if (((high >> i) & 1) == ((low >> i) & 1))

      1. Если совпадают, увеличить маску на 2i

mask = mask + pow(2,i);

      1. Иначе, выход из цикла

elsebreak;

  1. Вернуть маску

return mask;

Функция GetAddress(uint ip, uint mask):

  1. Применить поразрядную конъюнкцию к ipи mask

address=ip&mask;

  1. Вернуть результат

return address;

Функция GetBroadcast(uint ip, uint mask):

  1. Применить поразрядную дизъюнкцию к ipи результату применения отрицания кmask

broadcast = ip | ~mask;

  1. Вернуть результат

return broadcast;

Функция GetGateway(uint address):

  1. Прибавить единицу к адресу сети

gateway = address + 1;

  1. Вернуть результат

return gateway;

      1. Руководство программиста

        1. Интерфейс

Рисунок 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- таблица

        1. Специфика применяемых методов

Рисунок 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 приложение закрывается.