То, что мертво, умереть не может

«То, что мертво, умереть не может» — говорили Они, когда слышали про IRC. А я, дурак, уже почти согласился. Нет, надо всегда держать свою линию, ведь я не могу ошибаться?

Совсем недавно я писал про прекрасный WEB-клиент для IRC-протокола — https://hixon.ru/veb-mastering/krutoj-web-irc-klient.html. И, надо сказать, никто не проникся этим. Нет радости в комментариях, нет обсуждения того, что на самом деле mIRC — это лучшее решение для чатов. Да и вообще, у меня есть чувство, что никто из читателей этого ресурса не уважает такое замечательное решение для общения, как Мирка.

А, может быть, IRC и правда умер? Может, социальные сети, инстаграммы с директом, Вичаты с заказом шлюх в окне чата, и Сесурные Телеграммы — это действительно Cool, а mIRC — прошлый век, и этот протокол действительно канул в лету.

Давайте я начну с далека. Два месяца назад была супер громкая новость. Простой вопрос — какая самая популярная операционная система? Linux? MacOS? Винда? Фряха? Дос? А вот и нет. Оказывается, Интель в свои процы ставит втихаря MINIX (mini-Unix is a POSIX-compliant Unix-like operating system based on a microkernel architecture). Был большой скандал, почитать вы можете о нём, например, тут — http://www.zdnet.com/article/minix-intels-hidden-in-chip-operating-system/.

Зачем это я в теме про Мирку заговорил про операционные системы? Всё супер просто. Я был удивлен, но оказывается, что Twitch — главная стриминговая платформа в Мире (как ютуб, но для геймеров) использует внутри себя для чатов именно IRC протокол. Вот это сюрприз!

Парни из Твича совсем не скрывают своей интимной связи с IRC — они открыто экспозят этот протокол в своём Chat API — https://github.com/TwitchDev/chat-samples. В частности, для создания Бота для Twitch, в документации предлагается приконнектится на нужный канал, слушать сообщения и как-то на них реагировать.

Я попробовал пример из документации. Действительно, всё работает. Приходят все теже сообщения, что и в Веб-клиенте Твича.

51423 [main] INFO  org.pircbotx.InputParser  - :mrkillua!mrkillua@mrkillua.tmi.twitch.tv PRIVMSG #riotgamesbrazil :cnbdribles
51460 [main] INFO  org.pircbotx.InputParser  - :bieljergsen!bieljergsen@bieljergsen.tmi.twitch.tv PRIVMSG #riotgamesbrazil :Essa ai foi ensinada pelo Ronaldo9
51499 [main] INFO  org.pircbotx.InputParser  - :hrafha!hrafha@hrafha.tmi.twitch.tv PRIVMSG #riotgamesbrazil :PBLÉ
51803 [main] INFO  org.pircbotx.InputParser  - :sabakuhunter!sabakuhunter@sabakuhunter.tmi.twitch.tv PRIVMSG #riotgamesbrazil :god
52119 [main] INFO  org.pircbotx.InputParser  - :talyson100!talyson100@talyson100.tmi.twitch.tv PRIVMSG #riotgamesbrazil :LEP LUL
52219 [main] INFO  org.pircbotx.InputParser  - :drdoomsdaylol!drdoomsdaylol@drdoomsdaylol.tmi.twitch.tv PRIVMSG #riotgamesbrazil :@THEMATTAYAHU joga sc2 matta hehe, voce me fez ficar viciado nisso agora faz stream explicativa e me faz ficar bom tbm 4Head

Тут мне стало интересно, а на сколько всё это дело безопастно. Те, из вас, кто пользуются Миркой, и так, наверное, понимают, что можно сделать, зная что тут IRC-протокол. Самое банальное — это получить IP любого пользователя на любом канале. Более хитрое — получение модераторских прав на Твитч-канале с помощью захвата канала в IRC. Ну, и самая большая дичь — это реальные Хакерские атаки, используя древние IRC-уязвимости: это и распространение вирусни через Direct Client-to-Client (DCC), это и удаленное исполнение команд на компьютерах пользователей (шлётся приаватное сообщение пользователю, как команда для исполнения) — про это можно почитать в статье от 2001 года (ха-ха) на Хакере.

Видимо, ребята из Twitch тоже не лыком шиты. Все базовые команды, которые можно обычно использовать в IRC (например, информация о юзере) — тут выключены. Кроме того, автоматически не даются OP-права на каналах, даже если они не зарегистрированы. DCC и прочсие атаки я не пробовал, но, наверное, и они успешно залатаны.

Далее я решил унзать, а можно ли обойти режим на каналах Твитча — «Только для Подписчиков» (могут общаться только те люди, кто купил платную подписку на канал). Для этого взял стандартный mIRC клиент, зашёл на один из SUB-only клиент и попробовал отправить сообщение. Ожидаемо: сообщение успешно отправилось, но в веб-клиенте его никто не увидел. Хм, ребята из Твича и тут постарались.

Мне вот что интересно, а зачем это всё сделали Twitch? Получается, разработчики решали сразу несколько сложных задач. Во-первых, они попытались закрыть все известные уязвимости IRC-протокола для своих серверов. А я думаю, никто не сомневается, что за 30 лет (твою мать, этому протоколу 30!!! лет) тут много чего есть. Во-вторых, разработчики Твича были вынуждены писать кастомную бизнес логику, которой изначально нет в протоколе (всякие SUB-only сообщения, таймауты, баны и прочее). Кроме того, если (я не знаю этого) IRC — это их master-протокол (то есть, нет какого-то собственного бэкенда, и IRC — это просто прокси до основного сервера), то совсем не ясен вопрос масштабирования. Хотя, я подозреваю, что если IRC — это мастер протокол, то сервер был полностью написан с нуля на каком-нибудь Erlang, и скалирование решено отлично.

Какие же плюсы от этого получены? Трудно сказать. Можно, конечно, подумать о готовых клиентах. Но, хватит шутить, никто не пользуются чем-либо для Твича кроме двух готовых клиентов (вендорные веб и десктоп).

Возможно, можно говорить о простом API для разработчиков. Но, не думаю, что сделать простое streaming API для ботов — это проблема для инженеров из такой серьезной компании.

В общем, я супер рад, что до сих пор используются мой любимый протокол. Но, конечно же, остаются вопросы — нахера козе баян.

Категории: Программирование