Программа, реализующующая простое клиент-серверное приложение: клиент устанавливает связь с сервером, расположенным по заранее определённому адресу, на что сервер посылает ему сообщение, в котором сообщает адрес клиента.
В режиме сервера (флаг -s) программа:
- слушает введённый адрес в бесконечном цикле;
- при получении запроса отправляет ответ, содержащий IP-адрес и порт клиента. В режиме клиента программа:
- посылает запрос серверу по указанному адресу;
- ждёт ответ сервера;
- выводит полученный ответ в формате <адрес>:<порт>;
- завершает свою работу.
В зависимости от флагов запуска связь устанавливается через сокеты по протоколу TCP или UDP. Протоколу TCP соответствует флаг -t, UDP - -u. Программа не может использовать одновременно два протокола, поэтому одновременное использование флагов -t и -u недопустимо, программа должна проверять корректность переданных параметров при разборе введенной команды. По умолчанию используется TCP (в случае если не указан ни один параметр)
В программу добавлена поддержка логирования (модуль logging) по следующим каналам:
- стандартный вывод (stdout) по флагу ‘-o’ или по умолчанию;
- файл <файл> по флагу -f <файл>
Программа логирует следующие события:
- Открытие (привязка) сокета;
- Отправка сообщения;
- Получение сообщения;
- Закрытие сокета
python3 kmb.py 127.0.0.1 13000 -s -t -f log_output
- Запуск программы в режиме сервера по протоколу TCP с записью логов в файл log_output;
- Программа открывает сокет по адресу 127.0.0.1:13000
С помощью Wireshark сделаны сетевые трассы взаимодействия клиента и сервера программы. Отфильтрованы примеры одного сеанса взаимодействия для каждого из транспортных протоколов (TCP, UDP) и сохранены в отдельные файлы. TCP-соединения присутствовуют целиком, включая SYN и FIN пакеты.
- файл tcp.pcap, содержащий трассу взаимодействия по протоколу TCP;
- файл udp.pcap, содержащий трассу взаимодействия по протоколу UDP