Разработка межсетевого экрана для компьютеров пользователей с использованием технологии 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