Комплекс сетевой защиты

Автор работы: Пользователь скрыл имя, 17 Сентября 2011 в 20:38, дипломная работа

Описание работы

В современном мире происходит стремительное развитие компьютерной техники и компьютерных технологий. Важное место среди них занимают технологии вычислительных и информационных сетей. Создание и развитие Internet и World Wide Web привело к новому этапу развития информационного общества. Но, с другой стороны, развитие современных сетевых информационных технологий привело к росту числа компьютерных преступлений и связанных с ними хищений информации, а также материальных потерь.

Содержание работы

1. Введение 8
2. Задача сетевой защиты и методы её решения 10
2. 1. Брандмауэр 10
2. 2. Фильтры пакетов – простые и кумулятивные 11
2. 3. Прокси-брандмауэры и сервера уровня соединения 13
2. 4. Шлюзы приложений и сервера прикладного уровня 14
2. 5. Системы обнаружения компьютерных атак (СОА) 15
2. 6. Классификация систем обнаружения атак (СОА) 17
2. 7. Варианты реакций на обнаруженную атаку 19
2. 8. Характеристики средств сетевой защиты 21
2. 9. Выводы 25
3. Постановка задачи 27
3. 1. Концепция программного средства 27
3. 2. Сетевое программирование под OC Windows 28
3. 3. Атакующие воздействия для программного средства 31
3. 3. 1. Атака Smurf 31
3. 3. 2. Атака Tribe Flood Network 33
3. 3. 3. Атака WinFreeze 34
3. 3. 4. Атака ICMP Flood 36
4. Модель системы 37
4. 1. Схема взаимодействия модулей системы 44
4. 2. Описание модулей 46
4. 3. Описание программных элементов 47
5. Сведения о реализации 62
6. Экспериментальная часть 64
7. Разработка документации 73
7. 1. Техническое задание 73
7.2. Руководство оператора 76
8. Бизнес-план 78
8. 2. Характеристика ПП 78
8. 3. Исследование и анализ рынка 80
8. 4. Производственный план 82
График безубыточности 96
9. Безопасность и экологичность проекта 97
9. 1. Введение 98
9. 2. Характеристика производственного помещения 99
9. 3. Производственная санитария 100
9. 4. Электробезопасность 101
9. 5. Пожаробезопасность 102
9. 6. Контроль над электромагнитным излучением 104
9. 7. Освещение 107
9. 8. Вентиляция 108
9. 9. Контроль шума 110
9. 10. Эргономичность 111
9. 11. Вывод 113
10. Заключение 114
11. Список литературы 115
Приложение 116
Файл http_plugin.cpp 116
Файл Packet.cpp 128
Файл Packet.h 130
Файл Raw_send.cpp 132
Файл http_conf.inf 137
Файл http_client.htm 137
Файл http_icmp_form.htm 138
Файл http_icmp_reply.htm 139
Файл http_attack_form.htm 140
Файл http_attack_reply.htm 142
Файл Packet.cpp 142
Файл Packet.h 142
Файл pop3_conf.inf 142
Файл pop3_main.cpp 143

Файлы: 1 файл

Пояснительная записка.doc

— 1.00 Мб (Скачать файл)

      {cerr<<"WSAStartup failed with error "<<retval<<endl;

    getch();WSACleanup();exit(-1);} 

size_of_client_address = sizeof(client_address); 

// Создаём базовый(диспетчерский) сокет сервера, настроенный на TCP

dispatch_server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 

if (dispatch_server_socket == INVALID_SOCKET)

      {cerr<<"socket() failed with error "<<WSAGetLastError()<<endl;

getch();WSACleanup();exit(-1);}  

// Записываем  в адресную структуру IP адрес  сервера и порт сервера

server_address.sin_family = AF_INET;

server_address.sin_port = htons(conf_ref.port);//Port MUST be in Network Byte Order

server_address.sin_addr.S_un.S_addr = inet_addr (conf_ref.ip_address); 

// Связываем  адрес сервера с базовым(диспетчерским)  сокетом сервера

if (bind(dispatch_server_socket,(SOCKADDR*) &server_address,

           sizeof(server_address))==SOCKET_ERROR)

      {cerr<<"bind() failed with error "<<WSAGetLastError()<<endl;

      getch();WSACleanup();exit(-1);} 

// Переводим  базовый(диспетчерский) сокет сервера  на режим 

// прослушивание/диспетчеризация  сигналов на подключение и  устанавливаем 

// размер очереди  одновременных обращений к серверу

if (listen(dispatch_server_socket,MAX_CONNECTIONS)==SOCKET_ERROR)

      {cerr<<"listen() failed with error "<<WSAGetLastError()<<endl;

      getch();WSACleanup();exit(-1);} 

conf=conf_ref;

} 

////////////////////////////////////////////////////////////////////////// 

int DISPATCH_SERVER_SOCKET_HTTP::accept_connect(void)

{

//cout<<"Waiting for a client's connection..."<<endl<<endl; 

//************************************************************************

while (true)

{

// Ждём очередное  подключение к серверу (функцией connect()) клиента и, 

// дождавшись, возвращаем  виртуальный сокет сервера - для  двухстороннего 

// обмена сообщениями  с данным клиентом

      msg_server_socket = accept(dispatch_server_socket,

                            (SOCKADDR*) &client_address, &size_of_client_address);  

// Если случилась  ошибка ожидания клиента (кроме  отсутствия вызова клиента), то:

if (msg_server_socket==INVALID_SOCKET)

      {cerr<<"accept() failed with error "<<WSAGetLastError()<<endl;

      // Закрываем базовый(диспетчерский) сокет сервера

      if (closesocket(dispatch_server_socket)==SOCKET_ERROR)

      cerr<<"closesocket() failed with error "<<WSAGetLastError()<<endl;

      WSACleanup();return 0;} 

// Выводим на  экран время подключения клиента,  его IP-адрес и порт

if ( client_address.sin_family == AF_INET) // если это TCP-клиент,то:

{

      connection_time=time(0);

      cout<<"Accepted HTTP-connection on: "<<ctime(&connection_time)

      <<"from IP address: "<<inet_ntoa(client_address.sin_addr)<<" port: "

      <<ntohs(client_address.sin_port)<<endl<<endl;

} 

// Для каждого  подключившегося клиента создаём  нить и передаём в неё

// адрес виртуального  сокета сервера для двухстороннего 

// обмена сообщениями  с данным клиентом (нити нужны  здесь для того, чтобы

// позволить  серверу работать одновременно с несколькими клиентами)

SERVER server;

server.msg_server_socket = msg_server_socket;

server.connection_time = connection_time;

server.conf=conf; 

if (CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFuncHTTP,

      (LPVOID)&server,0,&dwThreadID)==NULL)

      cout<<GetLastError()<<endl;

}// end of while

//************************************************************************ 

// Закрываем  базовый(диспетчерский) сокет сервера

      if (closesocket(dispatch_server_socket)==SOCKET_ERROR)

      cerr<<"closesocket() failed with error "<<WSAGetLastError()<<endl; 

// Освобождаем  ресурсы с помощью библиотеки WS2_32.DLL

WSACleanup();

return 0;

}; 

//////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// 

SERVER::SERVER(void)

{

erase_buffer();

quit = 0;// Нужно  ли закончить сеанс связи

connection_time = 0;

block_reply = 1;

ZeroMemory(param,sizeof(param));

param_index=0;

}; 

////////////////////////////////////////////////////////////////////////// 

int SERVER::shutdown_and_closesocket(void)

{

cout<<"Terminating HTTP-connection."<<endl<<endl; 

// Блокируем  получение - отправку сообщений  у виртуального сокета сервера

if (shutdown(msg_server_socket,SD_BOTH)==SOCKET_ERROR)

{cerr<<"shutdown() failed with error "<<WSAGetLastError()<<endl;return -1;} 

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

if (closesocket(msg_server_socket)==SOCKET_ERROR)

{cerr<<"closesocket() failed with error "<<WSAGetLastError()<<endl;

return -1;}

return 0;

}; 

////////////////////////////////////////////////////////////////////////// 

void SERVER::erase_buffer(void)

{

ZeroMemory(&Buffer,sizeof(Buffer));

} 

////////////////////////////////////////////////////////////////////////// 

void SERVER::set_buffer(char* string)

{

erase_buffer();

strcpy(Buffer,string);

} 

////////////////////////////////////////////////////////////////////////// 

int SERVER::recv_data(void)

{

erase_buffer(); 

// Ждём приёма  сообщения от клиента

char ch;

int retval;

char S[]={"S: "}; 

for (int i=0; i<sizeof(Buffer); i++)

{

// Принимаем  побайтно то, что клиент отправил  как цельное сообщение

// (для того, чтобы  мы могли распознавать отдельные  команды)

retval = recv(msg_server_socket,&ch,sizeof(char),0 );

if (retval == SOCKET_ERROR)

      {cerr<<"recv() failed: error "<<WSAGetLastError()<<endl;

      closesocket(msg_server_socket); return -1;} 

else {Buffer[i]=ch; if (ch =='\n') break;};

};  

if(conf.echo)

cout<<"S:  "<<Buffer<<endl; 

report_file.write(S,strlen(S));

report_file.write(Buffer,strlen(Buffer)); 

return 0;

}; 

////////////////////////////////////////////////////////////////////////// 

int SERVER::send_data(void)

{

int retval;

char R[]={"R: "}; 

retval = send(msg_server_socket,Buffer,strlen(Buffer),0);// ни в коем

                                          // случае не sizeof(Buffer)!

if (retval == SOCKET_ERROR)

      {cerr<<"send() failed: error "<<WSAGetLastError()<<endl;return -1;} 

if(conf.echo)

cout<<"R:  "<<Buffer<<endl; 

report_file.write(R,strlen(R));

report_file.write(Buffer,strlen(Buffer));

erase_buffer();

return 0;

}; 

////////////////////////////////////////////////////////////////////////// 

SERVER& SERVER::operator=(SERVER& right)

{

if (&right!=this)

{

msg_server_socket = right.msg_server_socket;

connection_time = right.connection_time;

conf=right.conf;

}

return *this;

}

 

///////////////// Описание  конфигурационного объекта /////////////////////

//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// 

void CONF_HTTP::Init(void)

{

fstream empty_file; 

conf_file.open("http_conf.inf",ios::in); 

conf_file>>ip_address;

readcomment(conf_file);

conf_file>>port;

readcomment(conf_file);

conf_file>>echo;

readcomment(conf_file); 

conf_file.close(); 

empty_file.open("http_report.txt",ios::trunc);

empty_file.close(); 

}; 

////////////////////////////////////////////////////////////////////////// 

CONF_HTTP::CONF_HTTP(void)

{

ZeroMemory(ip_address,sizeof(ip_address));

port=0;

echo=false;

}; 

////////////////////////////////////////////////////////////////////////// 
 

int SERVER::ProcessClientQuery(void)

{ 

if (!strncmp(Buffer,"GET /?",6))

{

char arg[MAX_PATH*10]={0};

substring(Buffer,'?','%',arg);

ProcessControlString(arg);

} 

if (!strncmp(Buffer,"\r\n",2))

{

set_buffer("HTTP/1.1 200 OK\r\n");

fstream file;

char ch; 

char temp_path[MAX_PATH]={0}; 

CreateQueryForm(temp_path); // Здесь решаем вопрос об отправке  клиенту 

                                        // формы  на основании его запроса 

size_t i=strlen(Buffer);

file.open(temp_path,ios::in); 

while(!file.eof())

{

file.read(&ch,1);

Buffer[i++]=ch;

} 

quit=1;block_reply=0;

}

return 0;

} 

////////////////////////////////////////////////////////////////////////// 

int SERVER::ProcessControlString(char* st)

{

//T01=ddddddddddddd&T02=ggggggggggggg&

size_t i;

int j=0;

int flag=0;

for(i=0;i<strlen(st);i++) // разбиваем строку на подстроки

{

if(st[i]=='&') {flag=0;param_index++;j=0;}

if(flag==1) param[param_index].name[j++]=st[i];

if(st[i]=='=') flag=1;

} 

return 0;

} 

//////////////////////////////////////////////////////////////////////////

Информация о работе Комплекс сетевой защиты