Сетевой детектив

Практическое занятие · Принципы организации сетей
ДУП.03 Основы ИТ Специальность: Разработчик ПО
Время: 2 академических часа
Windows · cmd · PowerShell

Добро пожаловать, детектив!

Вы — начинающий разработчик в IT-компании. Вам поступило пять «дел» — сетевых проблем, с которыми сталкиваются программисты. Ваша задача — диагностировать каждую проблему с помощью сетевых инструментов Windows и предложить решение.

Как открыть командную строку в Windows:
  • Способ 1: нажмите Win + R, введите cmd, нажмите Enter.
  • Способ 2: нажмите Win, введите cmd, откройте «Командная строка».
  • Способ 3: нажмите Win + X → «Терминал» или «Windows PowerShell».

Для некоторых команд (например, curl) можно использовать PowerShell — он встроен в Windows 10/11.

Правила игры:
  • Каждое дело — отдельная карточка с описанием проблемы.
  • Используйте командную строку (cmd) или PowerShell для выполнения команд.
  • Записывайте свои выводы в поля для ответов.
  • Если застряли — нажмите кнопку «Подсказка».
  • В конце нажмите «Сохранить отчёт» — ваши ответы сохранятся в файл.
1
Дело № 1: «Сайт не открывается»
Лёгкий уровень

Пользователь жалуется: «Браузер пишет ERR_NAME_NOT_RESOLVED, когда я открываю github.com. Но вчера всё работало».

Ваша задача: проверить, работает ли DNS, и определить, в чём проблема.

  1. Откройте командную строку (Win + R → cmd → Enter).
  2. Выполните команду ping github.com. Что произошло?
  3. Выполните команду ping 140.82.121.4 (это IP GitHub). Что произошло?
  4. Выполните команду nslookup github.com. Что показывает?
Ваш диагноз и решение

Если ping github.com выдаёт ошибку «Не удалось обнаружить узел», а ping 140.82.121.4 работает — проблема в DNS. Компьютер не может преобразовать имя в IP-адрес.

Решение: сменить DNS-сервер на публичный. Например, Google DNS (8.8.8.8) или Cloudflare (1.1.1.1).

Как сменить в Windows: Панель управления → Сеть и Интернет → Центр управления сетями → Изменение параметров адаптера → правой кнопкой по адаптеру → Свойства → IP версии 4 (TCP/IPv4) → Свойства → указать DNS вручную.

2
Дело № 2: «Порт занят»
Лёгкий уровень

Разработчик запускает свой сервер на порту 8080, но получает ошибку: Error: listen EADDRINUSE: address already in use :::8080.

Ваша задача: найти, какой процесс занимает порт, и освободить его.

  1. Выполните команду netstat -ano | findstr :8080.
  2. Найдите PID — это последнее число в строке (например, 12345).
  3. Выполните tasklist | findstr 12345 (подставьте свой PID), чтобы узнать имя программы.
  4. Остановите процесс: taskkill /PID 12345 /F (подставьте свой PID).
Ваш диагноз и решение

Порт 8080 часто занят другим экземпляром сервера, старой версией приложения или Java-процессом (если запускали Tomcat/Spring).

Если не хотите убивать процесс — можно просто запустить сервер на другом порту: 8081, 3000 и т.д. Но лучше найти и освободить.

Важно: не убивайте системные процессы (например, svchost.exe), это может нарушить работу Windows.

3
Дело № 3: «API возвращает 404»
Средний уровень

Frontend разработчик делает запрос к API: GET https://api.github.com/users/octocat. Но что-то идёт не так — нужно проверить ответ.

Ваша задача: с помощью curl проверить запрос, посмотреть статус-код, заголовки и тело ответа.

  1. Откройте PowerShell (Win + X → «Терминал»).
  2. Выполните curl -i https://api.github.com/users/octocat.
  3. Посмотрите на первую строку ответа — там статус-код (например, HTTP/1.1 200 OK).
  4. Посмотрите на заголовки (они идут до пустой строки).
  5. Попробуйте запрос с ошибкой: curl -i https://api.github.com/users/unknown-user-12345. Какой код вернётся?
Ваш диагноз и решение

200 OK — успех. 404 Not Found — ресурс не найден.

curl -i показывает заголовки. Без -i — только тело ответа.

Статус-коды:

  • 2xx — успех.
  • 4xx — ошибка клиента (неверный URL, нет прав).
  • 5xx — ошибка сервера.

Важно для Windows: в PowerShell curl — это алиас для Invoke-WebRequest. Если команда работает странно, используйте curl.exe (явно) или Invoke-WebRequest.

4
Дело № 4: «SSH не подключается к серверу»
Средний уровень

Разработчику нужно подключиться к удалённому серверу по SSH, чтобы задеплоить проект. Но при попытке подключения возникает ошибка: Connection refused.

Ваша задача: проверить доступность сервера, порт 22 и попробовать подключиться.

  1. Проверьте, доступен ли сервер: ping example.com (замените на адрес вашего тестового сервера).
  2. Проверьте, открыт ли порт 22 (SSH): Test-NetConnection example.com -Port 22.
  3. Попробуйте подключиться: ssh user@example.com.
  4. Если не подключается — проверьте, запущен ли SSH-сервер на удалённой машине (это уже задача администратора).
# В PowerShell проверить порт: Test-NetConnection example.com -Port 22 # Результат: # TcpTestSucceeded : True ← порт открыт # TcpTestSucceeded : False ← порт закрыт или сервер недоступен # Подключение по SSH: ssh user@example.com
Ваш диагноз и решение

Причины ошибки Connection refused:

  • SSH-сервер не запущен на удалённой машине.
  • Порт 22 закрыт файрволом.
  • Сервер выключен или недоступен.
  • Неверный адрес или порт.

Что делать:

  • Проверить ping — сервер вообще отвечает?
  • Проверить порт через Test-NetConnection.
  • Связаться с администратором сервера.

В Windows 10/11 SSH-клиент встроен. Если команда ssh не найдена — включите компонент «Клиент OpenSSH» в «Дополнительных компонентах Windows».

5
Дело № 5: «CORS-блокировка»
Сложный уровень

Frontend на http://localhost:3000 пытается получить данные с backend на http://localhost:8080/api/users. Браузер выдаёт ошибку CORS: Access to fetch at ... has been blocked by CORS policy.

Ваша задача: объяснить, что такое CORS, почему браузер блокирует запрос, и как это исправить на стороне сервера.

  1. Откройте DevTools в браузере (F12) → вкладка Network.
  2. Сделайте запрос с фронтенда.
  3. Найдите запрос в списке, посмотрите заголовки ответа.
  4. Проверьте, есть ли заголовок Access-Control-Allow-Origin.
  5. Предложите решение: что нужно добавить в код backend?
// Пример для Express.js (Node.js) const cors = require('cors'); app.use(cors({ origin: 'http://localhost:3000' // разрешить только фронтенду }));
Ваш диагноз и решение

CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера. Он запрещает запросы между разными «источниками» (origin), если сервер не разрешил их явно.

Источник = протокол + домен + порт. localhost:3000 и localhost:8080 — разные источники (разные порты).

Решение: на backend добавить заголовок Access-Control-Allow-Origin с адресом фронтенда. В Express это делается через middleware cors.

Важно: CORS — это защита браузера. Если вы делаете запрос из Postman или curl — CORS не сработает, потому что это не браузер. CORS проверяется только в браузере.

Итоговый отчёт

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

Итоговый отчёт
Критерии оценки:
  • «Отлично» — все 5 дел решены, ответы аргументированы, использованы команды.
  • «Хорошо» — 4 дела решены, есть небольшие неточности.
  • «Удовлетворительно» — 3 дела решены, ответы поверхностные.
  • «Неудовлетворительно» — менее 3 дел, ответы отсутствуют или неверны.
Прогресс:
0 / 6
Ответы не сохранены