Автор работы: Пользователь скрыл имя, 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
{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.
// Связываем
адрес сервера с базовым(
if (bind(dispatch_server_socket,(
sizeof(server_address))==
{cerr<<"bind() failed with error "<<WSAGetLastError()<<endl;
getch();WSACleanup();
// Переводим
базовый(диспетчерский) сокет
// прослушивание/диспетчеризация сигналов на подключение и устанавливаем
// размер очереди
одновременных обращений к
if (listen(dispatch_server_
{cerr<<"listen() failed with error "<<WSAGetLastError()<<endl;
getch();WSACleanup();
conf=conf_ref;
}
//////////////////////////////
int DISPATCH_SERVER_SOCKET_HTTP::
{
//cout<<"Waiting
for a client's connection..."<<endl<<endl;
//****************************
while (true)
{
// Ждём очередное
подключение к серверу (
// дождавшись, возвращаем виртуальный сокет сервера - для двухстороннего
// обмена сообщениями с данным клиентом
msg_server_socket = accept(dispatch_server_socket,
(SOCKADDR*) &client_address,
&size_of_client_address);
// Если случилась
ошибка ожидания клиента (
if (msg_server_socket==INVALID_
{cerr<<"accept() failed with error "<<WSAGetLastError()<<endl;
//
Закрываем базовый(
if
(closesocket(dispatch_server_
cerr<<"closesocket() failed with error "<<WSAGetLastError()<<endl;
WSACleanup();return
0;}
// Выводим на
экран время подключения
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.
<<ntohs(client_address.
}
// Для каждого
подключившегося клиента
// адрес виртуального
сокета сервера для
// обмена сообщениями с данным клиентом (нити нужны здесь для того, чтобы
// позволить серверу работать одновременно с несколькими клиентами)
SERVER server;
server.msg_server_socket = msg_server_socket;
server.connection_time = connection_time;
server.conf=conf;
if (CreateThread(NULL,0,(
(LPVOID)&server,0,&
cout<<GetLastError()<<
}// end of while
//****************************
// Закрываем
базовый(диспетчерский) сокет
if
(closesocket(dispatch_server_
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_
{
cout<<"Terminating
HTTP-connection."<<endl<<endl;
// Блокируем получение - отправку сообщений у виртуального сокета сервера
if (shutdown(msg_server_socket,
{cerr<<"shutdown()
failed with error "<<WSAGetLastError()<<endl;
// Закрываем
виртуальный сокет сервера,
if (closesocket(msg_server_
{cerr<<"closesocket() failed with error "<<WSAGetLastError()<<endl;
return -1;}
return 0;
};
//////////////////////////////
void SERVER::erase_buffer(void)
{
ZeroMemory(&Buffer,sizeof(
}
//////////////////////////////
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,
if (retval == SOCKET_ERROR)
{cerr<<"recv() failed: error "<<WSAGetLastError()<<endl;
closesocket(msg_server_
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,
return 0;
};
//////////////////////////////
int SERVER::send_data(void)
{
int retval;
char R[]={"R: "};
retval = send(msg_server_socket,Buffer,
if (retval == SOCKET_ERROR)
{cerr<<"send()
failed: error "<<WSAGetLastError()<<endl;
if(conf.echo)
cout<<"R:
"<<Buffer<<endl;
report_file.write(R,strlen(R))
report_file.write(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"
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.
empty_file.close();
};
//////////////////////////////
CONF_HTTP::CONF_HTTP(void)
{
ZeroMemory(ip_address,sizeof(
port=0;
echo=false;
};
//////////////////////////////
int SERVER::ProcessClientQuery(
{
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(
{
//T01=ddddddddddddd&T02=
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++]=
if(st[i]=='=') flag=1;
}
return 0;
}
//////////////////////////////