Binary Golf Grand Prix 5 - openssl s_client

Есть такое занятный конкурс: "Binary Golf Grand Prix". И в этом 2024 году мне захотелось принять участие в (уже) пятом состязании:

https://binary.golf/5/

The Binary Golf Grand Prix is a yearly contest to create the smallest file that does a specific thing. Inspired by code golf and file format hacking, Binary Golf is the practice of creating tiny binary files, polyglots, or weird machines.

Задача довольно простая: сформировать файл с минимальным содержимым, который можно как-то запустить. Запущенный файл должен скачать файл `https://binary.golf/5/5` и отобразить его содержимое. Решения принимаются в виде issue к репозиторию на github:

https://github.com/binarygolf/BGGP/issues

Моё решение: openssl s_client

Скачать файл по HTTPS, говорите... то есть SSL/TLS поверх HTTP. А кто у нас главный по SSL/TLS? openssl с его командой s_client:

https://www.openssl.org/docs/man3.0/man1/openssl-s_client.html

Команда `openssl s_client -connect binary.golf:443` установит SSL/TLS-соединение с сервером. А затем нам нужно подсунуть в установленное соединение HTTP GET запрос. Минимальный запрос, который пришёл мне в голову, выглядит так:

GET /5/5 HTTP/1.0
Host: binary.golf

С тремя однобайтовыми переводами строк (последняя пустая строка обязательна) такой запрос занимает 37 байт. Вот его я и предложил в качестве решения. Пишем текстовое содержимое запроса в файл, например с именем bggp5. Содержимое bggp5 читаем командой cat и перенаправляем в стандартный поток ввода утилиты openssl s_client. Откинем для красоты служебную информацию и получится что-то вроде:

$ cat bggp5 | openssl s_client -quiet -connect binary.golf:443 2> /dev/null | tail -n 1
Another #BGGP5 download!! @binarygolf https://binary.golf

Комментарии через ActivityPub (Fediverse) можно оставить здесь:

https://honk.any-key.press/u/continue/h/Tv6ftDnMLY1934z9b7