Пришлите ответы на вопросы в личном кабинете на сайте netology.ru.
Вам попало в руки приложение, состоящее из нескольких сервисов, и клиент к нему. Ваша задача — используя Wireshark, построить карту взаимодействия между сервисами в рамках запросов, которые отправляет клиент. Нужно проанализировать ответы.
В каталоге assets даны 4 сервера (server-1/4
) под платформы:
- *.bin — Linux.
- *.exe — Windows.
- i*.bin — macOS.
А также клиент к ним (client
):
- *.bin — Linux.
- *.exe — Windows.
- i*.bin — macOS.
- Скачайте серверы для вашей платформы. Не забудьте проверить любые скачиваемые файлы через VirusTotal.
- Скачайте каталоги с ключами
keys1
иkeys2
и разместите их в том же каталоге, что и скачанные в п.1 серверы. - Запустите по порядку серверы от 1 до 4. Они стартуют на портах 9001–9004 соответственно.
- Запустите Wireshark в режиме отслеживания loopback (
Loopback: lo
). - Запустите клиента, проверяя, что клиент выводит ответ в том виде, как показано ниже. Часть данных может отличаться.
{
"transactions": [
{
"id": 1,
"userId": 999,
"category": "auto",
"amount": 1000000,
"created": 1613389415
}
],
"categoryStats": {
"auto": 1000000
}
}
Примечание. Вы не сможете скачать сами каталоги, если не умеете пользоваться Git, поэтому аккуратно скачайте файлы ключей и положите их в соответствующие каталоги, которые создаёте на своём компьютере. У вас должна получиться структура:
- keys1/
- public.key
- private.key
- keys2/
- public.key
- client-x64.bin (либо другой для вашей платформы)
- server1-x64.bin (либо другой для вашей платформы)
- server2-x64.bin (либо другой для вашей платформы)
- server3-x64.bin (либо другой для вашей платформы)
- server4-x64.bin (либо другой для вашей платформы)
Серверы и клиенты запускайте из командной строки.
В качестве решения пришлите в формате ниже ответы на вопросы:
- Каким образом проходит путь запросов от клиента: на какой сервис и через какие сервисы?
- Какие запросы делаются на каждом этапе, и какие ответы на них приходят?
Обратите внимание: это формат, а не пример реального взаимодействия из вашего задания.
1. Client --> Server 4 (запрос):
GET http://localhost:9004/authenticate
Content-Type: application/json
{
"login": "root",
"password": "secret"
}
2. Server 4 --> Server 3 (запрос):
GET http://localhost:9003/authenticate
Content-Type: application/json
{
"login": "root",
"password": "secret"
}
3. Server 3 --> Server 4 (ответ):
200 OK
Content-Type: application/json
{
"transactions": [
{
"id": 1,
"userId": 999,
"category": "auto",
"amount": 1000000,
"created": 1613389415
}
],
"categoryStats": {
"auto": 1000000
}
}
3. Server 4 --> Client (ответ):
200 OK
Content-Type: application/json
{
"transactions": [
{
"id": 1,
"userId": 999,
"category": "auto",
"amount": 1000000,
"created": 1613389415
}
],
"categoryStats": {
"auto": 1000000
}
}
Это необязательное задание. Его невыполнение не влияет на получение зачёта по домашнему заданию.
В рамках того же проекта из каталога assets вам даны ключи. Они находятся в каталогах keys1
и keys2
соответственно. Ключи предназначены для server1
и server2
соответственно.
Используя полученную вами в первом задании схему взаимодействия, запросы и ответы на каждом этапе, попробуйте предположить, для чего используются эти ключи.
Несколько подсказок
- Попробуйте сравнить содержимое каталогов
keys1
иkeys2
. - Попытайтесь подменить один или несколько ключей и посмотреть, на что это повлияет. Не забудьте перезапустить тот сервис, для которого вы поменяли ключ.
- Возможно, часть передаваемых данных закодирована каким-то алгоритмом. Попробуйте декодировать её и посмотреть, есть ли данные, которые указывают на то, как использовались ключи.
В качестве решения пришлите информацию:
- Для чего и на каком этапе используется, если используется, каждый ключ из каталога
keys1
. - Для чего и на каком этапе используется, если используется, ключ из каталога
keys2
.