Разработка межсетевого экрана для компьютеров пользователей с использованием технологии WFP

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

nbsp;

На панели присутствуют кнопки Add и Delete для выбора необходимого действия, Choose necessary program для выбора необходимого приложения, Back для возврата в начальную панель, Apply для применения необходимого действия. На рисунке 13 изображена ошибка, которая возникает, если нажать на кнопку Apply до выбора приложения:

 

Рисунок 13. Ошибка, если не выбрана программа.

 

Применение изменений.

Для перезапуска приложения ConsoleFilter нужно нажать на кнопку Reboot Filter. При успешном выполнении операции будет показано сообщение, как на рисунке 14:

Рисунок 14. Сообщение о перезапуске фильтра.

 

Закрытие программы.

При закрытии программы, если вы забыли нажать после некоторых изменений кнопку Reboot Filter, вам будет показано сообщение с вопросом, которое изображено на рисунке 15, хотите ли вы перезапустить фильтры сейчас или же они будут перезапущены при следующем запуске программы или перезагрузке компьютера.

 

Рисунок 15.Сообщение с запросом о перезапуске фильтра.

 

Если нажать кнопку "Да", то фильтры будут перезапущены, если "Нет", то фильтры перезапустятся при следующем запуске программы.

Фильтры обнулятся после перезагрузки компьютера.

 

 

Практическая часть

 

Для практической реализации использовалась среда VisualStudio 2012 ReleaseCandidate с предустановленным пакетом WindowsDriverKit 8.0.

Работа с WFP происходит в консольном приложении, написанном на языке C++ (исходный код представлен в приложении). Графическая оболочка написана в той же среде программирования, но на языке C#(исходный код представлен в приложении).

Все условия добавляются и хранятся в файле BlockList.

 

Заключение

сетевой трафик блокировка фильтр

В ходе работы над практическим заданием мы изучили и разобрались с относительно новым продуктом от Microsoft для работы с сетевым трафиком - Windows Filtering Platform. Мы разработали работоспособную программу для блокирования трафика по IP-адресу либо по порту соединения на языке C++, а так же графическую оболочку для более удобной работы с нашей программой. При написании графическом оболочки были повторены и углублены знания языка C#. Так же мы познакомились с новой версией одной из самых популярных сред программирования - Visual Studio 2012 RC с обновленным пакетом для разработчиков Windows Driver Kit 8.0.

 

 

Список используемых источников

 

1.Windows Filtering Platform. Введение и преимущества WFP.

)">()

2.WFPFunctions. Описание и пояснение в использовании методов WFP.

)">()

3.WFPErrorCodes. Специфические ошибки WFP с кодом и описанием.

">(

4.Windows Filtering Platform в защите и нападении. Статья с журнала Хакер.

)">()

 

 

Приложение

 

Исходный код консольного приложения

#include "stdafx.h"

#include

#include

#include

#include

#include "winreg.h"

#define bufSize 100

#pragma comment(lib, "fwpuclnt.lib")

#pragma regionПрототипыAddAllFilters(GUID subLayerGUID, HANDLE engineHandle);AddFilter(GUID subLayerGUID, HANDLE engineHandle, UINT32 cond, char * str);AddFilter(GUID subLayerGUID, HANDLE engineHandle, GUID guid);DelFilter(HANDLE engineHandle);DelFilter(HANDLE engineHandle, GUID ID);DelSubLayer(HANDLE engineHandle, GUID _idSubLayer);CloseSeans(HANDLE engineHandle);AutoStart();

#pragma endregion_tmain(int argc, char* argv[])

{result;//Результат произведенной операции. В случае успеха Error_SuccessengineHandle = NULL;//Основной двигатель процесса

#pragma regionОткрытие сеанса= FwpmEngineOpen0(,_C_AUTHN_WINNT,,,

&engineHandle);(result != ERROR_SUCCESS)

{("Engine Open failed with error: %d\n",result);("pause");;

}("Engine Opened successfully!\n");

#pragma endregion

#pragma regionДобавление подуровня

//GUID {6AE8A860-A30E-4253-80A1-C1807E17AAFC}subLayerGUID = { 0x6ae8a860, 0xa30e, 0x4253, { 0x80, 0xa1, 0xc1, 0x80, 0x7e, 0x17, 0xaa, 0xfc } };

FWPM_SUBLAYER0 *mySubLayer={0};//Подуровень, в который будем прописывать наши фильтры

//Проверка на существование подуровня с данным GUID

result = FwpmSubLayerGetByKey0(engineHandle,&subLayerGUID,&mySubLayer);(result!=ERROR_SUCCESS)

subLayerKey=subLayerGUID;>flags=FWPM_SUBLAYER_FLAG_PERSISTENT;>weight=0x01;>displayData.description=L"Sublayer";>displayData.name=L"Sublayer";=FwpmSubLayerAdd0(engineHandle,mySubLayer,NULL);(result!=ERROR_SUCCESS)">{=new FWPM_SUBLAYER0();>subLayerKey = subLayerGUID;>flags = FWPM_SUBLAYER_FLAG_PERSISTENT;>weight=0x01;>displayData.description=L"Sublayer";>displayData.name=L"Sublayer";= FwpmSubLayerAdd0(engineHandle,mySubLayer,NULL);(result != ERROR_SUCCESS)

{("SubLayer Added failed with error: %d\n",result);(engineHandle);;

}("SubLayer Added successfully!\n");

}("SubLayer is already exist.\n");

#pragma endregion

#pragma region Добавление фильтров

if(!(argc>1))//Консоль открывается из автозапуска

{

//Добавляем новые основные фильтры(subLayerGUID,engineHandle);

printf("Filters added successfully!\n");

}//Консоль открывается из GUI-оболочки

{();

//GUID {1C046A9A-9187-4629-8184-24836DFE5EEB}allFilterGUID = { 0x1c046a9a, 0x9187, 0x4629, { 0x81, 0x84, 0x24, 0x83, 0x6d, 0xfe, 0x5e, 0xeb } };

//Добавляем вспомогательный фильтр(subLayerGUID, engineHandle,allFilterGUID);

//Удаляем основные фильтры(engineHandle);

//Добавляем новые основные фильтры(subLayerGUID,engineHandle);("Filters added successfully!\n");

//Удаляем вспомогательный фильтр(engineHandle,allFilterGUID);

}

#pragma endregion(engineHandle);;

}

//Добавление массива фильтровAddAllFilters(GUID subLayerGUID, HANDLE engineHandle)

{result = NULL;

#pragma region Подсчет каждого вида условий*buf = new char[bufSize];//Буфер для хранения считанной строкиipCount=0,//Количество условий по IP=0,//Количество условий по порту=0;//Количество условий по приложениям

//Считываем из БД*f = fopen("C:\\Program Files\\Filter\\BlockList.iff","r");(!f)

{("File \"BlockList.iff\" dosent exist!\n");

return;

}

//Считываем первую строку - блокировать весь трафик или нет

fgets(buf,bufSize,f);[strlen(buf)-1]=\0;*filterFile = fopen("C:\\Program Files\\Filter\\FilterList.iff","w");(!filterFile)

{("File \"FilterList.iff\" dosent create!\n");;