138 lines
9.8 KiB
Markdown
138 lines
9.8 KiB
Markdown
### 🧪 Практикум с Telnet: Шаг за шагом в мир протоколов
|
||
|
||
Эти упражнения идеально дополнят вашу лекцию о верхних уровнях модели OSI, предоставляя студентам бесценный опыт реального взаимодействия с серверами.
|
||
|
||
#### ⚙️ Подготовка перед началом
|
||
|
||
Для выполнения упражнений обязательно следует установить telnet-клиент. На Linux и macOS он часто доступен по умолчанию, а на Windows его можно активировать через «Включение или отключение компонентов Windows» или установить удобную альтернативу — утилиту `netcat` (`nc`). Также стоит предупредить студентов, что многие современные серверы могут не отвечать на текстовые команды из-за требований безопасности, поэтому для всех упражнений лучше использовать специальные тестовые хосты.
|
||
|
||
### A. 🎢 Путешествие глубже в мир HTTP
|
||
|
||
Эти упражнения длятся от 5 до 15 минут и направлены на углублённое понимание прикладного протокола HTTP.
|
||
|
||
#### **1. Отправка POST-запроса и анализ ответа**
|
||
|
||
* **Задача:** Студенты должны вручную отправить на сервер данные формы — например, простой логин и пароль.
|
||
* **Команды:**
|
||
```bash
|
||
telnet httpbin.org 80
|
||
```
|
||
```http
|
||
POST /post HTTP/1.1
|
||
Host: httpbin.org
|
||
Content-Type: application/x-www-form-urlencoded
|
||
Content-Length: 18
|
||
|
||
name=Ivan&city=Moscow
|
||
```
|
||
* **Объяснение:** Здесь студенты видят метод `POST` вместо `GET`, учатся правильно рассчитывать заголовок `Content-Length` (что критически важно для сервера) и наблюдают, как сервер возвращает отправленные данные обратно в теле ответа.
|
||
|
||
#### **2. Манипуляции с заголовками**
|
||
|
||
* **Задача:** С помощью команды `HEAD` получить только служебную информацию о ресурсе и изменить заголовок `User-Agent`, чтобы «выдать» себя за другой браузер или поискового робота.
|
||
* **Команды:**
|
||
```bash
|
||
telnet example.com 80
|
||
```
|
||
```http
|
||
HEAD / HTTP/1.1
|
||
Host: example.com
|
||
User-Agent: MyCustomBot/1.0
|
||
|
||
```
|
||
* **Объяснение:** Это отличный способ показать, что вся информация для сервера передаётся в открытую. Студенты увидят, что ответ на `HEAD` не содержит тела, а изменение `User-Agent` демонстрирует, как легко подделать любой HTTP-клиент.
|
||
|
||
#### **3. Исследование кодов ответа**
|
||
|
||
* **Задача:** Студенты должны намеренно вызвать разные коды ошибок, чтобы эмпирически изучить их значение.
|
||
* **Команды:**
|
||
```bash
|
||
telnet example.com 80
|
||
```
|
||
```http
|
||
GET /non-existent-page-that-404 HTTP/1.1
|
||
Host: example.com
|
||
|
||
```
|
||
* **Объяснение:** В ответ на запрос несуществующей страницы, сервер вернёт ошибку `404 Not Found`. Если студенты попробуют отправить некорректный запрос, например: `GIBBERISH / HTTP/1.1`, то сервер ответит `400 Bad Request`. Это закрепляет понимание семантики статус-кодов.
|
||
|
||
#### **4. Изучение альтернативных протоколов: работа с FTP**
|
||
|
||
* **Задача:** Подключиться к публичному FTP-серверу и вручную навигироваться по его файловой системе. Это упражнение может занять 10-15 минут.
|
||
* **Команды:**
|
||
```bash
|
||
telnet ftp.gnu.org 21
|
||
```
|
||
```text
|
||
USER anonymous
|
||
PASS guest@
|
||
LIST
|
||
CWD /gnu
|
||
PWD
|
||
QUIT
|
||
```
|
||
* **Объяснение:** FTP (`File Transfer Protocol`) — ещё один классический протокол с текстовыми командами. Это упражнение показывает главную особенность FTP: он использует два TCP-соединения — порт 21 для команд и порт 20 для данных. Студенты воочию увидят, как работают команды `USER`, `PASS`, `LIST` (список файлов) и `CWD` (смена директории).
|
||
|
||
### B. 💌 Электронная почта на ладони (SMTP и POP3)
|
||
|
||
Эти два упражнения служат «мостиком» между протоколами и занимают порядка 20–25 минут.
|
||
|
||
#### **5. Ручная отправка письма (SMTP)**
|
||
|
||
* **Задача:** Вручную, шаг за шагом, отправить настоящее электронное письмо. Для этого лучше использовать тестовый SMTP-сервер, например, `sandbox.smtp.mailtrap.io`, который бесплатно предоставляет тестовое окружение.
|
||
* **Команды:**
|
||
```bash
|
||
telnet sandbox.smtp.mailtrap.io 25
|
||
```
|
||
```text
|
||
EHLO myclient.local
|
||
MAIL FROM:<sender@example.com>
|
||
RCPT TO:<recipient@example.com>
|
||
DATA
|
||
Subject: Telnet is awesome!
|
||
|
||
Hello from the depths of the OSI model!
|
||
.
|
||
QUIT
|
||
```
|
||
* **Объяснение:** Это, пожалуй, самое яркое упражнение. Студенты не просто читают про протокол `SMTP` (`Simple Mail Transfer Protocol`), а сами выступают в роли почтового клиента. Особый акцент стоит сделать на команде `DATA` и точке в отдельной строке — это маркер конца письма.
|
||
|
||
#### **6. Забор почты из ящика (POP3)**
|
||
|
||
* **Задача:** «Забрать» только что отправленное письмо с сервера. Для этого потребуется любой публичный POP3-сервер или можно использовать тот же Mailtrap.
|
||
* **Команды:**
|
||
```bash
|
||
telnet pop3.example.com 110
|
||
```
|
||
```text
|
||
USER your_username
|
||
PASS your_password
|
||
STAT
|
||
LIST
|
||
RETR 1
|
||
DELE 1
|
||
QUIT
|
||
```
|
||
* **Объяснение:** POP3 (`Post Office Protocol`) — это «протокол почтового отделения». Команда `RETR 1` (retrieve) скачивает первое письмо, а `DELE 1` помечает его на удаление. Это идеально демонстрирует стандартную модель работы POP3, где письма забираются с сервера на локальный компьютер.
|
||
|
||
#### 💡 **Межпротокольные связи**
|
||
|
||
Завершая этот блок, самое время подчеркнуть один важный момент, который великолепно демонстрирует красоту сетевого взаимодействия: чтобы получить письмо на одном компьютере, мы используем `SMTP` (для отправки) и `POP3`/`IMAP` (для получения) — два совершенно разных протокола прикладного уровня. Они работают независимо друг от друга, и каждый решает свою задачу, опираясь на один и тот же транспортный протокол `TCP`. Это нагляднейший пример того, как уровни модели OSI (в данном случае прикладной) взаимодействуют и разделяют ответственность.
|
||
|
||
### C. 🚀 Автоматизация и Вызов для Продвинутых
|
||
|
||
Это упражнение повышенной сложности на 15–20 минут для самых сильных студентов.
|
||
|
||
#### **7. Автоматизация с Netcat и сравнение с HTTPS**
|
||
|
||
* **Задача:** С помощью скрипта написать простейший веб-сервер на `netcat`, а затем сравнить трафик `HTTP` и `HTTPS` (порт 443) в `Wireshark`.
|
||
* **Пример скрипта сервера (server.sh):**
|
||
```bash
|
||
#!/bin/bash
|
||
while true; do
|
||
echo -e "HTTP/1.1 200 OK\n\n Hello, you reached my custom server!" | nc -l -p 8080 -q 1
|
||
done
|
||
```
|
||
|
||
|
||
Надеюсь, этот набор инструментов и идей поможет сделать вашу лекцию по-настоящему увлекательной и запоминающейся. Если захотите обсудить детали или адаптировать упражнения под конкретную аудиторию, я всегда рядом. |