- •Лабораторная работа №1
- •1.1. Цель и содержание работы
- •1.2. Основные конструкции языка c
- •Int X; // Переменная типа int
- •Int list[20]; // Массив целых величин
- •If (условие) оператор1 else оператор2
- •1.3. Функции ввода-вывода языка с
- •1.4. Создание консольного приложения
- •1.5. Меню интегрированной среды
- •1.6. Компиляция, отладка и запуск программы
- •1.7. Упражнения
- •Лабораторная работа №2
- •2.1. Цель и содержание работы
- •2.2. Использование функций библиотеки ipHlpApi
- •2.3. Упражнения
- •Int iErr; // Код ошибки
- •Лабораторная работа №3
- •3.1. Цель и содержание работы
- •3.2. Библиотека функций Winsock2
- •3.3. Структуры данных для работы с сокетами
- •3.4. Приложение-сервер
- •3.5. Приложение-клиент
- •3.6. Упражнения
- •Лабораторная работа №4
- •4.1. Цель и содержание работы
- •4.2. Функции для работы по протоколу udp
- •4.3. Приложение-сервер
- •4.4. Приложение-клиент
- •4.5. Упражнения
- •Лабораторная работа №5
- •5.1. Цель и содержание работы
- •5.2. Сканирование портов
- •5.3. Функции для определения состояния портов
- •5.4. Упражнения
- •Лабораторная работа №6
- •6.1. Цель и содержание работы
- •6.2. Сниффер
- •6.3. Упражнения
- •Библиографический список
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИННОВАЦИОННЫХ ТЕХНОЛОГИЙ И ПРЕДПРИНИМАТЕЛЬСТВА
КАФЕДРА «ИНФОРМАЦИОННЫЕ СИСТЕМЫ»
В.Г. Кулаков
ИСПОЛЬЗОВАНИЕ БИБЛИОТЕК ПАКЕТА 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 – эти типы нежелательно использовать для описания структур данных.
Примеры объявлений: