Мегаобучалка Главная | О нас | Обратная связь


Linux windows описание



2015-12-07 321 Обсуждений (0)
Linux windows описание 0.00 из 5.00 0 оценок




Министерство образования и науки Украины

Севастопольский национальный технический

Университет

 

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к лабораторному практикуму

по дисциплине

"Глобальные информационные системы и сети"

для студентов дневной и заочной форм обучения

специальности 8.080401 "Информационные управляющие

системы и технологии"

 

 

Севастополь


УДК 681.06 + 658.5

Методические указания к лабораторному практикуму по дисциплине «Глобальные информационные системы и сети» для студентов дневной и заочной форм обучения специальности 8.080401 «Информационные управляющие системы и технологии» /Сост. К. В. Кротов, И. К. Гущин. – Севастополь: Изд-во СевНТУ, 2007. – 52с.

 

Методические указания предназначены для проведения лабораторных занятий по дисциплине «Глобальные информационные системы и сети». Целью настоящих методических указаний является изучение и исследование средств обмена, предоставленных библиотекой Winsock и ее возможностей по программному формированию пакетов различных протоколов компьютерных сетей, а также исследование возможностей нестандартного использования протокола ARP.

 

 

Методические указания составлены в соответствии с требованиями программы дисциплины «Глобальные информационные системы и сети» для студентов специальности 8.080401 и утверждены на заседании кафедры Информационных систем, протокол № 12 от 11.04.2007.

 

Допущено учебно-методическим центром СевНТУ в качестве методических указаний.

 

Рецензент Крамарь В.А., канд. техн. наук, доцент кафедры ТК.


СОДЕРЖАНИЕ

ОБЩИЕ ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ. 4

ЛАБОРАТОРНАЯ РАБОТА №1. 5

ЛАБОРАТОРНАЯ РАБОТА №2. 13

ЛАБОРАТОРНАЯ РАБОТА №3. 27

БИБЛИОГРАФИЧЕСКИЙ СПИСОК.. 36

ПРИЛОЖЕНИЕ А.. 37

ПРИЛОЖЕНИЕ Б. 42

ПРИЛОЖЕНИЕ В.. 48


ОБЩИЕ ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ

1. ЦЕЛЬ И ЗАДАЧИ ЛАБОРАТОРНЫХ РАБОТ

Цель настоящих лабораторных работ состоит в исследовании основных алгоритмов и библиотек реализующих работу протоколов в компьютерных сетях. Задачами выполнения лабораторных работ являются:

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

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

 

2. ОПИСАНИЕ ЛАБОРАТОРНОЙ УСТАНОВКИ

Объектом исследования в лабораторных работах являются различные сетевые протоколы, а также методы и алгоритмы их реализации.

Инструментом исследования методов организации сетевых взаимодействий является ЭВМ. Программным средством исследования, является библиотека WINSOCK, подключаемая к программным модулям, создаваемым в среде разработки Borland C++ Builder или Visual studio. Описание функций библиотеки для реализации алгоритмов организации сетевых взаимодействий приведенониже в лабораторных работах.

 

3. СОДЕРЖАНИЕ ОТЧЕТА

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

 

4.ЗАДАНИЕ НА РАБОТУ

Задание выбирается в соответствии с вариантом, назначаемым преподавателем, например:

 

Вариант 1.

Реализовать с помощью WinPcap ARP атаку типа man-in-the-middle.

Вариант 2.

Реализовать с помощью WinPcap ARP атаку, описанную в пункте 2.1.2. данных методических указаний.

Вариант 3.

Реализовать защиту от ARP атак путем формирования статической ARP таблицы.


ЛАБОРАТОРНАЯ РАБОТА №1

“ ИССЛЕДОВАНИЕ СРЕДСТВ ОБМЕНА, ПРЕДОСТАВЛЕННЫХ БИБЛИОТЕКОЙ WINSOCK ДЛЯ ВЗАИМОДЕЙСТВИЯ КЛИЕНТ - СЕРВЕРНЫХ ПРИЛОЖЕНИЙ ”

ЦЕЛЬ РАБОТЫ

Исследовать средства обмена, предоставленные библиотекой WinSock для взаимодействия клиент - серверных приложений.

ОСНОВНЫЕ ПОЛОЖЕНИЯ

 

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

 
 

 

 


Рисунок 1- Алгоритм инициализации обмена клиентом.

При этом алгоритм инициализации обмена предусматривает выполнение следующих действий:

Перед началом использования функций библиотеки Winsock ее необходимо подготовить к работе вызовом функции "int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData)" передав в старшем байта слова wVersionRequested номер требуемой версии, а в младшем - номер подверсии.

Аргумент lpWSAData должен указывать на структуру WSADATA, в которую при успешной инициализации будет занесена информация о производителе библиотеки. Никакого особенного интереса она не представляет, и прикладное приложение может ее игнорировать. Если инициализация проваливается, функция возвращает ненулевое значение.

Вызов функции WSAStartup осуществляется следующим образом:

WSAData wsaData;

if (WSAStartup(MAKEWORD(2,1),&wsaData)!=0)

{

ShowMessage("Failed to find Winsock");

return;

}

1) Создание сокета. Сокет – это объект в программе, который позволяет однозначно идентифицировать логический канал обмена информацией между приложениями в сети. Сокеты (sockets) представляют собой высокоуровневый унифицированный интерфейс взаимодействия с телекоммуникационными протоколами.

2) Заполнение структуры типа Sockaddr_in данными, используемыми при установления соединения (IP-адрес хоста, на котором функционирует сервер; номер порта, через который идет обмен и другие параметры).

3) Соединение с сервером с указанием соответствующих параметров, обеспечивающих это соединение (номер порта, IP-адрес).

4) Инициализация отправки сообщения посредством использования соответствующего канала передачи данных (идентифицируемого сокетом, определяющим IP-адрес пункта назначения и номер порта).

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

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

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

Создание пакета выполняется с использованием функции Socket с указанием следующих параметров:

socket (domain, type, protocol);

Значение параметров, задаваемых в вызове, следующие:

1. Параметр domain – это константа, указывающая, какой домен должен использовать Сокет. При реализации обмена между приложениями в рамках сети он принимает значение AF_INET;

2. Параметр type задает тип создаваемого сокета. В случае использования стека протоколов TCP/IP для обеспечения дуплексной связи на основе логического соединения, данный параметр должен принимать значение SOCK_STREAM.

3. Параметр protocol показывает , какой протокол следует использовать с данным сокетом. При использовании стека TCP/IP он неявно определяется типом самого сокета, поэтому в качестве значения этого параметра может быть задан 0.

Следует отметить, что вызов функции Socket должен инициализировать значением некоторую переменную, объявленную ранее с использованием типа SOCKET.

Структура типа Sockaddr_in обеспечивает установление соединения между приложениями. Для этого определяются значения следующих ее компонент:

 

1. Sin_family, в которой задается идентификатор домена, в рамках которого функционирует сокет (сеть или свой локальный компьютер)- AF_INET;

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

3. Sin_addr.s_addr, в которой задается IP-адрес хоста, с которым устанавливается соединение. В последних версиях winsock можно встретить следующее определение s1.sin_addr.S_un.S_add .

 

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

1. htons, которая возвращает 16-ти битный номер в специальном формате, используемом в протоколе TCP/IP;

2. inet_addr, которая преобразует символьную строку в стандартный IP-адрес, используемый в стеке протоколов TCP/IP.

 

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

1. идентификатор сокета, который будет использован при установлении соединения;

2. указатель на структуру, хранящую адресную информацию, используемую для установления соединения;

3. размер структуры в байтах, которая используется для установления соединения.

 

Общий формат вызова функции connect имеет следующий вид:

int connect(socket s,(struct sock add r* ) peer, int peer_len);

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

Непосредственный обмен сообщениями между клиентом и сервером после установления между ними соединения осуществляется путем вызова SEND и RECV в следующем формате:

int recv (socket_id, buf, len_buf, flaqs);

int send (socket_id, buf, len_buf, flaqs);

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

1. параметр socket_id определяет идентификатор сокета, посредствам осуществляется обмен;

2. параметр buf является идентификатором промежуточного буфера, откуда извлекаются передаваемые данные, либо куда помещаются принимаемые данные;

3. параметр len-buf позволяет указать в функции размер буфера в байтах передаваемых или принимаемых данных;

4. параметр flags задает исходные дополнительные режимы обмена данными между приложениями (по умолчанию данный параметр может принимать нулевое значение).

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

# include <stdio.h>

# include <winsock2.h>

main()

{

WSAData wsaData;

if (WSAStartup(MAKEWORD(2,1),&wsaData)!=0)

{

ShowMessage("Failed to find Winsock");

return;

}

struct sockaddr_in peer;

 

SOCKET s;

int rc;

char buf [1];

 

peer.sin_family=AF_IWET;

peer.sin_port=htons(7500);

peer.sin_addr. s_addr=inet_addr(“172.0.0.1”);

s=socket (AF_INET, SOCK_STREAM, 0);

if(s<0)

{

print (“Ошибка вызова сокета”);

exit(1);

}

rc=connect(s, (struct sockaddr*)&pecr, sizeof(pecr));

if (rc)

{

printf (“Ошибка соединения”);

exit(1);

}

rc=SEND(s, “1”, 1, 0);

if (rc<=0)

{

printf(“Ошибка пересылки”);

exit(1);

}

rc=recv(s, buf, 1, 0);

if (rc<=0)

{

printf(“Ошибка принятия данных”);

exit(1);

}

}

 

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

Необходимо изначально подготовить работу библиотеки winsock, аналогично с началом работы клиента.

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

2. формирование структуры типа sockaddr_in(), в которой задается сетевой идентификатор клиента, от которого ожидается вызов, и номер прослушиваемого порта;

3. связывание созданного сокета с заданными сетевыми параметрами, которые используются для прослушивания;

4. перевод сокета в режим прослушивания входящих соединений по конкретному порту с заданного в структуре типа Sockaddr_in() IP-адреса;

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

6. передача и прием данных при обмене информацией с клиентом.

 

Рисунок 2- Алгоритм прослушивания канала сервером с обменом сообщениями

 

Формат конструкции функций библиотеки WinSock, реализующих рассмотренные шаги алгоритма сетевого обмена, имеет рассматриваемый ниже синтаксис.

Связывание созданного для контроля наличия соединения сокета с адресными параметрами, задаваемые структурой типа Sockaddr_in(), осуществляется вызовом функции bind в следующем формате:

int bind (socket s, (struct sockaddr*) name, int name length),

где параметр s определяет дескриптор прослушивающего сокета, параметр name задаёт адресную информацию (номер порта и IP-адрес), идентифицирующего прослушиваемый сетевой интерфейс, а параметр namelength определяет длину соответствующей адресной структуры.

Элемент sin_addr.S_addr адресной структуры, идентифицирующей клиента, необходимо задать в виде INADDR_ANY. Это предполагает возможность принятия соединений от любого клиентского приложения в сети.

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

int listen( socket s, int backlog),

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

Прием соединения (запроса на установление соединения), ожидающего во входной очереди осуществляется вызовом функции accept, в которой указываются следующие параметры:

SOCKET accept (socket s, (strvet sockaddr*)addr, int FAR* addrlen),

где параметр s определяет идентификатор сокета, использованного для контроля наличия соединения с соответствующим клиентом; в структуру addr записывается адресная информация, идентифицирующая клиента, с которым будет осуществляться обмен и аналогичная той, которая использовалась сокетом, реализующим контроль наличия соединения. Вызов функции accept возвращает идентификатор сокета, который используется при обмене данными.

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

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

# include < stdio.h >

# include < winsock2.h >

main ()

{

struct sockaddr_in local1,local2;

socket s1,s;

int rc;

char buf[1];

WSAData wsaData;

if (WSAStartup(MAKEWORD(2,1),&wsaData)!=0)

{

ShowMessage("Failed to find Winsock");

return;

}

local1.sin_family=AF_INET;

local1.sin_port=htons(7500);

local1.sin_addr.s_addr=htons(INADDR_ANY);

s=socket (AF_INET, sock_stream, 0);

if (s<0)

{

printf (“Сокет не создан”);

exit(1); }

rc=bind (s, (struct sockaddr *)&local1, sizeof(local1));

if (rc<0)

{

printf(“Нет связывания адреса и сокета”);

exit(1);

}

rc=listen(s, 5);

if (rc)

{

printf (“Ошибка вызова listen”);

exit(1);

}

int size = sizeof(local2);

s1=accept(s, (struct sockaddr*)& local2, &size);

if (s1<0)

{

printf(“Ошибка создания сокета обмена данными”);

exit(1);

}

rc=recv (s1, buf, 1, 0);

if (rc<=0)

{

printf(“Ошибка чтения данных из канала”);

exit(1);

}

printf(“%c \n”, buf [0]);

rc=send (s1 “2”, 1, 0);

if (rc<=0)

{

print(“Ошибка отправки данных”);

exit(1);

}

}

 

3. ВАРИАНТЫ ЗАДАНИЙ

Вариант 1.

Реализовать “клиент – серверное” приложение, выполняющее обмен данными между хостами в сети с произвольным количеством сообщений в любом порядке (простейшая реализация чата).

 

Вариант 2.

Реализовать “клиент – серверное” приложение, таким образом, чтоб сервер поддерживал как минимум три соединения. Сервер рассылает сообщения одновременно всем клиентам.

 

Вариант 3.

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

 

СОДЕРЖАНИЕ ОТЧЁТА

 

4.1. Цель работы.

4.2. Вариант задания.

4.3. Текст разработанной программы и тексты используемых классов.

4.4. Распечатка окон разработанных программ, демонстрирующих их работу.

4.5. Выводы.

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

5.1. Что такое сокет?

5.2. Какие компоненты адресной структуры, позволяющие идентифицировать приложения, функционирующие в сети вы знаете?

5.3. Изобразите и объясните структуру алгоритма инициализации обмена на клиентской стороне

5.4. Изобразите и объясните структуру алгоритма реализации обмена на серверной стороне.

 


ЛАБОРАТОРНАЯ РАБОТА №2

“Исследование возможностей библиотеки WinSock по программному формированию пакетов различных протоколов компьютерных сетей”

1. ЦЕЛЬ РАБОТЫ

Изучить и исследовать возможности библиотеки WinSock для формирования пакетов различных сетевых протоколов.

ОСНОВНЫЕ ПОЛОЖЕНИЯ

 

Библиотека WinSock на ряду со средствами создания пакетов для идентификации их с каналами передачи информации между приложениями, представляет так же средства по непосредственному формированию пакетов на низком (аппаратном) уровне. Это позволяет формировать пакеты непосредственно в требуемом виде и передавать их в канал, либо анализировать значение полей пакетов соответствующих прототипов в сети. Для создания пакетов библиотека WinSock предоставляет в распоряжение разработчика ряд встроенных структур, отражающих непосредственную структуру пакетов. Однако указанные программные структуры могут быть объявлены разработчиком и самостоятельно при сохранении размеров соответствующих полей

Linux Описание

Struct IP-pack {

vint version:4; /* версия*/

vint header_len:4; /* длина заголовка */

vint serve_type:8; /* правила обслуживания пакета */

vint packet_len:16; /* общая длина пакета в байтах */

vint ID:16; /* идентификатор пакета */

vint dont_fraq:1; /* флаг запрещающий фрагментацию */

vint more_frags:1; /* флаг наличия последующих фрагментов */

vint fraq_offset:13; /* смещение фрагмента */

vint time_to_live:8; /* число переходов через маршрутизатор */

vint protocol:8; /* протокол */

 

hdr_chk sum : 16; контрольная сумма заголовка

IP v4_source : 32; IP-адресс отправителя

IP v4_dest : 32; IP-адресс назначения

Options []; 40 байтов служебных данных

Data[]; данные

Windows Описание

Struct IP-pack {

 

BYTE h_len:4; // Length of the header in dwords

BYTE version:4; // Version of IP

BYTE tos; // Type of service

USHORT total_len; // Length of the packet in dwords

USHORT ident; // unique identifier

USHORT flags; // Flags

BYTE ttl; // Time to live

BYTE proto; // Protocol number (TCP, UDP etc)

USHORT checksum; // IP checksum

ULONG source_ip; // IP-адрес отправителя

ULONG dest_ip; // IP-адрес назначения

Формат структуры, идентифицирующий поля пакета протокола UDP, имеет следующий вид:

Linux windows описание

Struct UDP_header { struct udphdr {

SRC_port; uh_sport; номер порта отправителя

DST_port uh_dport; номер порта получателя

Length; udp_length длина сообщения

Checksum; udp_checksum; контрольная сумма

Data[]; } } данные

Формат структуры, идентифицирующий поля протокола ICMP, имеет следующий вид:



2015-12-07 321 Обсуждений (0)
Linux windows описание 0.00 из 5.00 0 оценок









Обсуждение в статье: Linux windows описание

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (321)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)