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

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

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

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

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

struct completion completion;

memset(&completion, 0, sizeof(completion));

// Analyze MajorFunction

switch (irps->MajorFunction) {

case IRP_MJ_CREATE: /* create fileobject */

result = tdi_create(irp, irps, &completion);

status = tdi_dispatch_complete(DeviceObject, irp, result,

completion.routine, completion.context);

break;

case IRP_MJ_DEVICE_CONTROL:

KdPrint(("[tdi_fw] DeviceDispatch: IRP_MJ_DEVICE_CONTROL, control 0x%x for 0x%08X\n",

irps->Parameters.DeviceIoControl.IoControlCode, irps->FileObject));

if (KeGetCurrentIrql() == PASSIVE_LEVEL) {

/*

* try to convert it to IRP_MJ_INTERNAL_DEVICE_CONTROL

* (works on PASSIVE_LEVEL only!)

*/

status = TdiMapUserRequest(DeviceObject, irp, irps);

} else

status = STATUS_NOT_IMPLEMENTED; // set fake status

if (status!= STATUS_SUCCESS) {

void *buf = (irps->Parameters.DeviceIoControl.IoControlCode == IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER) ?

irps->Parameters.DeviceIoControl.Type3InputBuffer: NULL;

// send IRP to original driver

status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW, NULL, NULL);

if (buf!= NULL && status == STATUS_SUCCESS) {

g_TCPSendData = *(TCPSendData_t **)buf;

KdPrint(("[tdi_fw] DeviceDispatch: IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER: TCPSendData = 0x%x\n",

g_TCPSendData));

*(TCPSendData_t **)buf = new_TCPSendData;

}

break;

}

// don't break! go to internal device control!

case IRP_MJ_INTERNAL_DEVICE_CONTROL: {

/*

* Analyze ioctl for TDI driver

*/

int i;

for (i = 0; g_tdi_ioctls[i].MinorFunction!= 0; i++)

if (g_tdi_ioctls[i].MinorFunction == irps->MinorFunction) {

#if DBG

// print description

KdPrint(("[tdi_fw] DeviceDispatch: %s (0x%x) for 0x%x\n",

g_tdi_ioctls[i].desc,

irps->MinorFunction,

irps->FileObject));

#endif

if (g_tdi_ioctls[i].fn == NULL) {

// send IRP to original driver

status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW,

NULL, NULL);

break;

}

// call dispatch function

result = g_tdi_ioctls[i].fn(irp, irps, &completion);

// complete request

status = tdi_dispatch_complete(DeviceObject, irp, result,

completion.routine, completion.context);

break;

}

// if dispatch function hasn't been found

if (g_tdi_ioctls[i].MinorFunction == 0) {

// send IRP to original driver

status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW, NULL, NULL);

}

break;

}

result = tdi_cleanup(irp, irps, &completion);

status = tdi_dispatch_complete(DeviceObject, irp, result,

completion.routine, completion.context);

break;

case IRP_MJ_CLOSE:

KdPrint(("[tdi_fw] DeviceDispatch: IRP_MJ_CLOSE fileobj 0x%x\n", irps->FileObject));

// passthrough IRP

status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW,

completion.routine, completion.context);

break;

default:

KdPrint(("[tdi_fw] DeviceDispatch: major 0x%x, minor 0x%x for 0x%x\n",

irps->MajorFunction, irps->MinorFunction, irps->FileObject));

// passthrough IRP

status = tdi_dispatch_complete(DeviceObject, irp, FILTER_ALLOW,

completion.routine, completion.context);

}

} else if (DeviceObject == g_devcontrol) {

/*

* this IRP is for control device

*/

// set default status

status = STATUS_SUCCESS;

if (irps->MajorFunction == IRP_MJ_CREATE) {

// initialize for user-mode part (exclusive access - 1 user-mode logging part)

filter_init_2();

g_got_log = TRUE;

// cleanup for user-mode logging part

filter_free_2();

g_got_log = FALSE;

} if (irps->MajorFunction == IRP_MJ_DEVICE_CONTROL) {

/*

* control request

*/

/* get original device object by filtered */

PDEVICE_OBJECT

get_original_devobj(PDEVICE_OBJECT flt_devobj, int *proto)

{

#ifndef USE_TDI_HOOKING

PDEVICE_OBJECT result;

int ipproto;

if (flt_devobj == g_tcpfltobj) {

result = g_tcpoldobj;

ipproto = IPPROTO_TCP;

} else if (flt_devobj == g_udpfltobj) {

result = g_udpoldobj;

ipproto = IPPROTO_UDP;

} else if (flt_devobj == g_ipfltobj) {

result = g_ipoldobj;

ipproto = IPPROTO_IP;

} else {

KdPrint(("[tdi_fw] get_original_devobj: Unknown DeviceObject 0x%x!\n",

flt_devobj));

ipproto = IPPROTO_IP; // what else?

result = NULL;

}

if (result!= NULL && proto!= NULL)

*proto = ipproto;

return result;

#else /* USE_TDI_HOOKING */

// just stub for original devobj; return proto by devobj

int ipproto;

if (flt_devobj == g_tcpfltobj)

ipproto = IPPROTO_TCP;

else if (flt_devobj == g_udpfltobj)

ipproto = IPPROTO_UDP;

else if (flt_devobj == g_ipfltobj)

ipproto = IPPROTO_IP;

else {

KdPrint(("[tdi_fw] get_original_devobj: Unknown DeviceObject 0x%x!\n",

flt_devobj));

ipproto = IPPROTO_IP; // what else?

flt_devobj = NULL;

}

if (proto!= NULL)

*proto = ipproto;

return flt_devobj;

#endif

}

/*

* Completion routines must call this function at the end of their execution

*/

NTSTATUS

tdi_generic_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)

{

KdPrint(("[tdi_fw] tdi_generic_complete: STATUS = 0x%x\n", Irp->IoStatus.Status));

if (Irp->PendingReturned) {

KdPrint(("[tdi_fw] tdi_generic_complete: PENDING\n"));

IoMarkIrpPending(Irp);

}

return STATUS_SUCCESS;

}

/*

* for IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER

*/

NTSTATUS

new_TCPSendData(IN PIRP Irp, IN PIO_STACK_LOCATION IrpSp)

{

struct completion completion;

int result;

KdPrint(("[tdi_fw] new_TCPSendData\n"));

#if 1

memset(&completion, 0, sizeof(completion));

result = tdi_send(Irp, IrpSp, &completion);

// complete request

return tdi_dispatch_complete(IrpSp->DeviceObject, Irp, result,

completion.routine, completion.context);

#else

return g_TCPSendData(Irp, IrpSp);

#endif

}

/*

* deny stub for dispatch table

*/

int

tdi_deny_stub(PIRP irp, PIO_STACK_LOCATION irps, struct completion *completion)

{

KdPrint(("[tdi_fw] tdi_deny_stub!\n"));

return FILTER_DENY;

}

Размещено на Allbest.ru


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

  • История создания и общая характеристика операционных систем 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-файлы представлены только в архивах.
Рекомендуем скачать работу.