Задачу доступности узла можно решить двумя методами: с помощью асинхронной и синхронной отправки запроса проверки связи.
Асинхронная отправка запроса проверки связи не блокирует приложение, осуществляя отправку вне основного потока программы.
После синхронной отправки запроса проверки связи приложение блокируется пока не будет получен результат доступности узла, либо если в течение некоторого времени не будет ответа от узла, то будет получен соответствующий результат о недоступности узла. Т.к. приложение блокируется при синхронной отправке запроса проверки связи, то лучше отправлять несколько запросов в параллельных потоках, либо использовать асинхронную отправку.
Отправка запроса в новом потоке выполняться «параллельно» с другими потоками, то есть без предписанного порядка во времени. Потоки позволяют выполнять параллельную обработку, за счет чего появляется возможность одновременного выполнения нескольких операций.
Мы будем использовать параллельную синхронную отправку запросов для определения доменного имени и проверки работоспособности узла.
Укрупненный алгоритм
Для каждого узла из диапазона:
1. Создать поток с делегатом, который указывает на метод пингованияip из класса Ping.
2. Создать поток с делегатом, который указывает на метод получения доменного имени dns из класса DNS
3. Запустить оба потока одновременно, сохранив результаты их работы в переменные строкового типа.
5.3.3. Анализ сети. Определение следующих параметров: адрес сети, широковещательный адрес, шлюз
Укрупненный алгоритм
1) Определить адрес сети.
a) Представить переменные Mask и StartIP в двоичном виде.
b) Произвести поразрядную конъюнкцию Mask и StartIP
c) Записать результат конъюнкции в переменную NetWorkAddress.
2) Определить широковещательный адрес сети.
a) Представить переменные Mask и NetWorkAddress в двоичном виде.
b) Произвести инверсию переменной Mask.
c) Произвести поразрядную дизъюнкцию Mask и NetWorkAddress.
d) Записать результат в переменную Broadcast
3) Определить адрес шлюза
a) Прибавить единицу к последнему октету NetworkAddress
b) Записать результат в переменную GateWay
Руководство программиста
Программа написана на языке C# с использованием FrameWork.Net версии 4.5. в среде VisualStudio 2015. Такой выбор был сделан в виду наличия удобного инструментария для работы с потоками, а также встроенных средств для проверки работоспособности узлов сети и получения доменного имени.
Интерфейс
Интерфейс программы имеет следующий вид:
Рисунок 7. Интерфейс программы.
Для ввода данных о диапазоне сканируемых IP-адресов, а также маски сети используются элементыTextBox, максимальные значения которых равны 255. Для вывода информации используются элементы DataGridView (результаты сканирования сети, а также данные об адресе сети, широковещательном адресе, шлюзе). Текущее состояние операции сканирования отображается при помощи элемента ProgressBar. Запуск сканирования и выход из программы осуществляются при помощи элементов типа Button.