Принципы построения Firewalls в операционных системах Windows NT и Linux

Принципы реализации Firewalls, общая структура драйвера, стек протоколов в операционных системах Windows и Linux. Технологии и пользовательский режим сетевой фильтрации трафика. Процедуры отправки и получения данных TCP/IP, точки входа драйверов.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 05.06.2011
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

После прохождения всех фильтров входной очереди, пакет попадает в маршрутизирующий код, откуда может быть перенаправлен внутрь системы (сначала на фильтры для принятых пакетов, затем на транспортный уровень), или отправлен на пересылку через другой интерфейс. В этом случае он сначала проходит фильтры для перенаправляемых пакетов, а затем фильтры для исходящих пакетов. С пакетами, созданными внутри системы, происходит все то же самое, только вместо фильтров для перенаправляемых пакетов к ним применяются фильтры для локально созданных пакетов.

После прохождения пакетом исходящих фильтров система вызывает dev_queue_xmit() для помещения пакета в исходящую очередь устройства или производит непосредственный вызов hard_start_xmit(), если у устройства нет исходящей очереди.

3.2.3 Регистрация ловушки

Также следует упомянуть, что перед подключением, ловушку необходимо зарегистрировать. Это осуществляется путем заполнения структуры nf_hook_ops и вызова функции регистрации ловушки nf_register_hook(). Аргументом этой функции является адрес структуры nf_hook_ops. Структура nf_hook_ops определена в заголовочном файле <linux/netfilter.h>. Рассмотрим ее:

struct nf_hook_ops

(

struct list_head list;

/* User fills in from here down. */

nf_hookfn *hook;

int pf;

int hooknum;

/* Hooks are ordered in ascending priority. */ int priority;

);

Основные поля структуры:

nf_hookfn *hook - ловушка, т.е. функция, которая будет вызвана для обработки (анализа) пакета. Именно эта функция решает, что сделать с пакетом - отбросить его или принять.

int pf - протокол. Для IPv4 это значение равно PF_INET.

int hooknum - точка подключения ловушки.

int priority - приоритет. К одной точке может быть подключено несколько ловушек. Чтобы установить порядок их вызова, вводится приоритет. Ловушка с самым низким приоритетом первой обработает пакет.

Прототип функции-ловушки также определен в файле <linux/netfilter.h> и выглядит следующим образом:

typedef unsigned int nf_hookfn(unsigned int hooknum,

struct sk_buff **skb,

const struct net_device *in,

const struct net_device *out,

int (*okfn)(struct sk_buff *));

Аргументы функции:

unsigned int hooknum - точка подключения ловушки (определяется в структуре nf_hook_ops).

struct sk_buff **skb - двойной указатель на структуру sk_buff. Данная структура содержит полную информацию о сетевом пакете. Определена в файле <linux/skbuff.h>.

const struct net_device *in, *out - информация о входном и выходном интерфейсе.

4. Пример простого фильтра пакета на основе NETFILTER

4.1 Описание реализуемого фильтра

В данном примере будет разработан модуль ядра, выполняющий следующие действия:

- перехват и блокирование IP-пакета, адресованного локальному хосту;

- передачу перехваченного IP-пакета пользовательскому процессу.

Пользовательский процесс, приняв пакет, отображает данные о нем, такие как IP-адреса отправителя и получателя, длину заголовка, длину всего пакета, и сбрасывает содержимое пакета в файл.

Ловушка активизируется в момент открытия устройства пользовательским процессом. При закрытии устройства ловушка отключается.

Модуль является символьным устройством. Создадим для него файл устройства командой:

mknod /dev/nf_ip с 76 0

Заголовочные файлы и переменные:

#include <linux/config.h>

#include <linux/module.h>

#include <linux/netfilter_ipv4.h>

#include <linux/ip.h>

#include <linux/slab.h>

#include <linux/fs.h>

#include <linux/types.h>

#include <asm/uaccess.h>

Приняв сетевой пакет, модуль заполняет информационную структуру следующего содержания:

struct ip_pkt (

_ul6 iph_len;

_u32 pkt_len;

char buff[65536];

) *pkt;

Эта структура будет передана пользовательскому процессу. Назначение полей структуры:

_u16 iph_len - длина заголовка IP-пакета;

_u32 pkt_len - длина IP-пакета;

char buff[65536] - содержимое IP-пакета (заголовок +данные).

Размер буфера buff равен максимальной длине пакета протокола IPv4.

Структура заголовка IP-пакета:

struct iphdr *iph;

Флаг готовности данных для считывания:

int pkt_ready;

Функция-ловушка:

static unsigned int our_hook (

unsigned int hook,

struct sk_buff **pskb,

const struct net_device *indev,

const struct net_device *outdev,

int (*okfn)(struct sk_buff *)) (

iph = (*pskb)->nh.iph;

pkt->iph_len = iph->ihl<<2;

pkt->pkt_len = (*pskb)->len;

memset((*pskb)->data+pkt->iph_len, 0,

((*pskb)->len)-(pkt->iph_len));

memcpy(pkt->buff,(*pskb)->data,(*pskb)->len);

printk("Indev - %s\n",(char *)indev);

printk("Outdev - %s\n",(char *)outdev);

pkt_ready = 1; return NF_DROP;

)

Аргументы функции были перечислены выше. Функция заполняет поля структуры pkt данными о перехваченном пакете. Эти данные содержатся в структуре struct sk_buff **pskb. Объединение nh данной структуры содержит заголовок сетевого уровня (network layer header), поле len - длину IP-пакета, поле data - содержимое пакета. Этими значениями заполняется структура pkt, причем поле данных IP-пакета обнуляется. После этого устанавливается флаг готовности данных для считывания и ядру дается команда блокировать дальнейшее прохождение данного пакета (return NF_DROP).

Далее заполним структуру struct nf_hook_ops:

static struct nf_hook_ops our_ops = (

(NULL,NULL},

our_hook,

PF_INET,

NF_IP_LOCAL_IN,

NF_IP_PRI_FILTER-1

);

Ловушка подключается к точке LOCAL_IN, на что указывает значение NF_IP_LOCAL_IN поля hooknum структуры nf_hook_ops. Следовательно, перехвачен и блокирован будет пакет, адресованный локальному хосту.

Теперь определимся с функциями устройства (модуля). Пользовательский процесс должен открыть его, прочитать данные и закрыть. Следовательно, структура file_operations для данного устройства выглядит следующим образом:

struct file_operations nf_fops = (

read: read_pkt,

open: open_pkt,

release: close_pkt,

);

Рассмотрим эти функции.

1) Функция открытия устройства:

static int open_pkt(struct inode *inode, struct file *file)

(

If (MOD_IN_USE) return -EBUSY;

If (MINOR(inode->i_rdev)!= 0) return -ENODEV;

If ((file->f_mode)!= 1) return -EBUSY;

pkt=(struct ip_pkt *)kmalloc

(sizeof (struct ip_pkt),GFP_ATOMIC);

nf_register_hook(&our_ops);

pkt_ready =0;

MOD_INC_USE_COUNT;

return 0;

)

При открытии устройства выделяем память для структуры pkt, регистрируем ловушку вызовом функции nf_register_hook и сбрасываем флаг готовности данных.

2) Функция чтения из устройства:

static ssize_t read_pkt(struct file *file, char *buf,

size_t count, loff_t *ppos)

{

if(pkt_ready) (

copy_to_user(buf,pkt,sizeof(struct ip_pkt));

count = pkt->pkt_len;

file->f_pos += count;

pkt_ready =0;

return count;

)

return 0;

}

Если флаг pkt_ready установлен, блок данных (структура pkt) копируется в адресное пространство пользовательского процесса. После этого флаг pkt_ready сбрасывается. Функция возвращает длину принятого IP-пакета.

3) Функция закрытия устройства:

static int close_pkt (struct inode *inode, struct file *file)

(

kfree (pkt);

nf_unregister_hook(&our_ops);

MOD_DEC_USE_COUNT;

return 0;

)

При закрытии устройства освобождается память, выделенная для структуры pkt и ловушка отключается путем вызова функции nf_unregister_hook. Аргументом этой функции является адрес структуры struct nf_hook_ops.

4) Функции инициализации и выгрузки модуля выполняют стандартную процедуру регистрации и снятия регистрации устройства в системе:

int init_module(void)

{

if (register_chrdev(76,"nf_ip",&nf_fops)) return -EIO;

return 0;

}

void cleanup_module(void)

{

if(MOD_IN_USE) return;

unregister_chrdev (76," nf_ip");

return;

}

Приведенный выше код сохраняем в файле netf.c. Для получения загружаемого модуля ядра создается Makefile следующего содержания:

СС = gcc

CFLAGS = -02 -Wall

LINUX = /usr/src/linux

MODFLAGS = -D_KERNEL_ -DMODULE -I$ (LINUX)/include

netf.о: netf.с

$(CC) $(CFLAGS) $(MODFLAGS) -c netf.c

Теперь рассмотрим пользовательский процесс.

4.2 Пользовательский процесс

Пользовательский процесс после запуска открывает файл устройства и считывает из него IP-пакет, отображает данные о нем и сбрасывает содержимое пакета в файл data.file.

Заголовочные файлы:

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

#include <fcntl.h>

#include <errno.h>

#include <linux/ip.h>

int main ()

(

Структура, содержащая информацию о принятом пакете:

struct data_pkt (

u_short iph_len;

u_long len;

char buff[65536];

) data;

Структура, описывающая заголовок IP-пакета:

struct iphdr ip;

int count=0;

int fddev=0;

int d;

puts("\n Ждем пакет... ");

Обнуляем структуры:

memset(Sdata, 0,sizeof (struct data_pkt));

memset(Sip,0,sizeof(struct iphdr));

Открываем устройство:

fddev=open("/dev/nf_ip",O_RDONLY);

if(fddev<0) (

perror("nf_ip");

exit(0);)

Запускаем цикл ожидания IP-пакета:

for(;;) {

count=read(fddev,(char *)&data, sizeof(struct data_pkt));

if(count < 0) {

perror("count");

return (-1);

}

if(count == 0) continue;

if(count > 0) {

close(fddev);

break; }

}

Как только приходит пакет, закрываем устройство и выходим из цикла.

Информируем о приходе пакета и отображаем данные о нем:

printf("пакет получен.\n\n");

printf("Длина пакета\t-\t%d\n",data.len);

printf("Длина IP-заголовка\t-\t%d\n",data.iph_len);

Запишем в файл содержимое полученного пакета (поле buff структуры struct data_pkt):

d=open ("data.file",O_CREAT |O_TRUNC | O_RDWR, 0600);

if(!d) {

perror("data.file");

return (-1);

}

if(!(write(d,data.buff,data.len))) {

perror("data.file");

return (-1);

}

close(d);

Первые (data.iph_len) байт массива data, buff - это заголовок принятого IP-пакета. Копируем его в структуру struct iphdr и отображаем данные:

memcpy(&ip,data.buff,data.iph_len);

printf("\nSource IP\t-\t%s\n",inet_ntoa(ip.saddr));

printf("Destin. IP\t-\t%s\n",inet_ntoa(ip.daddr));

printf("npoTOKon\t-\t%d\n",ip.protocol);

printf ("Длина заголовка\t-\t%d\n",ip.ih<<2);

printf("Длина пакета\t-\t%d\n\n",ntohs(ip.tot_len));

return (0);

}

Приведенный код сохраняем в файле pkt_read.c. Получаем исполняемый модуль, введя команду:

gсс -о pkt_read pkt_read.c

Все работает.

Для того, чтобы перехватывать и блокировать пакеты, исходящие с локального хоста, необходимо переключить ловушку в точку LOCAL_OUT.

В структуре our_ops в поле hooknum заносим значение NF_IP_LOCAL_OUT, и структура принимает вид:

static struct nf_hook_ops our_ops = (

(NULL, NUL),

our_hook,

PF_INET,

NF_IP_LOCAL_OUT,

NF_IP_PRI_FILTER-1

};

Перекомпилируем и загружаем модуль, запускаем пользовательский процесс. Все работает.

Таким образом, при помощи NETFILTER получили возможность воздействовать на процесс прохождения пакетов по стеку IРv4-протокола, перехватывать их, блокировать, изменять их содержание.

5. Безопасность жизнедеятельности

5.1 Анализ условий труда в Информационно-вычислительном отделе(ИВО) Технической компании «НЕО»

Помещение информационно-вычислительном отдела Технической компании «НЕО» имеет следующие характеристики:

- помещение расположено на первом этаже девятиэтажного здания;

- размеры помещения: длина 4 м, ширина 3,5 м, высота 3 м, площадь помещения равна 14 м2, объем 42 м3; площадь окон - 3,6 м2;

- количество рабочих мест - 2, на одного человека приходится 7 м2 площади и 21м3 объема помещения, что соответствует требованиям ДНАОП 0.00 - 1.31-99 (площадь помещения на одного сотрудника не менее 6м2, объем не менее 20м3, площадь окон составляет не менее ? от площади помещения)

- оборудование: 2 сервера, принтер, модем, кондиционер, телефон;

- сеть энергообеспечения представляет собой трехфазную четырехпроводную сеть переменного тока с глухозаземленной нейтралью, напряжением 220/380 В, частотой 50 Гц.

Труд человека в современном автоматизированном производстве представляет собой процесс взаимодействия человека, машины и окружающей их среды, которые объединяются в систему «Человек-Машина-Среда» [ ].

Делим элемент «человек» на 3 функциональные составляющие(Ч1,Ч2,Ч3):

Ч1 - это человек, управляющий «машиной» с конечной целью - изготовления конечного продукта;

Ч2 - это человек, который рассматривается с точки зрения непосредственного воздействия на окружающую среду (за счет тепло - и влаговыделения, потребления кислорода и т.п.);

Ч3 - человек, рассматриваемый с точки зрения его психофизиологического состояния под действием факторов, влияющих на него в процессе работы. Этот элемент изучается с позиции охраны труда, состояние этого элемента является входящим пунктом процесса декомпозиции, который проводится.

Элемент «машина» тоже делится на 3 составляющие:

М1 - элемент, который выполняет основную технологическую функцию;

М2 - элемент функции аварийной защиты;

М3 - элемент влияния на окружающую среду и человека.(монитор и т.п.)

Количество элементов: 14 элементов (среда- 1, предмет труда(ПТ) -1, Ч1(1), Ч2(1), Ч3(1), Ч1(2), Ч2(2), Ч3(2), М1(1), М2(1), М3(1), М1(2), М2(2), М3(2))

- На рисунке 5.1 представлена структурная схема системы «Человек-Машина-Среда».

Рис. 5.1. Структурная схема системы «Человек-Машина-Среда»

Расшифровка связей взаимодействия между элементами системы «Человек-Машина-Среда» представлена в таблице 5.1

Таблица 5.1 Расшифровка взаимосвязей между элементами системы «ЧМС»

Номер связи

Направление связи

Содержание связи

1.1.1

1.1.2

1.1.3

Ч1(1) - М1(1)

Ч1(1) - М2(1)

Ч1(1) - М3(1)

Влияние человека Ч(1) на управление техникой М(1)

1.2.1

1.2.2

1.2.3

Ч1(2) - М1(2)

Ч1(2) - М2(2)

Ч1(2) - М3(2)

Влияние человека Ч(2) на управление техникой М(2)

2.1

Внешняя система управления «ЧМС»

Управляющая информация о технологическом процессе от внешней системы управления

2.2

Внешняя система управления «ЧМС»

Управляющая информация о технологическом процессе от внешней системы управления

3.1

Ч2(1) - С

Влияние человека Ч(1) как биологического объекта на среду

3.2

Ч2(2) - С

Влияние человека Ч(2) как биологического объекта на среду

4.1

Ч3(1) - Ч1(1)

Влияние состояния организма Ч(1) на качество работы Ч(1)

4.2

Ч3(2) - Ч1(2)

Влияние состояния организма Ч(2) на качество работы Ч(2)

5.1

Ч3(1) - Ч2(1)

Влияние физиологического состояния Ч(1) на степень интенсивности обмена веществ между организмом, средой и энерговыделением Ч(1)

5.2

Ч3(2) - Ч2(2)

Влияние физиологического состояния Ч(2) на степень интенсивности обмена веществ между организмом, средой и энерговыделением Ч(2)

6.1

Ч3(1) - Ч3(2)

Взаимодействие людей между собой

6.2

Ч3(2) - Ч3(1)

Взаимодействие людей между собой

7.1

С - Ч1(1)

Влияние среды на качество работы Ч(1)

7.2

С - Ч1(2)

Влияние среды на качество работы Ч(2)

8.1

С - Ч3(1)

Влияние среды на состояние организма человека Ч(1)

8.2

С - Ч3(2)

Влияние среды на состояние организма человека Ч(2)

9.1

С - Ч1(1)

Информация о состоянии среды, которая обрабатывается Ч(1)

9.2

С - Ч1(2)

Информация о состоянии среды, которая обрабатывается Ч(2)

10.1.1

10.1.2

10.1.3

С - М1(1)

С - М2(1)

С - М3(1)

Влияние среды на работу машины М(1)

10.2.1

10.2.2

10.2.3

С - М1(2)

С - М2(2)

С - М3(2)

Влияние среды на работу машины М(2)

11.1.1

11.1.2

11.1.3

М1(1) - Ч1(1)

М2(1) - Ч1(1)

М3(1) - Ч1(1)

Информация про состояние машины, которая обрабатывается человеком Ч(1), информация про предмет труда и среду, полученная от машины М(1)

11.2.1

11.2.2

11.2.3

М1(2) - Ч1(2)

М2(2) - Ч1(2)

М3(2) - Ч1(2)

Информация про состояние машины, которая обрабатывается человеком Ч(2), информация про предмет труда и среду, полученная от машины М(2)

12.1

М3(1) - С

Целенаправленное влияние машины М(1) на среду (при работе «машина» выделяет тепло, что приводит к повышению температуры в помещении)

12.2

М3(2) - С

Целенаправленное влияние машины М(2) на среду (при работе «машина» выделяет тепло, что приводит к повышению температуры в помещении)

13.1

М2(1) - М1(1)

Аварийное управляющее влияние

13.2

М2(2) - М1(2)

Аварийное управляющее влияние

14.1

М1(1) - М2(1)

Информация, необходимая для создания аварийно управляющего влияния

14.2

М1(2) - М2(2)

Информация, необходимая для создания аварийно управляющего влияния

15.1

М1(1) - ПТ

Влияние машины М(1) на предмет труда

15.2

М1(2) - ПТ

Влияние машины М(2) на предмет труда

16.1

ПТ - Ч3(1)

Влияние предмета труда на физиологическое состояние Ч(1)

16.2

ПТ - Ч3(2)

Влияние предмета труда на физиологическое состояние Ч(2)

Проанализировав систему «Человек-Машина-Среда» можно определить потенциально опасные и вредные производственные факторы в соответствии с ГОСТ 12.00.003-74 для помещения обучающего центра.

Физические:

- недостаточная освещенность рабочей зоны;

- повышенное значение напряжения в электрической цепи, замыкание которой может произойти через тело человека;

- повышенная (пониженная) температура, влажность воздуха рабочей зоны;

- повышенный уровень шума.

Психофизиологические:

- умственное перенапряжение;

- эмоциональные перегрузки;

- перенапряжение зрительных анализаторов.

Таблица 5.2 - оценка факторов производственной среды и трудового процесса

Факторы производственной среды и трудового процесса

Значение фактора (ПДК, ПДУ)

3 класс - опасные и вредные условия характера труда

Продолжи-тельность действия фактора, в % за смену

Норма

Факт

1ст

2ст

3ст

1

2

3

4

5

6

7

1.Вредные химические вещества, мг/м3:

1 класс опасности: - озон

0,1

-

-

-

-

-

2 класс опасности: - пыль

4

-

-

-

-

-

2. Вибрация, Гц

<0,7

0,7

-

-

-

85

3.Шум, дБ (А)

50

50

-

-

-

85

4.Инфразвук

5.Ультразвук

6. Неионизирующие излучения: - промышленной частоты, В/м

25

<20

-

-

-

85

-радиочастотного диапазона, В/м

2,5

<2,5

-

-

-

85

7.Рентгеновское излучение мкf/час

100

18

8.Микроклимат: температура воздуха,0С

22-24

23-25

23

-

-

-

100

-скорость движения, м/с

0,1

0,1

-

-

-

100

-относительная влажность, %

40-60

55

-

-

-

100

9.Атмосферное давление, мм.рт.ст.

760

760

-

-

-

100

10.Освещение: естественное, %

2

2

50

-искусственное, Лк

400

200

V

-

-

85

11.Тяжесть труда:

-мелкие стереотипные движения кистей и пальцев рук (кол-во за смену)

40000

62000

-рабочая поза (пребывание в наклонном положении в течении смены), %

свободная

свобод-ная

85

-наклоны корпуса (раз за смену)

100

-

85

-перемещение в пространстве (км. за смену)

10

0,4

5

12.Напряженность труда а)внимание -продолжительность сосредоточения (в % от продолжительности смены)

До 75

70

-

-

-

70

Б)напряженность анализаторов: зрение(категория работ)

Средней точности

Высокоточная

-

-

-

85

-слух (разборчивость)

70

60

60

В)эмоциональное и интеллектуальное напряжение

Работа по установленному графику

Работа по установленному графику

-

-

-

100

-длительность выполнения повторяющихся операций, с

100

-

-время наблюдения за ходом производственного процесса без активных действий (в % от продолжительности смены)

95

50

50

13. Сменность

Односм.

Общее кол-во факторов

Х

Х

1

-

-

Доминирующими вредными факторами для данного помещения является: недостаток искусственного освещения.

5.2 Техника безопасности в помещении ИВО

Оборудование ПЭВМ устанавливается в помещении информационно-вычислительного отдела, которое классифицируется как помещение без повышенной опасности поражения электрическим током, беспыльное, с нормальной влажностью и температурой воздуха, изолирующими деревянными полами, не имеющее заземленных предметов, что соответствует требованиям ПУЭ.

Энергоснабжение электрооборудования осуществляется трехфазной четырехпроводной сетью переменного тока с глухозаземленной нейтралью, напряжением 220 В, частотой 50 Гц.

Для соблюдения техники безопасности в помещении ИВО применены такие технические меры защиты:

- токоведущие части оборудования расположены в недоступном месте, что исключает возможность случайного прикосновения к ним;

- использование контрольных приборов (индикаторы напряжения сети);

- проведение периодического контроля состояния изоляции сетевых приборов.

- выполнение зануления и заземления в помещении.

Для работников предусмотрено проведение инструктажей по вопросам охраны труда, то есть детальное ознакомление и обучение правилам безопасных приемов и методов работы, применению средств защиты, оказанию первой помощи пострадавшему. А также:

- допуск к работе;

- надзор во время работы;

- вывешивание предупредительных плакатов и знаков безопасности.

Осуществляется проведение следующих инструктажей согласно ДНАОП 0.00-4.12-99:

- вводный инструктаж, который проводится со всеми вновь принятыми на работу, независимо от их квалификации, представляет собой ознакомление с правилами внутреннего распорядка отдела, основными опасностями, правилами пожарной безопасности; инструктаж проводится службой охраны труда, факт инструктажа фиксируется в журнале вводного инструктажа;

- первичный инструктаж, который проводится на рабочем месте перед началом работы, проводится начальником отдела, факт инструктажа фиксируется в журнале первичного инструктажа, знакомит с инструкциями по охране труда, безопасными приемами работы, схемой эвакуации при пожаре;

- повторный инструктаж - инструктаж, который проводится на рабочем месте вместе со всеми работниками один раз в полугодие по программе первичного инструктажа в полном объеме, факт проведения его фиксируется в журнале регистрации первичного инструктажа.

В случае необходимости проводят внеплановый инструктаж (при введении нового оборудования, при перерывах в работе более чем на 30 дней), и целевой инструктаж.

Журнал первичного инструктажа находится на рабочем месте.

О проведении первичного, повторного, внепланового и целевого инструктажей и о допуске к работе, лицом, которым проводился инструктаж, производится запись в журнале регистрации инструктажей по вопросам охраны труда. При этом обязательные подписи как того, кого инструктировали, так и того, кто инструктировал. Страницы журнала регистрации инструктажей пронумерованы, журналы прошнурованы и скреплены печатью.

Для защиты от повышенного уровня электромагнитных излучений от экранов ЭВМ в отделе используются мониторы с защитными экранами, которые обладают наиболее полной совокупностью защитных свойств.

5.3 Производственная санитария и гигиена труда в помещении информационно-вычислительного отдела

К санитарно-гигиеническим требованиям, которые предъявляются к воздушной среде и условиям работы в отделе, относятся:

- нормы микроклиматических параметров (допустимые температура, относительная влажность, скорость движения воздуха);

- нормы естественного освещения;

- нормы освещенности рабочих мест.

Работа сотрудников отдела относится к категории 1а, к которой относятся работы, производимые сидя и сопровождающиеся не значительным физическим напряжением.

Оптимальные нормы температуры, относительной влажности, скорости движения воздуха в рабочей зоне производственных помещений для данной категории в соответствии с «Санитарными нормами производственных помещений» ДСН 3.3.6.042-99 следующие:

- температура: 22-24 0С (при температуре наружного воздуха ниже +10 0С) и 23-25 0С (при температуре наружного воздуха выше +10 0С);

- относительная влажность: 40-60%;

- скорость движения воздуха - не более 0,1 м/с.

Для поддержания в помещении перечисленных микроклиматических параметров предусмотрена система кондиционирования и отопления.

Рабочие места расположены так, что выдержаны следующие расстояния:

- от стен со световыми проемами до рабочего места - не менее 1 м;

- между боковыми поверхностями видеотерминалов - не менее 1,2 м;

Для создания благоприятных условий труда в отделе необходимо учитывать психофизиологические особенности человека. При планировании рабочего места учитываются зоны досягаемости рук администратора при конкретном расположении дисплея и клавиатуры. Клавиатуру следует размещать на столе. Дисплей рекомендуется размещать таким образом, чтобы его экран располагался в вертикальной плоскости под углом менее 150 от нормальной линии взгляда, а угол наблюдения экрана в горизонтальной плоскости не превышал 600. В ИВО для размещения ПЭВМ используются стандартные столы высотой 800 мм. Во избежание перенапряжения органов зрения соблюдено расстояние до монитора 40-50 см. установлен восьмичасовой рабочий день с перерывом через четыре часа работы. Согласно ДНАОП 0.00-1.31-99 цветовое оформление помещения, которое влияет на нервную систему человека, настроение и производительность труда, выполнено в светлых тонах, в соответствии с цветом технических средств.

В соответствии с ДСанПіН 3.3.2-007-98 через каждые 2 часа работы вводится перерыв на 15 мин.

Зрительную работу оператора ПЭВМ можно охарактеризовать как работу высокой точности, наименьший размер объекта различия составляет 0.3-0.5 мм; разряд зрительной работы - III; подразряд В. рекомендуемая освещенность для работы с экраном дисплея составляет 200 лк, а при работе с экраном в сочетании с работой над документами - 400 лк.

Рис. 5.2. Схема размещения рабочих мест в помещении.

Основной задачей по безопасности жизнедеятельности в данном дипломном проекте является расчет общего равномерного искусственного освещения помещения информационно-вычислительного отдела.

Расчет искусственного освещения происходит двумя методами:

- коэффициента использования светового потока;

- точечный.

Произведем расчет искусственного освещения помещения по методу коэффициента использования светового потока. Метод коэффициента использования светового потока предназначен для расчета общего равномерного освещения горизонтальных поверхностей при отсутствии крупных затеняющих предметов.

Для искусственного освещения помещения данного типа в основном используются люминесцентные лампы, у которых высокая световая отдача, продолжительный срок службы, малая яркость светящейся поверхности, близкий к естественному спектральный состав излучаемого света, что обеспечивает хорошую цветопередачу. Наиболее приемлемыми являются люминесцентные лампы ЛБ (белого света) мощностью 20, 40 или 80 Вт. Для исключения засветки экранов дисплеев прямыми световыми потоками светильники общего освещения располагают сбоку от рабочего места, параллельно линии зрения оператора и стене с окнами. Такое размещение светильников позволяет производить их последовательное включение в зависимости от величины естественной освещенности и исключает раздражение глаз чередующимися полосами света и тени, возникающее при поперечном расположении светильников.

Рассчитаем параметры искусственного освещения.

Размеры помещения:

А =4м - длина;

В = 3,5м - ширина;

Н = 3м - высота.

Коэффициент запаса светильников Кз = 1.5.

Компьютер установлен на столе, уровень рабочей поверхности над полом hраб составляет 0.8м. Расстояние от светильника до перекрытия hсв составляет 0м. В помещении вычислительного центра искусственное освещение выполнено светильниками типа ЛПО 06, четырехламповыми мощностью 20 Вт с люминесцентными лампами ЛБ 20.

Коэффициенты отражения светового потока от потолка, стен и пола соответственно принимается п=70%, с =50%, пола =30%, так как стены и потолок светлого цвета. Пользуясь справочными данными для найденных параметров определен коэффициент использования светового потока равный 0,55.

Длина светильника 0,6м.

Тогда высота подвеса светильников над рабочей поверхностью h составляет: h = Н - hраб - hсв = 3 м - 0.8м - 0м = 2.2м.

Определим расстояние между рядами светильников по формуле

L=h, (5.1)

где , выгоднейшая эффективность. Для используемого светильника = 1,31,4. Расстояние между соседними рядами светильников составит:

L=2.2M 1.4 = 3,08м 3,1 м. При ширине помещения 3,5м посчитаем количество рядов светильников по формуле

n=B/L, (5.2)

где n -- количество рядов светильников; В - ширина помещения.

Согласно формуле (2) количество рядов светильников составит

n = 3,5/3,1 = 1 ряд.

Рассчитаем расстояние от светильника до стены

l = (0.3 0.5) L = (0.3 0.5) 3,1 = 0,93 1,55 = 1,45

Индекс помещения рассчитаем по формуле

i=(АВ)/(h(A+B)), (5.3)

i = (43,5)/(2.2(4+3,5)) =0.8.

В зависимости от применяемых светильников, индекса помещения, коэффициента отражения светового потока значение коэффициента использования светового потока составляет 0,55.

Количество светильников, необходимое для создания в рабочей среде нормирующей освещенности определяется по формуле

N=(EнSZK)/(Fn), (5.4)

где Ен = Emin - нормируемая освещенность, Eн = 400 лк;

S - площадь помещения, S - 14 м?;

Z - коэффициент неравномерности освещения, Z = 1.15;

К - коэффициент запаса, К = 1.5;

F - световой поток светильника, световой поток для ЛБ-20 составит 1100 лм, тогда световой поток, излучаемый светильником, составит F= 41100= 4400 лм. Согласно формуле (4) необходимое количество светильников составит

N = (400141.151.5)/(0.5544001) = 3.9 4 шт.

Согласно расчету светильники располагаются в один ряд по 4 шт. При длине одного светильника типа ЛПО-06 с лампами ЛБ-20 длина светильника 0,6м их общая длина составит N*а = 0,64 = 2.4 м, а расстоянии между светильниками можно рассчитать по формуле:

R=(A - N L)/(N + 1) = (4 - 2,4)/5 = 0,3м.

5.4 Пожарная профилактика помещения

Пожарная профилактика - это комплекс организационных и технических мероприятий, направленных на обеспечение безопасности людей, на предотвращение пожара, ограничения его распространения, а также на создание условий для успешного тушения пожара.

По характеристике веществ и материалов, находящихся в помещении, отдел можно отнести к категории В по СНИП 2.09.02-85. Здание выполнено из строительных конструкций II степени огнестойкости (кирпичные стены).

Причиной пожара в помещении могут быть:

- короткое замыкание электропроводки;

- неисправность электрооборудования;

- нагрев проводников;

- курение в неположенном месте;

- нарушение правил пожарной безопасности;

- повышение температуры внутри помещения.

Для предупреждения пожаров в отделе в соответствии с ГОСТ 12.1.004-91 предусматриваются следующие мероприятия:

- проведение инструктажей по пожарной безопасности;

- надзор за соблюдением сотрудниками установленного режима эксплуатации электрических сетей и оборудования;

- надзор за средствами пожаротушения;

- запрещение применения открытого огня и курения в помещении;

- осуществление контроля сопротивления изоляции.

Для ликвидации пожара на начальной стадии в отделе применяются первичные средства пожаротушения - два ручных углекислотных огнетушителя ОУ-2.(В соответствии с ДНАОП 0.00-1.31-99- 2 шт. на каждые 20 м площади)

Для обнаружения пожара в его начальной стадии и оповещение службы пожарной охраны о времени и месте возникновения пожара, а также для тушения пожара, в отделе используется соответственно автоматическая пожарная сигнализация и автоматическая установка пожаротушения.

В помещении информационно-вычислительного отдела установлены 2 дымовых оповестителя типа СПД3, 1 оповеститель на 150кв/м, но не менее двух на помещение.

Оповестители пожарной сигнализации формируются в шлейфы и подключаются к пульту - концентратору пожарной сигнализации. При срабатывании сигнализации пульт выдает сигнал тревоги на пульт централизованного наблюдения в пожарное депо города.

Для молниезащиты здание университета снабжено молниеотводом.

Схема эвакуации при пожаре представлена на рисунке 5.4.

Рис. 5.4. Схема эвакуации при пожаре.

5.5 Защита окружающей среды

Анализ методик реализации Firewalls не оказывает отрицательного воздействия на окружающую среду, поэтому вопрос защиты окружающей среды в дипломной работе не рассматривается.

5.6 Гражданская оборона

Наиболее вероятными для существующих условий чрезвычайная ситуация (ЧС) может быть пожар, которая по характеру действий относится ЧС техногенной и по масштабам действий объектного уровня. ЧС объектного уровня происходит на территории объекта, или на самом объекте и последствия которой, не выходят за его границы и санитарно защитные зоны.

Поражающими факторами является огонь и высокая температура.

Основными способами защиты служащих является:

- эвакуация работников и служащих из очагов поражения в безопасные районы;

Схема эвакуации при пожаре представлена на рисунке 5.4

- использование средств индивидуальной защиты (противогазы, фильтрующие воздух из окружающей среды ГП-5)

К медицинским средствам относятся:

- АИ-2- индивидуальная аптечка;

- ППИ- пакет перевязочный индивидуальный.

6. Экономическая часть

6.1 Краткое описание

В дипломной работе описаны основные методики реализации Firewalls в операционных системах WindowsNT и Linux. Исследуется и сравнивается сетевая архитектура данных операционных систем.

6.2. Расчет расходов на маркетинг

Таблица 6.1 Расчет затрат на маркетинг

Наименование маркетингових

мероприятий

Стоимость выполнения мероприятия (грн.)

Данные по разработке товара

Данные по товарам -аналогам

1. Характер и качество исследование рынка

2. Формирование сбытовой сети и каналов продвижение товару.

3. Планирование затрат на рекламу

3.1 Реклама в сети Internet

150

Всего

М = 150

-

6.3 Расчет затрат на сбыт

Таблица 6.2 Расчет затрат на сбыт (коммерческую поддержку)

Наименование сбытовых

мероприятий

Стоимость выполнения (грн.)

Данные по разработке товару

Данные по товарам - аналогам

Мет. 1

1. Способы удовлетворения рекламации

1.1 По адресу пользователя

2. Форма снабжения:

2.1 Индивидуальные поставки по запросам, заказам

3. Условия и формы платежа

3.1 Расчет наличными

50

50

350

ВСЕГО

Sb=450

6.4 Расчет расходов на разработку

Таблица 6.3 Расчет расходов на разработку

Но-мер

Наименование

Ед. Измер.

Цена ед. Измер.

Необх. Количество на разработку

Цена материалов на разработку

1

Литература

Шт.

40

3

120

2

Диски

Шт.

1

10

10

3

Расх. Материалы

Шт.

1

50

50

Всего Mт(р)=

180

Таблица 6.4 Расчет фонда оплати труду (ФОТ) на этапе разработки

Наименование должностей

Количество специалистов

Время занятости, часов.

Часовая тарифная ставка, грн/год.

Фонд оплати труду, грн.

1

Системный администратор

1

30

20

600

2

Консультант по БЖД

1

10

10

100

3

Консультант по ЕК

1

5

10

50

Вместе:

ФОТ(р)=

=750

Расчет ФОТ(р) с начислениями:

ФОТ(р) нач = ФОТ(р) ·(1+П) =1029 (6.1)

где П - налоги и платежи на ФОТ (согласно действующему законодательству на данный год П=0.372; 32%- к Пенсионному фонду, 4%- социальное страхование, 1.5%- платежи в фонд безработицы).

НОУ(р)= 80 + 450 = 530 грн (6.2)

Таблица 6.5 Расходы на разработку Зниокр

Наименование статей

Обозначение

Сумма (грн.)

1

Материалы

Мт(р)

180

2

Фонд оплати труда с начислениями

ФОП(р) нар

1029

3

Командировочные расходы

КОМ

-

4

Стоимость примененных средств ИТ

НОУ(р)

530

5

Вместе расходы на разработку

Зниокр=

1739

6.5 Расчет расходов на тиражирование единицы товара

Таблица 6.6 Расчет стоимости материалов, сырья, покупных изделий использованных при тиражировании единицы товара, Mт(т)

Наименование

Ед. измерен.

Цена ед. измерен.

Необходимое количество на ед. тиража

Цена

материалов на ед. тиража

1

Бумага, А4

шт.

0.03

80

2.4

2

Диски (CD)

шт.

1

1

1

3

Расходные материалы.

шт.

10

0.001

0.01

Всего

Мт1 (т) =3.41

Таблица 6.7 Расчет фонда оплати труда (ФОТ) на тиражирование единицы товара

Наименование

должностей

Количество

специалистов

Время занятости, часов.

Часовая тарифная ставка, грн/час.

Фонд оплати труду, грн

1

Оператор ПК

1

0.25

10

2,5

Вместе:

ФОТ1 (т)=2,5

Расчет ФОТ с начислениями:

ФОТ(т)нач= ФОТ1 (т) (1+П)=2,5(1+0.372)=3.43, (6.3)

где, П - налоги и платежи на ФОТ (согласно с действующим законодательством)

Стоимость применения средств ИТ, отмеченная в "Протоколе" на этапе тиражирование и для оформления результатов тиражирования на единицу тиража в этом расчете, должна быть также учтена.

На основании данных "Протокола" делаем расчет только сменной части суммы примененных средств ИТ:

НОУ(т)= 10 грн. (6.4)

Общая сумма расходов на тиражирование, таким образом, составляет (Таблица.6.8):

Таблица 6.8 Расходы на тиражирование

Наименование статей

Обозначение

Сумма (грн.)

1

Материалы

Мт(т)

3.41

2

Фонд оплати труда с начислениями

ФОТ(т) нач

3.43

3

Стоимость примененных средств ИТ

НОУ(т)

10

4

Вместе расходы на тиражирование

З1тираж

16,84

6.6 Расчет полных расходов

Таблица 6.9 Калькуляция полных постоянных расходов (грн)

Шифр строк

Наименование статей калькуляции

Обозначение

На объем

01

Расходы на маркетинг

М

150

02

Работы и услуги производственного характера от сторонних предприятий и организаций

СУ

130

03

Расходы на сбыт

Sb

450

Амортизационные расходы

Аморт

270

04

Командировочные расходы

Ком

-

05

Сумма постоянных платежей и налогов

Сonst

20

07

Расходы на разработку

Зниокр

1739

08

Расходы на тиражирование

Зтираж.

16,84

09

Расходы на приобретение средств ИТ, использованных для оформления

Зоф(с)

10

10

Накладные и другие расходы

ДЗ

51

11

Сумма вместе

Сумм

2836,84

12

Общепроизводственные расходы

Роп

1134,74

13

Общехозяйственние расходы

Рох

567,37

14

Полные постоянные расходы

S(с)

4538,94

Расчет коммунального налога

, (6.5)

где ПЕРС = 3+1=4

НМ = 17

Расчет ориентированной величины предельного значения объема тиражирования не делаем, так как аналогов на рынке нет.

Переменные расходы на полный объем тиражирования:

S(v)= С1тираж* Rnev. (6.6)

S(v)= 16,84* 10=168,4 грн.

Постоянные расходы на единицу тиража:

S1(c)= S(с) / Rnev. (6.7)

S1(c)= 4538,944/ 10=453,89 грн.

Полные расходы на единицу тиража составляет:

S=S1(c)+ С1тираж. (6.8)

S=453,89 +16,84=470,73 грн

Полные расходы на весь объем тиража составляет:

S=S1(c)+ С1тираж.

S=4538,94 +168,4=4707,34 грн

6.7 Планирование пассива баланса

Поскольку данных о части средств, которая выделяется собственником предприятие на покрытие ранее обоснованных расходов нет, то используем данные таблицы «Исходных данных» и получаем, что:

ЗС = 4707,344 - 2353,67 = 2353,67 грн.

Без учета в данном расчете кредиторской задолженности (т.е. КЗ = 0) получаем размер финансовых расходов по кредитованию:

ФИ=ЗС*СРСП. (6.9)

ФИ=2353,67 * 0,16 = 376,59 грн.

6.8 Планирование необходимой чистой прибыли и ожидаемого изменения актива

Для определения размера желательной чистой прибыли ЧПж необходимо, прежде всего, установить сколько средств в будущем периоде необходимо иметь для развития производства РЗ, т.е. на маркетинг, на развитие собственно производственной базы, на привлечение новой рабочей силы и т.д. Во-вторых, необходимо установить желательный размер чистой прибыли на одну акцию ЧПА и количество акций предприятия К в будущем периоде. Умножение ЧПА*К=Потр будет представлять собой сумму средств, которые будут направлены на потребление. В случае, если предприятие не является акционерным, тогда можно эту же сумму направить на потребление при других способах распределения (например, в виде бонусов, или премий, создать резервный фонд на случай форс-мажорных обстоятельств).

Например, пусть РЗ=1000 грн, ЧПА= 1грн и количество акций К=100.

Тогда

ЧПж=1000+1*100=1100 грн.

Рентабельность собственных средств будет равнять:

(6.10)

Норма распределения тогда будет составлять:

(6.11)

(6.12)

ВТР=РСС*(1-НР). (6.13)

ВТР=46,73%*(1-0,07)=43,46%

Соответственно, в таком случае актив предприятия возрастет и будет составлять

Анов=А*(1+ВТР) (6.14)

Анов=4707,34*(1+0,435)= 6755,0329 грн

Таблица 6.10 - Основные результаты ТЭО

Наиме-нован. разраб.

Зада-ный объем тира-жа, R

Изме-нен. объем тира-жа, Rnev

Цена, Ц (грн.)

ЭР, %

РСС, %

Нор-ма ДС, %

ЕФР, %

ЗС/СС

СВОР

ЗСн/ССн

ЗФП

Техн.. докум. (анализ существ-вующ. мето-дик реа-лиз. Fire-walls)

10

10

771

72

46

66

42

1

6,86

0,4

2950

Выводы

В данной работе были рассмотрены основные теоретические моменты, касательно методов реализации Firewalls в операционных системах WindowsNT и Linux. Был проведен анализ программной реализации firewalls. Также рассмотрен сетевой стек протоколов в данных операционных системах.

Сама тема является очень актуальной. Сейчас уже не возможно представить не только крупное предприятие, но и даже обычного домашнего пользователя без такой защиты от сетевых проникновений, как firewalls.

Считаю, что тема, поднятая в данной работе будет интересна как разработчикам сетевой защиты, так и обычным пользователям. В общем, всем кому не безразлична собственная безопасности при работе как в небольшой сети, так и при общении со всем окружающим миром посредствам Интернет и т.п.

В ходе анализа существующих методик реализации Firewalls были выделены основные механизмы, были отмечены их сильные и слабые стороны. Так для семейства WindowsNT рассмотрены такие способы: TDI-filter driver, NDIS Intermediate Driver, NDIS Hooking Filter Driver, Minipirt NIC driver. Детально был исследован open-source tdifw Firewall.

Для операционной системы Linux был рассмотрен модуль Netfilter, на базе котрого можно реализовать фильтр пакетов. Был приведен пример с подробным описанием реализации подобного фильтра.

В разделе «Безопасность жизни и деятельности человека» было показано, что размещение технических средств в информационно-вычислительном отделе было произведено с учетом норм техники безопасности. Также в этом разделе был произведен расчет общего равномерного искусственного освещения информационно-вычислительного отдела.

В экономической части диплома рассмотрена экономическая целесообразность выпуска конечного продукта, рассчитан объем выпуска, при котором данная разработка начнет приносить прибыль - 6 шт.

Приложение А

Исходные коды tdi_fw firewall

Файл Tdi_fw.c

/*

* TDI-based open source personal firewall (TdiFw)

*/

#include <ntddk.h>

#include <tdikrnl.h>

#include "sock.h"

#include "conn_state.h"

#include "dispatch.h"

#include "filter.h"

#include "memtrack.h"

#include "obj_tbl.h"

#include "tdi_fw.h"

#define IOCTL_TRANSFER_TYPE(ioctl) ((ioctl) & 3)

/* context for tdi_skip_complete */

typedef struct {

PIO_COMPLETION_ROUTINE old_cr; /* old (original) completion routine */

PVOID old_context; /* old (original) parameter for old_cr */

PIO_COMPLETION_ROUTINE new_cr; /* new (replaced) completion routine */

PVOID new_context; /* new (replaced) parameter for new_cr */

PFILE_OBJECT fileobj; /* FileObject from IO_STACK_LOCATION */

PDEVICE_OBJECT new_devobj; /* filter device object */

UCHAR old_control; /* old (original) irps->Control */

} TDI_SKIP_CTX;

/* prototypes */

static NTSTATUS DeviceDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp);

static VOID OnUnload(IN PDRIVER_OBJECT DriverObject);

#ifndef USE_TDI_HOOKING

static NTSTATUS c_n_a_device(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT *fltobj,

PDEVICE_OBJECT *oldobj, wchar_t *devname);

static void d_n_d_device(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT oldobj,

PDEVICE_OBJECT fltobj);

#else

static NTSTATUS hook_tcpip(DRIVER_OBJECT *old_DriverObject, BOOLEAN b_hook);

static NTSTATUS get_device_object(wchar_t *name, PDEVICE_OBJECT *devobj);

#endif

static NTSTATUS tdi_skip_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);

/* device objects for: */

PDEVICE_OBJECT

g_tcpfltobj = NULL, // \Device\Tcp

g_udpfltobj = NULL, // \Device\Udp

g_ipfltobj = NULL, // \Device\RawIp

g_devcontrol = NULL, // control device (exclusive access only!)

g_devnfo = NULL; // information device

BOOLEAN g_got_log = FALSE; // got log app

#ifndef USE_TDI_HOOKING

// original device objects

PDEVICE_OBJECT g_tcpoldobj, g_udpoldobj, g_ipoldobj;

#else

// original driver object

DRIVER_OBJECT g_old_DriverObject;

BOOLEAN g_hooked = FALSE;

#endif

/* for IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER */

typedef NTSTATUS TCPSendData_t(IN PIRP Irp, IN PIO_STACK_LOCATION IrpSp);

static TCPSendData_t *g_TCPSendData = NULL;

static TCPSendData_t new_TCPSendData;

/* global traffic stats */

unsigned __int64 g_traffic[TRAFFIC_MAX];

KSPIN_LOCK g_traffic_guard;

/* initialization */

NTSTATUS

DriverEntry(IN PDRIVER_OBJECT theDriverObject,

IN PUNICODE_STRING theRegistryPath)

{

NTSTATUS status = STATUS_SUCCESS;

int i;

UNICODE_STRING name, linkname;

memtrack_init();

eInitializeSpinLock(&g_traffic_guard);

#ifdef USE_TDI_HOOKING

KdPrint(("[tdi_fw] WARNING! Using unstable working mode: TDI hooking!\n"));

#endif

status = ot_init();

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: ot_init: 0x%x\n", status));

goto done;

}

status = filter_init();

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: filter_init: 0x%x\n", status));

goto done;

}

status = conn_state_init();

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: conn_state_init: 0x%x\n", status));

goto done;

}

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

theDriverObject->MajorFunction[i] = DeviceDispatch;

#if DBG

// register UnLoad procedure

theDriverObject->DriverUnload = OnUnload;

#endif

/* create control device and symbolic link */

RtlInitUnicodeString(&name, L"\\Device\\tdifw");

status = IoCreateDevice(theDriverObject,

0,

&name,

0,

0,

TRUE, // exclusive!

&g_devcontrol);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: IoCreateDevice(control): 0x%x!\n", status));

goto done;

}

RtlInitUnicodeString(&linkname, L"\\??\\tdifw");

status = IoCreateSymbolicLink(&linkname, &name);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: IoCreateSymbolicLink: 0x%x!\n", status));

goto done;

}

RtlInitUnicodeString(&name, L"\\Device\\tdifw_nfo");

status = IoCreateDevice(theDriverObject,

0,

&name,

0,

0,

FALSE, // not exclusive!

&g_devnfo);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: IoCreateDevice(nfo): 0x%x!\n", status));

goto done;

}

RtlInitUnicodeString(&linkname, L"\\??\\tdifw_nfo");

status = IoCreateSymbolicLink(&linkname, &name);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: IoCreateSymbolicLink: 0x%x!\n", status));

goto done;

}

#ifndef USE_TDI_HOOKING

status = c_n_a_device(theDriverObject, &g_tcpfltobj, &g_tcpoldobj, L"\\Device\\Tcp");

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: c_n_a_device: 0x%x\n", status));

goto done;

}

status = c_n_a_device(theDriverObject, &g_udpfltobj, &g_udpoldobj, L"\\Device\\Udp");

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: c_n_a_device: 0x%x\n", status));

goto done;

}

status = c_n_a_device(theDriverObject, &g_ipfltobj, &g_ipoldobj, L"\\Device\\RawIp");

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: c_n_a_device: 0x%x\n", status));

goto done;

}

#else /* USE_TDI_HOOKING */

/* get device objects for tcp/udp/ip */

status = get_device_object(L"\\Device\\Tcp", &g_tcpfltobj);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: get_device_object(tcp): 0x%x\n", status));

goto done;

}

status = get_device_object(L"\\Device\\Udp", &g_udpfltobj);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: get_device_object(udp): 0x%x\n", status));

goto done;

}

status = get_device_object(L"\\Device\\RawIp", &g_ipfltobj);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: get_device_object(ip): 0x%x\n", status));

goto done;

}

/* hook tcpip */

status = hook_tcpip(&g_old_DriverObject, TRUE);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: hook_driver: 0x%x\n", status));

goto done;

}

g_hooked = TRUE;

#endif /* USE_TDI_HOOKING */

status = STATUS_SUCCESS;

done:

if (status!= STATUS_SUCCESS) {

// cleanup

OnUnload(theDriverObject);

}

return status;

}

/* deinitialization */

VOID

OnUnload(IN PDRIVER_OBJECT DriverObject)

{

#ifndef USE_TDI_HOOKING

d_n_d_device(DriverObject, g_tcpoldobj, g_tcpfltobj);

d_n_d_device(DriverObject, g_udpoldobj, g_udpfltobj);

d_n_d_device(DriverObject, g_ipoldobj, g_ipfltobj);

#else

if (g_hooked)

hook_tcpip(&g_old_DriverObject, FALSE);

#endif

// delete control device and symbolic link

if (g_devcontrol!= NULL) {

UNICODE_STRING linkname;

RtlInitUnicodeString(&linkname, L"\\??\\tdifw");

IoDeleteSymbolicLink(&linkname);

IoDeleteDevice(g_devcontrol);

}

// delete info device and symbolic link

if (g_devnfo!= NULL) {

UNICODE_STRING linkname;

RtlInitUnicodeString(&linkname, L"\\??\\tdifw_nfo");

IoDeleteSymbolicLink(&linkname);

IoDeleteDevice(g_devnfo);

}

filter_free();

ot_free();

conn_state_free(); // call after ot_free()

memtrack_free();

}

#ifndef USE_TDI_HOOKING

/* create & attach device */

NTSTATUS

c_n_a_device(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT *fltobj, PDEVICE_OBJECT *oldobj,

wchar_t *devname)

{

NTSTATUS status;

UNICODE_STRING str;

/* create filter device */

status = IoCreateDevice(DriverObject,

0,

NULL,

FILE_DEVICE_UNKNOWN,

0,

TRUE,

fltobj);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] c_n_a_device: IoCreateDevice(%S): 0x%x\n", devname, status));

return status;

}

(*fltobj)->Flags |= DO_DIRECT_IO;

RtlInitUnicodeString(&str, devname);

status = IoAttachDevice(*fltobj, &str, oldobj);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] DriverEntry: IoAttachDevice(%S): 0x%x\n", devname, status));

return status;

}

KdPrint(("[tdi_fw] DriverEntry: %S fileobj: 0x%x\n", devname, *fltobj));

return STATUS_SUCCESS;

}

/* detach & delete device */

void

d_n_d_device(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT oldobj, PDEVICE_OBJECT fltobj)

{

/*

* Detaching of a filter driver at runtime is a high-risk deal

*/

#if 1

// for extremal guys only!

if (oldobj!= NULL && fltobj!= NULL) {

int i;

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

DriverObject->MajorFunction[i] = g_tcpoldobj->DriverObject->MajorFunction[i];

}

#endif

if (oldobj!= NULL)

IoDetachDevice(oldobj);

if (fltobj!= NULL)

IoDeleteDevice(fltobj);

}

#else /* USE_TDI_HOOKING */

/* hook/unhook driver */

NTSTATUS

hook_tcpip(DRIVER_OBJECT *old_DriverObject, BOOLEAN b_hook)

{

UNICODE_STRING drv_name;

NTSTATUS status;

PDRIVER_OBJECT new_DriverObject;

int i;

RtlInitUnicodeString(&drv_name, L"\\Driver\\Tcpip");

status = ObReferenceObjectByName(&drv_name, OBJ_CASE_INSENSITIVE, NULL, 0,

IoDriverObjectType, KernelMode, NULL, &new_DriverObject);

if (status!= STATUS_SUCCESS) {

KdPrint(("[tdi_fw] hook_driver: ObReferenceObjectByName\n"));

return status;

}

for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) {

if (b_hook) {

old_DriverObject->MajorFunction[i] = new_DriverObject->MajorFunction[i];

new_DriverObject->MajorFunction[i] = DeviceDispatch;

} else

new_DriverObject->MajorFunction[i] = old_DriverObject->MajorFunction[i];

}

return STATUS_SUCCESS;

}

/* get device object by its name */

NTSTATUS

get_device_object(wchar_t *name, PDEVICE_OBJECT *devobj)

{

UNICODE_STRING str;

NTSTATUS status;

PFILE_OBJECT fileobj;

RtlInitUnicodeString(&str, name);

status = IoGetDeviceObjectPointer(&str, FILE_ALL_ACCESS, &fileobj, devobj);

if (status == STATUS_SUCCESS)

ObDereferenceObject(fileobj);

return status;

}

#endif /* USE_TDI_HOOKING */

/* dispatch */

NTSTATUS

DeviceDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP irp)

{

PIO_STACK_LOCATION irps;

NTSTATUS status;

// sanity check

if (irp == NULL) {

KdPrint(("[tdi_fw] DeviceDispatch:!irp\n"));

return STATUS_SUCCESS;

}

irps = IoGetCurrentIrpStackLocation(irp);

if (DeviceObject == g_tcpfltobj || DeviceObject == g_udpfltobj ||

DeviceObject == g_ipfltobj) {

/*

* This IRP is for filtered device

*/

int result;


Подобные документы

  • История создания и общая характеристика операционных систем Windows Server 2003 и Red Hat Linux Enterprise 4. Особенности установки, файловых систем и сетевых инфраструктур данных операционных систем. Использование протокола Kerberos в Windows и Linux.

    дипломная работа [142,7 K], добавлен 23.06.2012

  • Основные сходства и отличия операционных систем Microsoft Windows и GNU/Linux: конфигурации, цена и широта технической поддержки; оценка стоимости владения и статистика использования на настольных компьютерах; простота инсталляции и наличие драйверов.

    курсовая работа [294,9 K], добавлен 12.05.2011

  • Назначение серверных операционных систем. Сравнительный анализ серверных операционных систем Windows и Linux и сравнение их по важным показателям таким как: пользовательский графический интерфейс, безопасность, стабильность работы, возможность и цена.

    курсовая работа [50,1 K], добавлен 03.07.2012

  • Назначение команды "diskcomp". Текст и запуск командного файла. Сравнение команды в Windows 7 и Windows XP. Разработка файла-сценария в ОС Linux. Создание файла в подкаталоге. Создание файла "oglavlenie.txt" с отсортированным по времени списком файлов.

    курсовая работа [1,6 M], добавлен 22.08.2012

  • Основные понятия об операционных системах. Виды современных операционных систем. История развития операционных систем семейства Windows. Характеристики операционных систем семейства Windows. Новые функциональные возможности операционной системы Windows 7.

    курсовая работа [60,1 K], добавлен 18.02.2012

  • Понятие и внутренняя структура операционных систем, их классификация и разновидности, предъявляемые требования, этапы становления и развития, функциональные особенности. Описание и назначение базовых компьютерных систем: DOS, Windows, Linux, Mac.

    курсовая работа [44,9 K], добавлен 14.12.2013

  • История развития операционных систем семейства Windows и основные понятия системного администрирования. Определение востребованности операционных систем Windows, сравнительная характеристика их функции и возможностей, особенности применения на практике.

    курсовая работа [38,5 K], добавлен 08.05.2011

  • Основные моменты истории операционных систем, связывающих аппаратное обеспечение и прикладные программы. Характеристика операционной системы Microsoft Windows Seven, анализ операционной системы Linux. Преимущества и недостатки каждой операционной системы.

    курсовая работа [63,0 K], добавлен 07.05.2011

  • Основные классификации операционных систем. Операционные системы семейства OS/2, UNIX, Linux и Windows. Разграничение прав доступа и многопользовательский режим работы. Пользовательский интерфейс и сетевые операции. Управление оперативной памятью.

    реферат [22,8 K], добавлен 11.05.2011

  • Графические интерфейсы и расширения для DOS. История развития операционной системы Microsoft Windows. Новшества ее современных версий: пользовательский интерфейс, языковая интеграция, системы защиты. Хронология развития и архитектура системы GNU/Linux.

    реферат [38,9 K], добавлен 25.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.