Автор работы: Пользователь скрыл имя, 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
// HTTP TCP/IP почтовый сервер для одновременной работы с MAX_CONNECTIONS
// клиентами
int echo_gl;
DWORD WINAPI ThreadFuncHTTP(SERVER* p_server)
{
SERVER server;
server = *p_server; //через
перегруженное присваивание (из-за
строк)
server.report_file.open("http_
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_
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;
}
//////////////////////////////
//////////////////////////////
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,
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(
}
//////////////////////////////
//////////////////////////////
//////////////////////////////
void SERVER::CreateQueryForm(char* temp_path)
{
// Здесь решаем вопрос об отправке клиенту формы на основании его
// запроса
if(!strcmp(param[0].name,"
{
if(!strcmp(param[1].name,"V1")
strcpy(temp_path,"http_icmp_
if(!strcmp(param[1].name,"V2")
strcpy(temp_path,"http_attack_
}
else
if(!strcmp(param[0].name,"
strcpy(temp_path,"http_icmp_
else
if(!strcmp(param[0].name,"
strcpy(temp_path,"http_attack_
};
//////////////////////////////
int SERVER::ProcessHTTPCommand(
{
if(!strcmp(param[0].name,"
{
send_icmp_sequence(param);
cout<<"It was done by the HTTP-client."<<endl;
}
return 0;
};
//////////////////////////////
#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,
ZeroMemory(&icmpHdrRef,
ZeroMemory(&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,
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;
};
#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