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

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

    BYTE   i_type;

    BYTE   i_code;                 // Type sub code

    USHORT i_cksum;

    USHORT i_id;

    USHORT i_seq;

} ICMP_HDR, *PICMP_HDR; 

u_short checksum(u_short *buffer, int size); 

typedef struct tag_param{char name[100];} PARAM; 

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

class ICMP_PACKET

{

public:

char    buf[MAX_PACKET],*ptr; 

IP_HDR    ipHdr;

ICMP_HDR  icmpHdr;

u_short iTotalSize;

struct sockaddr_in remote;       // IP addressing structures 

void PrintPacket(void);

void FillFields(PARAM* param);

}; 

class RAW_SOCKET

{

public:

SOCKET    s;

BOOL      bOpt;

RAW_SOCKET(int proto);

int SendPackets(char* buf, u_short TotalSize,

                  struct sockaddr_in *p_remote, DWORD amount);

int BindSocket(u_long address);

int RecvPackets(void);

}; 

int send_icmp_sequence(PARAM* param);

Файл Raw_send.cpp

 

#include "packet.h" 

// Global variables 

u_long         dwToIP,               // IP to send to

               dwFromIP;             // IP to send from (spoof)

u_short        iToPort,              // Port to send to

               iFromPort;            // Port to send from (spoof)

DWORD          dwCount;              // Number of times to send

char           strMessage[MAX_MESSAGE]; // Message to send 
 

void ICMP_PACKET::FillFields(PARAM* param)

{

   

u_short               // Lots of sizes needed to fill

                       //iUdpSize,     // the various headers with

                       iIPVersion,

                       iIPSize,

                       cksum = 0; 

dwToIP = inet_addr(param[6].name);

dwFromIP = inet_addr(param[5].name);  

ptr=NULL;

ZeroMemory(buf,MAX_PACKET); 

//iTotalSize = sizeof(ipHdr) + sizeof(icmpHdr) + strlen(strMessage); 

      iTotalSize = sizeof(ipHdr) + sizeof(icmpHdr); 

    iIPVersion = 4;

    iIPSize = sizeof(ipHdr) / sizeof(u_long);

    //

    // IP version goes in the high order 4 bits of ip_verlen. The

    // IP header length (in 32-bit words) goes in the lower 4 bits.

    //

    ipHdr.ip_verlen = (iIPVersion << 4) | iIPSize;

    ipHdr.ip_tos = atoi(param[2].name);  //0  // IP type of service

    ipHdr.ip_totallength = htons(iTotalSize); // Total packet len

    ipHdr.ip_id = 0;                 // Unique identifier: set to 0

    ipHdr.ip_offset = htons(atoi(param[3].name)); //0; // Fragment offset field

    ipHdr.ip_ttl = atoi(param[4].name); //128;  // Time to live

    ipHdr.ip_protocol = 0x01;        // Protocol(ICMP)

    ipHdr.ip_checksum = 0 ;          // IP checksum

    ipHdr.ip_srcaddr = dwFromIP;     // Source address

    ipHdr.ip_destaddr = dwToIP;      // Destination address

    //

    // Initalize the UDP header

    //

    //iUdpSize = sizeof(udpHdr) + strlen(strMessage);

      /*

      iUdpSize = sizeof(udpHdr); 

    udpHdr.src_portno = htons(iFromPort) ;

    udpHdr.dst_portno = htons(iToPort) ;

    udpHdr.udp_length = htons(iUdpSize) ;

    udpHdr.udp_checksum = 0 ;*/ 

      // Initalize the ICMP header 

      icmpHdr.i_type = (u_char)atoi(param[7].name); //0; //put here a number in the range 0-127 (except for

      //the error numbers)

      icmpHdr.i_code = (u_char)atoi(param[8].name); /* 0; put here a number in the range 0-127,

    This way you can build your own ICMP-message types

      for hundreds of different occasions.*/

      icmpHdr.i_cksum = 0;

      icmpHdr.i_id = htons(atoi(param[9].name)); //0;

      icmpHdr.i_seq = htons(atoi(param[10].name)); //0;

    icmpHdr.i_cksum = checksum((u_short*)&icmpHdr, sizeof(icmpHdr)); 
 

    // Now assemble the IP and UDP headers along with the data

    //  so we can send it

           

    ZeroMemory(buf, MAX_PACKET);

    ptr = buf; 

    memcpy(ptr, &ipHdr, sizeof(ipHdr));   ptr += sizeof(ipHdr);

    //memcpy(ptr, &udpHdr, sizeof(udpHdr)); ptr += sizeof(udpHdr);

      memcpy(ptr, &icmpHdr, sizeof(icmpHdr)); ptr += sizeof(icmpHdr);

    //memcpy(ptr, strMessage, strlen(strMessage)); 

    // Apparently, this SOCKADDR_IN structure makes no difference.

    // Whatever we put as the destination IP addr in the IP header

    // is what goes. Specifying a different destination in remote

      // will be ignored.

    //

    remote.sin_family = AF_INET;

    //remote.sin_port = htons(iToPort);

    remote.sin_addr.s_addr = dwToIP; 

      //PrintPacket();

}; 
 

int RAW_SOCKET::SendPackets(char* buf, u_short iTotalSize,

                                          struct sockaddr_in *p_remote, DWORD dwCount)

{

      DWORD              i,j;

      int                ret; 

      ((ICMP_PACKET*)buf)->PrintPacket(); 

      for(i = 0; i < dwCount; i++)

    {

      ret = sendto(s, buf, iTotalSize, 0, (SOCKADDR *)p_remote,

            sizeof(struct sockaddr_in)); 

        if (ret == SOCKET_ERROR)

        {

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

            break;

        }

        else

            {

                  buf[ret] = '\0';

                  printf("Info sent to [%s]:\n",

                        inet_ntoa(p_remote->sin_addr));

             

                  for (j=0;j<(u_int)ret;j++) printf("%d", buf[j]);

                  printf("%c",'\n');

                  for (j=0;j<(u_int)ret;j++) printf("%c", buf[j]);

                  printf("\nNumber of bytes sent: %d\n", ret);

            }

    } // end for 

      return 0;

}; 

// Function: send_icmp_sequence

//

// Description:

//    Create the raw socket and set the IP_HDRINCL option.

//    Following this, assemble the IP and ICMP packet headers by

//    assigning the correct values and calculating the checksums.

//    Then fill in the data and send to its destination.

//

int send_icmp_sequence(PARAM* param)

{

      ICMP_PACKET        packet;

      RAW_SOCKET         raw_socket(IPPROTO_RAW); 

    //dwCount = DEFAULT_COUNT;

      dwCount = atoi(param[1].name); 

      packet.FillFields(param); 

      raw_socket.SendPackets(packet.buf, packet.iTotalSize,

            &packet.remote, dwCount); 

    closesocket(raw_socket.s) ;

   

// WSACleanup() ; 

    getchar();

      return 0;

} 

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

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

// Function: checksum

//

// Description:

//    This function calculates the 16-bit one's complement sum

//    for the supplied buffer.

//    This function is taken from a MSDN v6.0 example (PING app example)

//

u_short checksum(u_short *buffer, int size)

{

    u_long cksum=0; 

    while (size > 1)

    {

        cksum += *buffer++;

        size  -= sizeof(u_short);  

    }

    if (size)

    {

        cksum += *(u_char*)buffer;  

    }

    cksum = (cksum >> 16) + (cksum & 0xffff);

    cksum += (cksum >>16);  

    return (u_short)(~cksum);

}

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

Файл  http_conf.inf

 

127.0.0.1         ip-адрес, назначенный этому серверу (0.0.0.0-это INADDR_ANY)

8080                Порт приёма HTTP-запросов этого сервера

0                 1/0-echo on/echo off

Файл http_client.htm

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html> 

<head>

<title>HTTP-Клиент для управления генератором

IP-пакетов</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

</head> 

<body bgColor="#fff5ee"> 

<h3 align="center"><font color="#808080">HTTP-Клиент для управления

генератором IP-пакетов</font></h3> 

<h4 align="left"><font color="#808080">Выбор формы управления:</font></h4> 

<p><font color="#808080">Введите ip-адрес ICMP-генератора:</font></p> 

<p><font color="#808080"><input value="127.0.0.1" name="ip_address" size="20"> <input

type="reset" value="Сбросить" name="B2"> </font></p> 

<form name="form1" method="get">

  <input type="hidden" name="T01" value="send"><p><font color="#808080">Выберите

  тип Вашего запроса:</font></p>

  <p><font color="#808080"><input type="radio" name="T02" value="V1" checked>

  Прислать форму для генератора ICMP-пакетов.<br>

  <input type="radio" name="T02" value="V2"> Прислать форму для

  генератора  ICMP-атак.</font></p>

  <p><font color="#808080"><input

  onclick="document.form1.action='http://'+ip_address.value+':8080'" type="submit"

  value="Отправить запрос" name="#"> </font></p>

</form>

</body>

</html>

Файл http_icmp_form.htm

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html> 

<head>

<title>HTTP-Клиент для управления генератором

ICMP-пакетов</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

</head> 

<body bgcolor="fff5ee"> 

<h3 align="center"><font color="#808080">HTTP-Клиент для управления

генератором ICMP-пакетов</font></h3> 

<h4 align="left"><font color="#808080">Управление генератором

пакетов:</font></h4> 

<p><font color="#808080">Введите IP-адрес генератора пакетов:</font></p> 

<p><input name="ip_address" size="20" value="127.0.0.1"> <input type="reset"

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