Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Программная реализация лабораторного стендаФункционал лабораторного стенда разделен условно на 2 независимых модуля. Первый модуль осуществляет захват сетевого трафика с последующим формированием массива данных, удобного для анализа на предмет вторжения. Второй модуль отвечает за непосредственное обнаружение самого факта вторжения или каких-либо аномалий. В первый модуль входят следующие функции: - void Initialize_setting(); - void Number_of_Interface_for_Sniffer(); - string IP_PK(); - string Sniffer(int index_id, string ipv4_str); - Packet_Info[] Parser(string name_file). Функция void Initialize_setting() отвечает за настройку параметров лабораторного стенда по умолчанию. Функция void Number_of_Interface_for_Sniffer() является функцией определения доступных сетевых интерфейсов на персональном компьютере. Number_of_Interface_for_Sniffer()запускает анализатор трафика, расположение которого указано в области «Настройка программы» в поле «Путь к WinDump». Результатом работы данной функции является выпадающий список (checkbox) «Сетевой интерфейс» (см. Рисунок) Рисунок 19. Результат работы функции определения сетевого интерфейса Функция string IP_PK() получает IP-адрес компьютера, на котором запущен лабораторный стенд. Определение адреса происходит через параметр командной строки ipconfig. private string IP_PK() { ProcessStartInfo cmd = new ProcessStartInfo(@"cmd.exe");
/// процесс cmd.exe с параметром "ipconfig" cmd.Arguments = @"/C ipconfig";
/// скрываем окно запущенного процесса cmd.StandardOutputEncoding = Encoding.GetEncoding(866); cmd.WindowStyle = ProcessWindowStyle.Hidden; cmd.RedirectStandardOutput = true; cmd.UseShellExecute = false; cmd.CreateNoWindow = true;
/// запускаем процесс Process proc_ipconfig = Process.Start(cmd);
/// считываем переменную StreamReader srIncoming = proc_ipconfig.StandardOutput; string ipconfig = srIncoming.ReadToEnd();
/// закрываем процесс proc_ipconfig.Close();
///ищем IPv4 в строке ipconfig … /// return ip; } Функция string Sniffer(int index_id, string ipv4_str) запускает анализатор трафика в режиме прослушивания сетевого трафика на сетевом интерфейсе с номером index_id для компьютера с IP-адресом ipv4_str. Номер сетевого интерфейса определяет пользователь, выбрав одну из записей выпадающего списка «Сетевой интерфейс». Параметр ipv4_str является результатом запуска предыдущей функции string IP_PK(). WinDump запускается с параметрами, описанными в пункте «Описание входных данных» данного раздела. По окончанию своей работы функция возвращает строковую переменную, которая содержит путь к файлу с данными о трафике. Функция Packet_Info[] Parser(string name_file) в качестве входного параметра принимает данный путь. Перед тем, как начать сбор трафика, функция Sniffer запускает параллельный поток void thread_time(), который следит за временем захвата пакетов. В исполняемом коде программы прописано, что превышение времени захвата трафика в 120 секунд влечет за собой автоматическое завершение данной функции. Интервал в две минуты выбран из расчета, что лабораторный стенд является средством для помощи в обучении студентов. Он может быть изменен при необходимости в исходном коде программы. private string Sniffer(int index_id, string ipv4_str) { int kolvo_packets = Convert.ToInt32(KolichestvoPacketov.Text); string name_file = Application.StartupPath.ToString() + "\\log_.txt";
/// Сниффер ProcessStartInfo cmd_1 = new ProcessStartInfo(@"cmd.exe"); cmd_1.Arguments = "/c " + textBox_windump.Text + " -i" + index_id + " -s 0 -c " + kolvo_packets + " -vv -n ip host " + ipv4_str + " > " + name_file;
/// скрываем окно запущенного процесса cmd_1.StandardOutputEncoding = Encoding.GetEncoding(866); cmd_1.WindowStyle = ProcessWindowStyle.Hidden; cmd_1.RedirectStandardOutput = true; cmd_1.UseShellExecute = false; cmd_1.CreateNoWindow = true;
/// параллельный поток считает время Thread my_thread = new Thread(thread_time); my_thread.Priority = ThreadPriority.AboveNormal; my_thread.Start(); Process proccess_1 = Process.Start(cmd_1); proccess_1.WaitForExit(); if (exit_cmd == 0) exit_cmd = 1;
richTextBox_data.Text += "Захват пакетов окончен \n"; richTextBox_data.Text += String.Empty.PadLeft(30, '=') + "\n";
if (exit_cmd == 1) return name_file; else return ""; }
Packet_Info[] Parser(string name_file) – функция преобразования данных сетевого трафика из файла в массив данных Packet_Info[]. Класс Packet_Info является пользовательским типом данных. Поля данного класса представляют собой поля заголовков IP и TCP пакетов. В Таблице приведен пример для записи входного файла 11:11:50.236378 IP (tos 0x0, ttl 128, id 9821, offset 0, flags [DF], proto: TCP (6), length: 41) 192.168.1.5.3546 > 173.194.122.193.443:., cksum 0xaf6c (correct), 274325955:274325956(1) ack 3778425421 win 256 Таблица 2 - Данные класса Packet_Info
Функция Parser является завершающей в первом модуле программы. Второй модуль представляет собой совокупность сигнатур, вызываемых по очереди или обособленно друг от друга (в зависимости от цели пользователя). Сигнатуры, представленные в лабораторном стенде: - void TCP_scan(Packet_Info[] packets, string ipv4_str); - void Port_dos(Packet_Info[] packets, string ipv4_str, int number_port); - void ICMP_flood(Packet_Info[] packets, string ipv4_str); - void SMURF_attack(Packet_Info[] packets, string ipv4_str); - void Land_attack(Packet_Info[] packets, string ipv4_str); - void Bad_packet_TCP(Packet_Info[] packets, string ipv4_str). Подробный алгоритм функционирования правил распознавания вторжений представлен в пункте «Сигнатуры атак». Входными данными для всех функций являются IP-адрес компьютера-жертвы и массив данных с характеристиками сетевых пакетов. void Port_dos() также принимает дополнительный параметр – номер порта, который задается в исходном коде программы. Тестирование
|