IRC

У этого термина существуют и другие значения, см. IRC (значения).

Об IRC в Википедии смотрите страницу Википедия:IRC.
IRC
Название Internet Relay Chat
Уровень (по модели OSI) Прикладной
Семейство TCP/IP
Создан в 1988
Порт/ID 194/TCP, 6667/TCP
Назначение протокола Доступ к чат-серверам
Спецификация RFC 1459, RFC 2810, RFC 2811, RFC 2812, RFC 2813
Основные реализации (клиенты) irssi, KVIrc, mIRC, X-Chat, WeeChat, Miranda IM, x3irc, Pidgin
Основные реализации (серверы) UnrealIRCd, ircnet-ircd, hybrid-ircd, Hyperion
Commons-logo.svg Медиафайлы на Викискладе

IRC (англ. Internet Relay Chat) — протокол прикладного уровня для обмена сообщениями в режиме реального времени.

Разработан в основном для группового общения, также позволяет общаться через личные сообщения и обмениваться данными, в том числе файлами.

IRC использует транспортный протокол TCP и криптографический TLS (опционально).

IRC начало завоевывать особенную популярность после операции «Буря в пустыне» (1991), когда сообщения со всего мира собирались в одном месте и в режиме «on-line» транслировались в IRC.[1]

Ввиду технической простоты реализации протокол IRC в последнее время стал использоваться при организации ботнетов в качестве средства передачи управляющих команд компьютерам-участникам ботнета от владельца.

История и спецификации

IRC был разработан в 1988 в качестве замены программы MultiUser Talk.Основная спецификация — RFC 1459 (1993).Её дополняют несколько спецификаций 2000 года:

  • RFC 2810 — Internet Relay Chat: Architecture
  • RFC 2811 — Internet Relay Chat: Channel Management
  • RFC 2812 — Internet Relay Chat: Client Protocol
  • RFC 2813 — Internet Relay Chat: Server Protocol

IRC-сеть

Файл:Irc example.gif Пример IRC-сети (буквами обозначены серверы, цифрами — клиенты)

Согласно спецификациям протокола, IRC-сеть — это группа серверов, соединённых между собой. Простейшей сетью является одиночный сервер.

Сеть должна иметь вид связного дерева, в котором каждый сервер является центральным узлом для остальной части сети.

Клиентом называется всё, что подключено к серверу, кроме других серверов. Различают два типа клиентов:

  • пользовательские;
  • сервисные.

Пересылка сообщений в IRC-сети

IRC предоставляет возможность как группового, так и приватного общения.Для группового общения существует несколько возможностей.Пользователь может отправить сообщение списку пользователей, при этом серверу отправляется список, сервер выделяет из него отдельных пользователей и отправляет копию сообщения каждому из них.Более эффективным является использование каналов. В этом случае сообщение отправляется непосредственно серверу, а сервер отправляет его всем пользователям в канале.Как при групповом, так и при приватном общении сообщения отправляются клиентам по кратчайшему пути и видимы только отправителю, получателю и входящим в кратчайший путь серверам.

Например, если клиенты 1, 2 и 3 (в примере) находятся в одном канале, то сообщение от клиента 1 будет отправлено на сервер A, затем клиенту 2 и на сервер B, который отправит его клиенту 3. Серверы C, D и E этого сообщения не увидят.

Кроме того, возможна отправка широковещательного сообщения. Сообщения клиентов, касающиеся изменения состояния сети (например, режима канала или статуса пользователя), должны отправляться всем серверам, входящим в сеть. Все сообщения, исходящие от сервера, также должны быть отправлены всем остальным серверам.

Пользовательские режимы

  • i — невидимый пользователь
  • s — получать извещения сервера
  • w — получать широковещательные сообщения
  • o — оператор сервера

Состояния каналов

Оператор канала может менять его состояние с помощью команды, добавляя/удаляя различные флаги как каналу, так и отдельным пользователям в канале.

Пользовательские флаги

  • O user — обозначает создателя канала (вручную изменить невозможно)
  • o user — обозначает оператора канала
  • h user — обозначает полуоператора канала
  • v user — даёт пользователю право отправлять сообщения в модерируемый канал

Флаги канала

  • a — анонимный канал (имена всех пользователей скрываются)
  • i — доступ в канал только по приглашению
  • m — модерируемый канал (только пользователи с флагами +o, +h, или +v могут посылать в этот канал сообщения)
  • n — только находящиеся в канале пользователи могут посылать в него сообщения
  • q — «тихий» канал (ограничение на отправку серверных сообщений)
  • p/s — приватный/секретный канал (не отображается в общем списке каналов, в него можно попасть только зная имя канала)
  • r — если в канале в течение определенного времени отсутствуют все операторы, сервер сам назначает операторов из числа пользователей в канале
  • t — тема канала может быть изменена только оператором канала
  • k — пароль канала
  • l — лимит пользователей в канале
  • b mask — запрет на доступ к каналу пользователей, совпадающих с маской mask
  • e mask — разрешает пользователям, попадающих под маску mask, заходить на канал вне зависимости от флага b
  • i mask — разрешает пользователям, попадающих под маску mask, заходить на канал вне зависимости от режима i

Команды

Регистрация и подключение

Рекомендуется использовать команды в следующем порядке:PASS -> SERVICEлибоPASS -> NICK -> USER

PASS

Параметры: <password>

Устанавливает пароль соединения.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_ALREADYREGISTRED

NICK

Параметры: <nickname>

Изменение ника.

Возможные отклики сервера:

  • ERR_NONICKNAMEGIVEN
  • ERR_ERRONEUSNICKNAME
  • ERR_NICKNAMEINUSE
  • ERR_NICKCOLLISION
  • ERR_UNAVAILRESOURCE
  • ERR_RESTRICTED

SERVICE

Параметры: <nickname> <reserved> <distribution> <type> <reserved> <info>

Регистрация нового клиента-сервиса.

Возможные отклики сервера:

  • ERR_ALREADYREGISTRED
  • ERR_NEEDMOREPARAMS
  • ERR_ERRONEUSNICKNAME
  • RPL_YOURESERVICE
  • RPL_YOURHOST
  • RPL_MYINFO

USER

Параметры: <user> <mode> <unused> <realname>

Используется в начале соединения для определения нового пользователя.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_ALREADYREGISTRED

OPER

Параметры: <name> <password>

Получение статуса оператора.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • RPL_YOUREOPER
  • ERR_NOOPERHOST
  • ERR_PASSWDMISMATCH

MODE

Параметры: <nickname> *(<«+» / «-»> <flag>)

Изменение состояния пользователя — добавление/удаление флагов; команда доступна только операторам.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_USERSDONTMATCH
  • ERR_UMODEUNKNOWNFLAG
  • RPL_UMODEIS

QUIT

Параметры: [ <Quit Message> ]

Выход пользователя из сети.

Возможные отклики сервера: отсутствуют.

SQUIT

Параметры: <server> <comment>

Выход сервера из сети; команда доступна только оператору сервера либо серверу при возникновении ошибки.

Возможные отклики сервера:

  • ERR_NOPRIVILEGES
  • ERR_NOSUCHSERVER
  • ERR_NEEDMOREPARAMS

Работа с каналами

JOIN

Параметры: <channel> *(«, » <channel>) [ <key> *(«, » <key>) ])

Вход в канал.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_BANNEDFROMCHAN
  • ERR_INVITEONLYCHAN
  • ERR_BADCHANNELKEY
  • ERR_CHANNELISFULL
  • ERR_BADCHANMASK
  • ERR_NOSUCHCHANNEL
  • ERR_TOOMANYCHANNELS
  • ERR_TOOMANYTARGETS
  • ERR_UNAVAILRESOURCE
  • RPL_TOPIC

PART

Параметры: <channel> *(«, « <channel>) [ <Part Message> ]

Выход из канала.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_NOSUCHCHANNEL
  • ERR_NOTONCHANNEL

MODE

Параметры: <channel> *((„-“ / „+“) *<modes> *<modeparams>)

Изменение режима канала; в команде допускается не более трех режимов с параметрами.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_KEYSET
  • ERR_NOCHANMODES
  • ERR_CHANOPRIVSNEEDED
  • ERR_USERNOTINCHANNEL
  • ERR_UNKNOWNMODE
  • RPL_CHANNELMODEIS
  • RPL_BANLIST
  • RPL_ENDOFBANLIST
  • RPL_EXCEPTLIST
  • RPL_ENDOFEXCEPTLIST
  • RPL_INVITELIST
  • RPL_ENDOFINVITELIST
  • RPL_UNIQOPIS

TOPIC

Параметры: <channel> [»: » <topic> ]

Изменение или просмотр темы канала.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_NOTONCHANNEL
  • RPL_NOTOPIC
  • RPL_TOPIC
  • ERR_CHANOPRIVSNEEDED
  • ERR_NOCHANMODES

NAMES

Параметры: [ <channel> *(«, » <channel>) [ <target> ] ]

Просмотреть список имен пользователей, подключенных к серверу target и присутствующих в канале channel.

Возможные отклики сервера:

  • ERR_TOOMANYMATCHES
  • ERR_NOSUCHSERVER
  • RPL_NAMREPLY
  • RPL_ENDOFNAMES

LIST

Параметры: [ <channel> *(«, » <channel>) [ <target> ] ]

Просмотр списка каналов/статуса указанных каналов.

Возможные отклики сервера:

  • ERR_TOOMANYMATCHES
  • ERR_NOSUCHSERVER
  • RPL_LIST
  • RPL_LISTEND

INVITE

Параметры: <nickname> <channel>

Пригласить пользователя в канал.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_NOSUCHNICK
  • ERR_NOTONCHANNEL
  • ERR_USERONCHANNEL
  • ERR_CHANOPRIVSNEEDED
  • RPL_INVITING
  • RPL_AWAY

KICK

Параметры: <channel> *(«, » <channel>) <user> *(«, » <user>) [<comment>]

Удаление пользователя из канала.

Возможные отклики сервера:

  • ERR_NEEDMOREPARAMS
  • ERR_NOSUCHCHANNEL
  • ERR_BADCHANMASK
  • ERR_CHANOPRIVSNEEDED
  • ERR_USERNOTINCHANNEL
  • ERR_NOTONCHANNEL

Отправка сообщений

PRIVMSG

Параметры: <msgtarget> <text to be sent>

Отправка личного (приватного) сообщения.

Возможные отклики сервера:

  • ERR_NORECIPIENT
  • ERR_NOTEXTTOSEND
  • ERR_CANNOTSENDTOCHAN
  • ERR_NOTOPLEVEL
  • ERR_WILDTOPLEVEL
  • ERR_TOOMANYTARGETS
  • ERR_NOSUCHNICK
  • RPL_AWAY

NOTICE

Параметры: <msgtarget> <text>

Команда используется аналогично PRIVMSG, но без получения автоматического ответа.

Работа с серверами

MOTD

Параметры: [ <target> ]

Установка т.наз. «сообщения дня».

Возможные отклики сервера:

  • RPL_MOTDSTART
  • RPL_MOTD
  • RPL_ENDOFMOTD
  • ERR_NOMOTD

LUSERS

Параметры: [ <mask> [ <target> ] ]

Сведения о пользователях, подключенных к сети/подсети, соответствующей указанной маске/серверу.

Возможные отклики сервера:

  • RPL_LUSERCLIENT
  • RPL_LUSEROP
  • RPL_LUSERUNKOWN
  • RPL_LUSERCHANNELS
  • RPL_LUSERME
  • ERR_NOSUCHSERVER

VERSION

Параметры: [ <target> ]

Версия программы-сервера.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • RPL_VERSION

STATS

Параметры: [ <query> [ <target> ] ]

Статистика по серверу.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • RPL_STATSLINKINFO
  • RPL_STATSUPTIME
  • RPL_STATSCOMMANDS
  • RPL_STATSOLINE
  • RPL_ENDOFSTATS

LINKS

Параметры: [ [ <remote server> ] <server mask> ]

Имена серверов, подключенных к указанному/текущему.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • RPL_LINKS
  • RPL_ENDOFLINKS

TIME

Параметры: [ <target> ]

Локальное время сервера.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • RPL_TIME

CONNECT

Параметры: <target server> <port> [ <remote server> ]

Попытка подключить текущий сервер к указанному через указанный порт.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • ERR_NOPRIVILEGES
  • ERR_NEEDMOREPARAMS

TRACE

Параметры: [ <target> ]

Путь к указанному серверу.

Возможные отклики:

  • ERR_NOSUCHSERVER
  • RPL_TRACELINK
  • RPL_TRACECONNECTING
  • RPL_TRACEHANDSHAKE
  • RPL_TRACEUNKNOWN
  • RPL_TRACEOPERATOR
  • RPL_TRACEUSER
  • RPL_TRACESERVER
  • RPL_TRACESERVICE
  • RPL_TRACENEWTYPE
  • RPL_TRACECLASS
  • RPL_TRACELOG
  • RPL_TRACEEND

ADMIN

Параметры: [ <target> ]

Информация об администраторе указанного/текущего сервера.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • RPL_ADMINME
  • RPL_ADMINLOC1
  • RPL_ADMINLOC2
  • RPL_ADMINEMAIL

INFO

Параметры: [ <target> ]

Информация о сервере.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • RPL_INFO
  • RPL_ENDOFINFO

Работа с клиентами-сервисами

SERVLIST

Параметры: [ <mask> [ <type> ] ]

Список доступных сервисов.

Возможные отклики сервера:

  • RPL_SERVLIST
  • RPL_SERVLISTEND

SQUERY

Параметры: <servicename> <text>

Аналогично PRIVMSG.

Работа с данными пользователей

WHO

Параметры: [ <mask> [ «o» ] ]

Данные пользователей, ники которых соответствуют указанной маске.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • RPL_WHOREPLY
  • RPL_ENDOFWHO

WHOIS

Параметры: [ <target> ] <mask> *(«, » <mask>)

Данные об определенном пользователе.

Возможные отклики сервера:

  • ERR_NOSUCHSERVER
  • ERR_NONICKNAMEGIVEN
  • RPL_WHOISUSER
  • RPL_WHOISCHANNELS
  • RPL_WHOISCHANNELS
  • RPL_WHOISSERVER
  • RPL_AWAY
  • RPL_WHOISOPERATOR
  • RPL_WHOISIDLE
  • ERR_NOSUCHNICK
  • RPL_ENDOFWHOIS

WHOWAS

Параметры: <nickname> *(«, » <nickname>) [ <count> [ <target> ] ]

Данные пользователя, отсутствующего в сети, то есть уже не существующего.

Возможные отклики сервера:

  • ERR_NONICKNAMEGIVEN
  • ERR_WASNOSUCHNICK
  • RPL_WHOWASUSER
  • RPL_WHOISSERVER
  • RPL_ENDOFWHOWAS

Прочие команды

KILL

Параметры: <nickname> <comment>

Разрыв соединения с указанным пользователем со стороны сервера.

Возможные отклики сервера:

  • ERR_NOPRIVILEGES
  • ERR_NEEDMOREPARAMS
  • ERR_NOSUCHNICK
  • ERR_CANTKILLSERVER

PING

Параметры: <server1> [ <server2> ]

Проверка активности клиента/сервера на другой стороне соединения.

Возможные отклики:

  • ERR_NOORIGIN
  • ERR_NOSUCHSERVER

PONG

Параметры: <server> [ <server2> ]

Ответ на сообщение PING от сервера server серверу server2.

Возможные отклики:

  • ERR_NOORIGIN
  • ERR_NOSUCHSERVER

ERROR

Параметры: <error message>

Используется сервером для сообщения об ошибке.

Клиентские приложения для IRC-сетей

Наиболее популярные приложения для различных ОС:

Windows:

mIRC, Miranda IM, Trillian, Pidgin, KVIrc, XChat

Unix и Linux:

Quassel, Kopete, Irssi, XChat, Konversation, KVIrc, Pidgin, ircII

Mac OS X:

Snak, Ircle, Adium, Colloquy, KVIrc

AmigaOS:

AmIRC, AIRcOS, WookieChat, BenderIRC, BitchX, BlackIRC

Android:

androIRC, Andchat, DaraIRC, fIRC chat, IRC radio, Yaaic, AiCiA, Droid-Life IRC

Специфика русскоязычного IRC

Использование русского языка в IRC не опирается ни на какой стандарт.Однако, имеется ряд обычаев и соглашений, возникших в процессе эволюции различных русскоязычных IRC-сообществ.

История вопроса

Первые русскоговорящие каналы возникли ещё в 1990-х годах в международных сетях, таких как DALnet и IRCNet. Первоначально, под влиянием UNIX-культуры, было принято кодировать буквы русского алфавита в KOI-8.Примерно с 1995 года начался приток пользователей Windows, которые зачастую вообще не имели понятия, что такое кодовая страница и не знали различия между кириллицей и Windows-1251.Данное противоречие вызвало много конфликтов.

Стихийно возникшее в те времена соглашение помещало вопрос о кодировках в ве́дение конкретных каналов.Это было очень неудобно для пользователей, однако на тот момент иного выхода не было.Отчасти именно эта проблема стимулировала примерно с 2000 года усиленное формирование отдельных русскоязычных сетей, где вопросы кодировки могли бы решаться централизованно.

Обычаи современных русскоязычных сетей

Традиционно, в международных IRC-сетях клиенты посылают и принимают сообщения, состоящие из байтов; при этом вопрос об интерпретации не ASCII-байтов оставляется на усмотрение клиентов.Все сколь-нибудь развитые русскоязычные сети, при всех их различиях, придерживаются иного принципа: клиенты посылают и принимают сообщения, состоящие из символов.То есть, если правильно настроенный клиент отправляет на канал букву «Ы», то все подключенные к каналу правильно настроенные клиенты будут принимать тоже букву «Ы», независимо от того, как каждый из них предпочитает её кодировать.

На практике это обычно реализуется наличием на сервере нескольких TCP-портов, на каждом из которых используется определённая кодировка. Список этих портов принято помещать в MOTD (приветствие сервера).Таким образом, вопрос о «правильной настройке» клиента сохраняется, однако для пользователя выбрать порт подключения несравненно проще, нежели заниматься установкой таблиц перекодировок символов, возможность чего, кстати, и не во всяком клиенте предусмотрена.Иногда (хотя и не обязательно), серверное ПО позволяет переключить кодировку без отсоединения от сервера — хотя по ряду причин такое изменение кодировки работает неаккуратно.

Как правило, каждая сеть использует свою внутреннюю кодировку (чаще всего это Windows-1251 и почти никогда UTF-8; почему — см. ниже), при этом данные, передаваемые или принимаемые клиентами, с кодировками отличными от внутренней, подвергаются перекодировке (немедленной при приёме, проводимой в момент формирования входящего сообщения — при передаче).

Ники

Исторически использование букв кириллицы в никах было невозможно.Однако самая большая русскоязычная IRC-сеть RusNet позволяет пользоваться кириллическими никами и регистрировать их.

UTF-8 — за и против

Сторонники интернационализации обычно считают UTF-8 перспективной кодировкой для всех языков, включая русский.Следует однако отметить, что одна буква кириллицы в UTF-8 занимает два байта, что создаёт некоторую дополнительную нагрузку на сети и ограничивает максимальную длину одного сообщения.По стандарту, сообщение IRC не может иметь длину больше 510 байтов, из которых собственно на текст приходится никак не больше 499 (по нереалистично завышенной оценке).Следовательно, отправить в одном сообщении больше 249 русских букв оказывается невозможно.Ограничение размера сообщений вызывает ещё одну неприятность: при попытке превысить установленный предел сервер обрезает сообщения.Если срез пройдёт посередине русской буквы (то есть будет передан первый её байт, но отброшен второй), то получившаяся последовательность байтов перестанет, с точки зрения UTF-8, быть правильной строкой.Ряд клиентов (например, Xchat или mIRC) отобразят такое сообщение как 8-битное (например, в Latin-1 или Windows-1251), что сделает его полностью нечитаемым и занимающим к тому же много места на экране.

Единственным несомненным преимуществом использования UTF-8 для кодировки русского языка является возможность свободно цитировать тексты на других языках, а также использовать экзотические символы наподобие «→» и «☺».К тому же, являясь клиентом IRC-сети, в которой UTF-8 принят повсеместно, можно будет общаться сразу на многих языках, не заботясь о техническом представлении букв.Пока, однако, неизвестны многоязычные сети, явно оговаривающие необходимость использования только UTF-8, использующие UTF-8 в качестве внутренней кодировки, или каким-либо иным образом упорядочивающие кодировку символов клиентами. За исключением IRC сервера внутри сети I2P.

См. также

Примечания

  1. Логи на сайте ibiblio.org

Ссылки