Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кулаков В.Г. Методические указания к лабораторн...doc
Скачиваний:
4
Добавлен:
04.05.2019
Размер:
286.72 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИННОВАЦИОННЫХ ТЕХНОЛОГИЙ И ПРЕДПРИНИМАТЕЛЬСТВА

КАФЕДРА «ИНФОРМАЦИОННЫЕ СИСТЕМЫ»

В.Г. Кулаков

ИСПОЛЬЗОВАНИЕ БИБЛИОТЕК ПАКЕТА MICROSOFT VISUAL C++

ДЛЯ РАБОТЫ ПО ПРОТОКОЛАМ СТЕКА TCP/IP

Методические указания к лабораторным работам по курсу «Протоколы и стандарты передачи данных»

Москва 2009

УДК 004.438

Составитель В.Г. Кулаков

Использование библиотек пакета Microsoft Visual C++ для работы по протоколам стека TCP/IP. Методические указания к лабораторным работам по курсу «Протоколы и стандарты передачи данных», – М.: РГУИТП, 2009 – 44 с.

Методические указания к лабораторным работам по дисциплине «Протоколы и стандарты передачи данных» предназначены для студентов четвертого курса дневного отделения. Основной целью лабораторных работ является освоение студентами правил использования библиотек пакета Microsoft Visual C++ для работы по протоколам стека TCP/IP

Методические указания составлены в соответствии с программой и планом для специальности «Информационные системы и технологии» – 071900.

© Российский государственный университет инновационных технологий и предпринимательства, 2009

© Кафедра «Информационные системы», 2009

© В.Г. Кулаков, 2009

Оглавление

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Лабораторная работа №1 12

1.1. Цель и содержание работы 12

1.2. Основные конструкции языка C 12

1.3. Функции ввода-вывода языка С 16

1.4. Создание консольного приложения 18

1.5. Меню интегрированной среды 19

1.6. Компиляция, отладка и запуск программы 20

1.7. Упражнения 20

Лабораторная работа №2 21

2.1. Цель и содержание работы 21

2.2. Использование функций библиотеки IPHlpApi 21

2.3. Упражнения 23

Лабораторная работа №3 26

3.1. Цель и содержание работы 26

3.2. Библиотека функций Winsock2 26

3.3. Структуры данных для работы с сокетами 26

3.4. Приложение-сервер 28

3.5. Приложение-клиент 32

3.6. Упражнения 34

Лабораторная работа №4 35

4.1. Цель и содержание работы 35

4.2. Функции для работы по протоколу UDP 35

4.3. Приложение-сервер 35

4.4. Приложение-клиент 37

4.5. Упражнения 39

Лабораторная работа №5 40

5.1. Цель и содержание работы 40

5.2. Сканирование портов 40

5.3. Функции для определения состояния портов 42

5.4. Упражнения 46

Лабораторная работа №6 47

6.1. Цель и содержание работы 47

6.2. Сниффер 47

6.3. Упражнения 49

Введение. Среда разработки Microsoft Visual C++

Для создания сетевого программного обеспечения, предназначенного для работы по протоколу TCP/IP, традиционно используют языки программирования C и C++.

При проведении лабораторных работ по курсу «Протоколы и стандарты передачи данных» мы будем использовать среду разработки Microsoft Visual C++ 2008. Среда разработки представляет собой интегрированные в единую оболочку средства, позволяющие создавать, открывать, просматривать, редактировать, сохранять, транслировать и отлаживать программы.

Далее мы будем рассматривать предназначенный для образовательных целей бесплатный (с урезанными возможностями) вариант среды – Express Edition. Он позволяет создавать, компилировать и отлаживать программы, написанные как на C++, так и на классическом языке C. Среда также обеспечивает доступ к справочной системе MSDN.

Классический учебник «Язык программирования C» Кернигана и Ритчи начинается с утверждения: «Единственный способ освоить новый язык программирования – писать на нем программы». Часть времени, выделенного на самостоятельную (внеаудиторную) работу, вы должны потратить на изучение Visual C++. Наиболее удобный для вас способ освоения среды – установить Visual C++ на свой домашний компьютер.

На данный момент существует два учебных варианта интегрированной среды: Visual C++ 2005 и Visual C++ 2008. При проведении лабораторных работ мы будем использовать среду Visual C++ 2008, так как она уже включает в себя набор библиотек для работы с семейством протоколов TCP/IP и не требует установки дополнительных пакетов. Среда занимает на жестком диске около 1,5 Гб и может использоваться совместно с операционными системами Windows XP или Vista.

Процесс установки MS Visual C++ с DVD-диска на компьютер занимает 10-20 минут. Из дополнительных компонентов желательно установить только справочную систему MSDN. Компонент SQL Server устанавливать не нужно, так как он не требуется при изучении данного курса и может заметно замедлять работу компьютера.

В процессе дальнейшей работы в большинстве случаев вы сможете пользоваться стандартными настройками Visual C++, которые задаются автоматически в процессе установки. Не меняйте настройку среды без необходимости.

Лабораторная работа №1

1.1. Цель и содержание работы

Целью данной работы является изучение основ программирования на языке C и приобретение начальных навыков работы в среде Visual C++.

Язык C был использован в качестве прототипа в процессе разработки многих современных языков программирования (C++, C#, Java). Кроме того, на языке C написаны библиотеки для работы с семейством протоколов TCP/IP. Прежде чем переходить к использованию методов объектно-ориентированного программирования, студенты должны вспомнить правила элементарного программирования на C.

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

1.2. Основные конструкции языка c

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

Мультипликативные операции:

* – умножение;

/ – деление;

% – получения остатка от деления.

Аддитивные операции:

+ – сложение;

– – вычитание, арифметическое отрицание;

Операции отношений:

< – меньше;

<= – меньше или равно;

> – больше;

>= – больше или равно;

== – равно;

!= – не равно.

Логические операции:

! – НЕ;

&& – И;

|| – ИЛИ.

Операции присваивания:

++ – инкремент (увеличение на 1);

–– – декремент (уменьшение на 1);

= – простое присваивание;

+= – сложение с присваиванием;

–= – вычитание с присваиванием;

*= – умножение с присваиванием.

Операция sizeof определяет размер памяти, который соответствует идентификатору.

Константа – это число, символ или строка символов. Константы используются в программе как неизменяемые величины. В языке C различают четыре типа констант: целые, с плавающей точкой, символы и строки.

Целая константа – это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину. Десятичная константа записывается цифрами от 0 до 9, восьмеричная – цифрами от 0 до 7 (запись обязательно начинается с нуля), шестнадцатеричная – цифрами от 0 до 9 и буквами от A до F (запись начинается с комбинации 0x). Программист может определить для константы тип long, приписав букву l или L в конец константы.

Константа с плавающей точкой – это действительное десятичное число, которое может включать целую и дробную части, а также экспоненту. Целая часть отделяется от дробной десятичной точкой, экспонента отделяется символом E или e.

Константа-символ – это буква, цифра или знак пунктуации, заключенный в одиночные кавычки.

ESC-последовательности – это специальные символьные комбинации:

\n – перевод строки,

\t – табуляция,

\r – возврат каретки,

\" – двойная кавычка,

\\ – обратный слеш.

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

Идентификаторы – это имена переменных, функций и меток. Допускается любое число символов в идентификаторе, однако компилятором распознаются только 31 символ. Компилятор C рассматривает буквы верхнего и нижнего регистров как различные символы.

Комментарий – это последовательность символов, которая начинается с комбинации символов /* и заканчивается комбинацией */. Такой комментарий может занимать несколько строк. В языке C++ введен однострочный комментарий, который начинается с комбинации //. Компилятором комментарии игнорируются.

Исходная программа – это совокупность директив, указаний компилятору, объявлений и определений. Определение переменной задает имя, тип и начальное значение переменной. Определение функции задает имя функции, ее структуру, параметры и тип возвращаемой величины.

Программа может быть разделена на несколько файлов. Исходный файл – это текстовый файл, который содержит часть программы или всю программу. Отдельные файлы перед компиляцией можно соединять в один большой файл посредством директивы #include. Если имя файла в директиве заключено в угловые скобки, поиск файла осуществляется в стандартном каталоге интегрированной среды C, а если имя заключено в двойные кавычки – в текущем каталоге. Если имя указано полностью (включая путь доступа к файлу), то файл берется из указанного места и поиск не производится.

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

Блок – это составной оператор. Составные операторы состоят из объявлений и операторов. Блоки могут быть вложенными.

Переменная может быть глобальной или локальной. Глобальный объект занимает место в памяти и имеет определенное значение на протяжении всей программы. Локальный объект (объект, определенный внутри блока) захватывает новую память при каждом входе в блок. Когда блок завершается, локальный объект пропадает, а его значение теряется.

Все переменные C должны быть явно объявлены перед их использованием, функции могут быть объявлены явно или неявно. Объявление может включать один или несколько деклараторов. Декларатор – это идентификатор, который может быть определен с квадратными скобками, звездочкой или круглыми скобками для объявления массива, указателя или функции соответственно. Когда объявляется простая переменная, структура или объединение, то декларатор – это идентификатор.

Язык C поддерживает определения для базовых типов данных:

char – символ (принимает значения в диапазоне –128…127),

int – целое (диапазон значений зависит от реализации компилятора),

short – короткое целое (–32768…32767),

long – длинное целое (–2147483648…2147483647),

unsigned char – символ без знака (0…255),

unsigned – целое без знака (диапазон зависит от реализации компилятора),

unsigned short – короткое целое без знака (0…65535),

unsigned long – длинное целое без знака (0…4294967295),

float – число с плавающей запятой,

double – число с плавающей запятой удвоенной точности.

Имеется также тип void, предназначенный для объявления функций, которые не возвращают значения. Область значений для типов int и unsigned не определена в языке C – эти типы нежелательно использовать для описания структур данных.

Примеры объявлений: