Linux windows описание
Министерство образования и науки Украины Севастопольский национальный технический Университет
МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторному практикуму по дисциплине "Глобальные информационные системы и сети" для студентов дневной и заочной форм обучения специальности 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-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (321)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |