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

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

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

a>

}filterID=NULL;("Blocked all traffik: %s.\n",buf);

if(!strcmp(buf,"true"))//Если нужно заблокировать весь трафик

{= AddFilter(subLayerGUID,engineHandle,0,"All");(filterID!=-1)(filterFile,"%d\n",filterID);(filterFile);(f);;

}

//Считываем пустую строку(buf,bufSize,f);n=1;//Счетчик пустых строк

//Считывание количества каждого вида условий

while(!feof(f))

{(buf,bufSize,f);

//Если последняя строка, то выходим из цикла

if(feof(f));[strlen(buf)-1]=\0;(buf[0]==\0)

{++;;

}(n)

{1: ipCount++; break;2: portCount++; break;3: appCount++; break;: break;

}

}("\nIP %d\nPort %d\nApplications %d\n\n",ipCount,portCount,appCount);(ipCount+portCount+appCount==0)

{("There is no conditions.\n");;

}

#pragma endregion

#pragma region Создание фильтров

fseek(f,0,SEEK_SET);(buf,bufSize,f);//Пропускаем строку, содержащую значение флага, показывающего блокировать всё или нет(buf,bufSize,f);//Пропускаем первую пустую строкуi;//счетчик цикловbuffer=0;//буфер для считывания

//Блокировка по IP(i=0; i < ipCount; i++)

{(f,"%d",&buffer);//cчитываем i-ый адрес= AddFilter(subLayerGUID,engineHandle,buffer,"IP");(filterID!=-1)(filterFile,"%d\n",filterID);

}(buf,bufSize,f);//Считываем пустую строку

//Блокировка по порту(i=0; i < portCount; i++)

{(f,"%d",&buffer);//cчитываем i-ый порт БД= AddFilter(subLayerGUID,engineHandle,buffer,"Port");(filterID!=-1)(filterFile,"%d\n",filterID);

}(buf,bufSize,f);//Считываем пустую строку

//Блокировка по приложениям(i=0; i < appCount; i++)

{(buf,bufSize,f);//cчитываем i-ое приложение БД

buf[strlen(buf)-1]=\0;= AddFilter(subLayerGUID,engineHandle,0,buf);(filterID!=-1)(filterFile,"%d\n",filterID);

}(filterFile);(f);

#pragma endregion

}

//Добавление фильтра на подуровеньAddFilter(GUID subLayerGUID, HANDLE engineHandle, UINT32 cond, char * str)

{result = NULL;

#pragma region Создание фильтра_FILTER0_ myFilter={0};id=NULL;(&myFilter,sizeof(myFilter));_FILTER_CONDITION0 condition;.action.type= FWP_ACTION_BLOCK;.subLayerKey = subLayerGUID;.weight.type = FWP_EMPTY;.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V4;.displayData.description=L"Filter";.displayData.name=L"Filter";(str=="All")

{.numFilterConditions = 0;("Added all blocked filter.\n");

}

{.numFilterConditions = 1;.filterCondition = &condition;

if(str=="IP")

{_V4_ADDR_AND_MASK addr;//адрес, который нужно добавить в фильтр

addr.addr=cond;.mask=0xffffffff;("Added IP: %d\n",addr.addr);.fieldKey = FWPM_CONDITION_IP_REMOTE_ADDRESS;.matchType=FWP_MATCH_EQUAL;.conditionValue.type=FWP_V4_ADDR_MASK;.conditionValue.v4AddrMask = &addr;

}

{

if(str=="Port")

{port = cond;//порт, который нужно добавить в фильтр

printf("Added port: %d\n",port);.fieldKey = FWPM_CONDITION_IP_REMOTE_PORT;.matchType=FWP_MATCH_EQUAL;.conditionValue.type=FWP_UINT16;.conditionValue.uint16=port;

}

{_t *app = new wchar_t[bufSize];

swprintf(app,L"%S",str);//приложение, которое нужно добавить в фильтр

FWP_BYTE_BLOB *applicationID = NULL;= FwpmGetAppIdFromFileName0(app,&applicationID);(result != ERROR_SUCCESS)

{("Add application \"%s\" failed with error: %d.\n\n",str,result);-1;

}("Added application: %s\n",str);.fieldKey = FWPM_CONDITION_ALE_APP_ID;.matchType=FWP_MATCH_EQUAL;.conditionValue.type=FWP_BYTE_BLOB_TYPE;.conditionValue.byteBlob=applicationID;

}

}

}

#pragma endregion

#pragma region Добавление фильтра= FwpmFilterAdd0(engineHandle,&myFilter,NULL,&id);(result != ERROR_SUCCESS)

{("Filter Added failed with error: %d\n\n",result);-1;

}

#pragma endregionid;

}

//Добавление вспомогательного фильтра на подуровеньAddFilter(GUID subLayerGUID, HANDLE engineHandle, GUID guid)

{result = NULL;

#pragma region Создание фильтра_FILTER0_ myFilter={0};(&myFilter,sizeof(myFilter));.action.type= FWP_ACTION_BLOCK;.subLayerKey = subLayerGUID;.weight.type = FWP_EMPTY;.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V4;.displayData.description = L"Secondary filter";.displayData.name = L"Secondary filter";.filterKey = guid;.numFilterConditions = 0;

#pragma endregion

#pragma region Добавление фильтра= FwpmFilterAdd0(engineHandle,&myFilter,NULL,NULL);(result != ERROR_SUCCESS)("Secondary filter added failed with error: %d\n\n",result);("Secondary filter added successfully!\n");

#pragma endregion

}

//Удаление фильтров по сохраненным IDDelFilter(HANDLE engineHandle)

{

#pragma region Удаление фильтров по сохраненным ID

FILE *filterFile = fopen("C:\\Program Files\\Filter\\FilterList.iff","r");(!filterFile)

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

}id = NULL;result = NULL;(!feof(filterFile))

{(filterFile,"%d",&id);//cчитываем i-ый адрес

//Если последняя строка, то выходим из цикла

if(feof(filterFile));(id==0);= FwpmFilterDeleteById0(engineHandle,id);(result!=ERROR_SUCCESS)("Filter (ID=%d) close failed with error: %s\n",id,result);

}(filterFile);("Filters closed successfully!\n");

#pragma endregion

}

//Удаление фильтра по GUID

void DelFilter(HANDLE engineHandle, GUID ID)

{

#pragma region Удаление фильтра по GUID

DWORD result = FwpmFilterDeleteByKey0(engineHandle,&ID);(result != ERROR_SUCCESS)

{(result == FWP_E_FILTER_NOT_FOUND)("Secondary filter doesnt exist.\n");("Secondary filter closed failed with error: %d\n",result);;

}("Secondary filter closed successfully!\n");

#pragma endregion

}

//Удаление подуровняDelSubLayer(HANDLE engineHandle, GUID _idSubLayer)

{

#pragma region Удаление подуровняresult = FwpmSubLayerDeleteByKey0(engineHandle,&_idSubLayer);(result != ERROR_SUCCESS)("SubLayer closed failed with error: %d\n",result);("SubLayer closed successfully!\n");

#pragma endregion

}

//Закрытие сеансаCloseSeans(HANDLE engineHandle)

{

#pragma region Закрытие сеансаresult = FwpmEngineClose0(engineHandle);(result != ERROR_SUCCESS)("Engine close failed with error: %d\n",result);("Engine closed successfully!\n");("pause");

#pragma endregion

}

//Запись в автозапускAutoStart()

{

#pragma region Запись в автозапускresult=NULL;hKey = NULL;= RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",,,_OPTION_VOLATILE,_ALL_ACCESS,,

&hKey,);(result!=ERROR_SUCCESS)("Open failed with error: %d\n",result);

{* buf = new byte[100];= (LPBYTE)L"\"C:\\Program Files\\Filter\\ConsoleFilter.exe\"";= RegSetValueEx(hKey,"ConsoleFilter.exe",,_SZ,,

);(result!=ERROR_SUCCESS)("Add failed with error: %d\n",result);= RegCloseKey(hKey);(result!=ERROR_SUCCESS)("Close failed with error: %d\n",result);

}

#pragma endregion

}

Исходный код графической оболочки

using System;

using ADOX;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;using System.Text;System.Windows.Forms;System.IO;PracticGUI

{partial class Form1 : Form

{Form1()

{();

}void Form1_Load(object sender, EventArgs e)

{.Enabled = false;path = FileAdress;

if (!File.Exists(path))// Проверка на существования файла со списком фильтров

{

// Если файла нет, то создаем файл с пустым списком фильтров

try

{(StreamWriter sw = File.CreateText(path))

{.WriteLine("false");.WriteLine("");.WriteLine("");.WriteLine("");

}.Diagnostics.Process proc = new System.Diagnostics.Process();.StartInfo.FileName = FilterAdress;.StartInfo.Arguments = "Yes";

proc.Start();//Запуск консольного приложения.Close();

}(Exception ex)

{.Show(ex.ToString(), "Error");.Exit();;

}

}

{

{.Diagnostics.Process proc