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

Автор работы: Пользователь скрыл имя, 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 Мб (Скачать файл)

//  HTTP TCP/IP почтовый  сервер для одновременной работы с MAX_CONNECTIONS

//  клиентами 

int echo_gl; 

DWORD WINAPI ThreadFuncHTTP(SERVER* p_server)

{ 

SERVER server;

server = *p_server; //через  перегруженное присваивание (из-за  строк) 

server.report_file.open("http_report.txt",ios::app); 

int retval;

//*********************** Приём  - передача сервера ***********************

while(true) { 

retval = server.recv_data();

if (retval==-1) break;  // если сокетная ошибка 

retval = server.ProcessClientQuery();

// если критическая  ошибка, то:

if (retval==-1) break;

// Если сервер  принял команду об окончании  сеанса соединения, то:

if (retval==1)

{

server.report_file.close();

cout<<"The HTTP-transaction successfully completed."<<endl;

return 1;

} 

// отправляем  ответ клиенту, если это был  запрос, а не данные

if(!server.block_reply) server.send_data(); 

if(server.quit) break; 

} //end of while

//******************** Конец  приёма - передачи сервера *******************

server.shutdown_and_closesocket(); 

if(server.conf.echo)

for (int i=0;i<server.param_index;i++)

cout<<"Parametr #"<<i<<": "<<server.param[i].name<<endl; 

server.ProcessHTTPCommand(); // Здесь на основе полученных  от HTTP-клиента 

                             // параметров производим запланированные 

                                           // действия

return 0;

} 

//////////////////////////////// main ////////////////////////////////////

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

int main(void)

{ 

CONF_HTTP conf;

conf.Init(); 

printf("The IP-packet generator.\n\nWaiting for HTTP-query...\n\n"); 

DISPATCH_SERVER_SOCKET_HTTP s(conf); 

s.accept_connect(); 

return 0;

} 

///////////////////////////// end of main ////////////////////////////////

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

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

char* substring(char* st,char s1,char s2,char* ret)

{

ZeroMemory(ret,sizeof(ret));

strncpy(ret,getspos(st,s1)+1,getspos(st,s2)-getspos(st,s1)-1);

return ret;

} 

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

char* getspos(char* search_string,char search_symbol)

{

int count=0; 

while(true)

{

if (count>200)

{

cout<<"The search symbol "<<search_symbol<<"was not found."<<endl;

getch();return NULL;

}

if (*search_string != search_symbol)

{search_string++; count++;} else break;

}// endwhile 

return search_string;

} 

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

void readcomment(fstream& file)

{

char empty[MAX_PATH]={0}; // буфер для считывания

ZeroMemory(empty,sizeof(empty));

file.getline(empty,sizeof(empty),10);

} 

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

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

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

void SERVER::CreateQueryForm(char* temp_path)

{ 

// Здесь решаем вопрос об отправке клиенту формы на основании его

// запроса 

if(!strcmp(param[0].name,"send"))

{

if(!strcmp(param[1].name,"V1"))

strcpy(temp_path,"http_icmp_form.htm");

if(!strcmp(param[1].name,"V2"))

strcpy(temp_path,"http_attack_form.htm");

} 

else

if(!strcmp(param[0].name,"icmp"))

strcpy(temp_path,"http_icmp_reply.htm");

else

if(!strcmp(param[0].name,"attack"))

strcpy(temp_path,"http_attack_reply.htm"); 

}; 

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

int SERVER::ProcessHTTPCommand(void)

{ 

if(!strcmp(param[0].name,"icmp")||!strcmp(param[0].name,"attack"))

{ 

send_icmp_sequence(param); 

cout<<"It was done by the HTTP-client."<<endl;

} 

return 0;

}; 

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

Файл Packet.cpp

#include "packet.h" 

void ICMP_PACKET::PrintPacket(void)

{

      IP_HDR             ipHdrRef;

    ICMP_HDR           icmpHdrRef;

      struct in_addr     addrRef; 

      printf("Prepared to send: %d bytes\n", iTotalSize); 

      ZeroMemory(&ipHdrRef,sizeof(ipHdrRef));

      ZeroMemory(&icmpHdrRef,sizeof(icmpHdrRef));

      ZeroMemory(&addrRef,sizeof(addrRef)); 

      memcpy(&ipHdrRef, buf, sizeof(ipHdrRef));

    memcpy(&icmpHdrRef, (buf + sizeof(ipHdrRef)), sizeof(icmpHdrRef)); 
 

      printf("The IP-header content:\n\n"); 

      printf("Type of service: %d\n", ipHdrRef.ip_tos);

      printf("Total packet length: %d\n", ntohs(ipHdrRef.ip_totallength));

      printf("Unique identifier: %d\n", ntohs(ipHdrRef.ip_id));

      printf("Fragment offset field: %d\n", ntohs(ipHdrRef.ip_offset));

      printf("Time to live: %d\n", ipHdrRef.ip_ttl);

      printf("Encapsulated protocol number: %d\n", ipHdrRef.ip_protocol);

      printf("Checksum: %d\n", ntohs(ipHdrRef.ip_checksum));

      addrRef.S_un.S_addr = ipHdrRef.ip_srcaddr;

      printf("Source address: %s\n", inet_ntoa(addrRef));

      ZeroMemory(&addrRef,sizeof(addrRef));

      addrRef.S_un.S_addr = ipHdrRef.ip_destaddr;

      printf("Destination address: %s\n\n", inet_ntoa(addrRef)); 

      printf("The ICMP-header content:\n\n"); 

      printf("Type: %d\n", icmpHdrRef.i_type);

      printf("Code: %d\n", icmpHdrRef.i_code);

      printf("Checksum: %d\n", ntohs(icmpHdrRef.i_cksum));

      printf("Unique identifier: %d\n", ntohs(icmpHdrRef.i_id));

      printf("Sequence number: %d\n\n", ntohs(icmpHdrRef.i_seq)); 

}; 

//WSADATA            wsd; 

RAW_SOCKET::RAW_SOCKET(int proto) //IPPROTO_ICMP

{

int                ret;     

/*

if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)

    {

        printf("WSAStartup() failed: %d\n", GetLastError());getchar();

        exit(-1);

    }

*/   

// Creating a raw socket with an undefined (raw) protocol

       

      s = WSASocket(AF_INET, SOCK_RAW, proto, NULL, 0,0); 

      if (s == INVALID_SOCKET)

    {

        printf("WSASocket() failed: %d\n", WSAGetLastError());getchar();

        exit(-1);

    } 

    // Enable the IP header include option

   

    bOpt = TRUE; // If TRUE (while setting IP_HDRINCL), IP header is

                   // submitted with data to be sent and

                   // returned from data that is read.

    ret = setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, sizeof(bOpt));

    if (ret == SOCKET_ERROR)

    {

        printf("setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError());getchar();

        exit(-1);

    } 

}; 

int RAW_SOCKET::BindSocket(u_long address)

{

    SOCKADDR_IN local;

      local.sin_family = AF_INET;

    //local.sin_port = htons((short)iPort); // for UDP or TCP

    local.sin_addr.s_addr = address;//htonl(INADDR_ANY);

      //local.sin_addr.s_addr = inet_addr(szInterface); 

    if (bind(s, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)

    {

            printf("bind() failed: %d\n", WSAGetLastError());getchar();

            return -1;

    }

      return 0;

};

Файл Packet.h

 

#pragma pack(1) 

#define WIN32_LEAN_AND_MEAN   // Windows Headers use this symbol

// to exclude rarely-used header files. Please refer to Windows.H

//to determine the files that will be excluded when this symbol is defined 

#include <winsock2.h>

#include <ws2tcpip.h> 

#include <stdio.h>

#include <stdlib.h> 

#define MAX_MESSAGE        4068

#define MAX_PACKET         4096

#define ICMP_ECHO          8

#define MAX_ICMP_PACKET    1024      // Max ICMP packet size 

//

// Setup some default values

//

#define DEFAULT_PORT_SEND       //5001

//#define DEFAULT_PORT_RECV       5000

//#define DEFAULT_IP_SEND        "127.0.0.1"

//#define DEFAULT_IP_RECV        "127.0.0.1"

//#define DEFAULT_COUNT           1 //5

#define DEFAULT_MESSAGE    "This is a test"

//char  szInterface[32] = "10.0.0.1";  // Default interface to read datagrams from 

//

// Define the IP header. Make the version and length field one

// character since we can't declare two 4 bit fields without

// the compiler aligning them on at least a 1 byte boundary.

//

typedef struct ip_hdr

{

    u_char  ip_verlen;        // IP version & length

    u_char  ip_tos;           // IP type of service

    u_short ip_totallength;   // Total length

    u_short ip_id;            // Unique identifier

    u_short ip_offset;        // Fragment offset field

    u_char  ip_ttl;           // Time to live

    u_char  ip_protocol;      // Protocol(TCP,UDP etc)

    u_short ip_checksum;      // IP checksum

    u_int   ip_srcaddr;       // Source address

    u_int   ip_destaddr;      // Destination address

} IP_HDR, *PIP_HDR, FAR* LPIP_HDR;

//

// Define the UDP header

//

typedef struct udp_hdr

{

    u_short src_portno;       // Source port number

    u_short dst_portno;       // Destination port number

    u_short udp_length;       // UDP packet length

    u_short udp_checksum;     // UDP checksum (optional)

} UDP_HDR, *PUDP_HDR; 

typedef struct icmp_hdr

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