- •Основы работы с Internet (комплексов протоколов tcp/ip)
- •Оглавление
- •Содержательная постановка задачи
- •Структура решения
- •Типы адресов: физический (mac-адрес), сетевой (ip-адрес), символьный (dns-имя)
- •Подсети
- •Сетевые протоколы
- •Служба dns
- •Межсетевой экран
- •Обзор и анализ методов решения
- •Просмотр текущих параметров
- •Структура университетской сети
- •Сбор информации о сети вручную
- •Сбор информации о сети при помощи самостоятельно написанной программы
- •Ввод и генерация диапазона адресов
- •Определение работоспособности узла и его доменного имени
- •Анализ информации о сети
- •Построение карты сети
- •Параметры настройки межсетевого экрана
- •Обзор межсетевых экранов
- •Настройка межсетевого экрана
- •Сбор информации о сети
- •Анализ сети
- •Руководство программиста
- •Интерфейс
- •Специфика применяемых методов
- •Руководство пользователя
- •Результат анализа сети
- •Параметры настройки межсетевого экрана
- •Загрузка и установка
- •Создание правила
Сбор информации о сети
Thread |
Класс, реализующий многопоточность |
Thread (Func<void, object>) |
Конструктор Thread. В качестве аргумента принимает функцию, которую необходимо выполнить в другом потоке. Функция не должна иметь возвращаемого значения и принимать один аргументobject. |
Thread.Start(object param) |
Запускает функцию в другом потоке и передает ей в качестве параметра свой аргумент. |
Task |
Класс, реализующий функционал асинхронных задач. |
Wait() |
Ожидание завершения асинхронной задачи |
Result |
Результат выполнения асинхронной задачи |
IpAdress |
Класс, в котором хранится информация об ip-адресе |
PingReply |
Представляет ответ команды Ping |
Status |
Возвращает статус ответа типа IPStatus |
IpStatus |
Перечисление возможных статусов ответа Ping |
Success |
Успешный пинг |
Ping |
|
SendPingAsync (IpAdress ip, int timeout) |
Отправка асинхронного пинга. Аргументами являются адрес и таймаут. Возвращает Task<PingReply>. В случае неверного адреса кидаетPingException |
Dns |
Предоставляет методы, связанные с Dns-сервером |
GetHostEntry(IpAdress addr).HostName |
Возвращает символьное имя сайта. В случае неудачи кидает SocketException |
CountDownEvent |
Инструмент синхронизации. Представляет собой обратный счетчик. |
CountDownEvent (int count) |
Конструктор счетчика от количества элементов |
Wait() |
Ожидает завершения счетчика |
Signal() |
Уменьшает значение счетчика на 1 |
DataTable |
Представляет собой таблицу |
Rows.Add |
Добавление новой строки |
Укрупненный алгоритм сбора информации о сети
Для каждого i-го адреса из диапазона адресовip_range(цикл по всем адресам):
for (int i = 0; i < N; i++)
Запросить статус работоспобности узла:
Создать объект класса Ping.
Ping pingSender = new Ping();
Прикрепить Callback метод - PingCompletedCallback к объекту Ping
pingSender.PingCompleted += PingCompletedCallback;
Отправить асинхронный запрос работоспобности узла, указав в качестве параметров:
- ip_range[i] – текущий IP-адрес
- i – индекс текущего IP-адреса
pingSender.SendAsync(ip_range[i], i);
В Callback методе PingCompletedCallback(object sender, PingCompletedEventArgs e)
Извлечь информацию – узнать индекс адреса, для которого пришел ответ и соответствующий статус
int index = (int) ((object)e.UserState);
string status = e.UserState.Status;
Сохранить статус работоспобности в список по найденному индексу
ping[index] = status;
Для каждого i-го адреса из диапазона адресовip_range(цикл по всем адресам):
for (int i = 0; i < N; i++)
Определить доменное имя узла:
Создать новый поток Thread, указав в качестве параметра делегатgetName, у которого в свою очередь параметры:
-ip_range[i] – текущий IP-адрес
-i– индекс текущегоIP-адреса
и затем запустить его, вызвав метод Start:
new Thread( () => GetName(ip_range[i], i) ).Start();
В методе делегате GetName(uint ip, int index)
Выполнить запрос на разрешение IP-адреса в доменное
IPHostEntry host = Dns.GetHostEntry(ip);
Попытаться сохранить информацию в список Dnsимен по соответствующему индексу
dns[index] =host.HostName;
в случае ошибки присвоить название “Хост неизвестен”
dns[index] = “Хост неизвестен”;