Автор работы: Пользователь скрыл имя, 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
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);
#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,
{
DWORD i,j;
int
ret;
((ICMP_PACKET*)buf)->
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_
for (j=0;j<(u_int)ret;j++) printf("%d", buf[j]);
printf("%c",
for (j=0;j<(u_int)ret;j++) printf("%c", buf[j]);
printf("\
}
} // 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.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);
}
//////////////////////////////
127.0.0.1 ip-адрес, назначенный этому серверу (0.0.0.0-это INADDR_ANY)
8080 Порт приёма HTTP-запросов этого сервера
0 1/0-echo on/echo off
<!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.
value="Отправить запрос" name="#"> </font></p>
</form>
</body>
</html>
<!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"