Клиент-клиентский протокол - Client-to-client protocol
Клиент-клиентский протокол (CTCP) - особый вид общения между Интернет-чат (IRC) клиенты.
CTCP - это общий протокол, реализованный большинством основных клиентов IRC, используемых сегодня.[нужна цитата ] CTCP расширяет исходный протокол IRC, позволяя пользователям запрашивать других клиентов или каналы, это заставляет всех клиентов в канале отвечать CTCP для получения конкретной информации. Кроме того, CTCP можно использовать для кодирования сообщений, которые необработанный протокол IRC не позволяет отправлять по ссылке, например, сообщения, содержащие новые строки или байт значение 0 (NULL). CTCP не устанавливает прямого соединения между клиентами; однако он обычно используется для переговоров DCC соединения.
CTCP позволяет пользователям запрашивать удаленный клиент о версии клиента, который они используют (через ВЕРСИЯ CTCP
) или время (через CTCP ВРЕМЯ
), среди прочего. Он также используется для реализации команды / me (через ДЕЙСТВИЕ CTCP
).
История
ircII был первым IRC-клиентом, реализовавшим протоколы CTCP и DCC.[1] Протокол CTCP был реализован Майклом Сандрофом в 1990 году для ircII версии 2.1,[2] в то время как протокол DCC был реализован Троем Ролло в 1991 году для версии 2.1.2.[3]
Структура
Сообщение CTCP реализовано как ПРИВМСГ
или же УВЕДОМЛЕНИЕ
где первый и последний символы сообщения ASCII значение 0x01. Кроме того, символы, которые не разрешены в протоколе IRC, экранируются. Поскольку УВЕДОМЛЕНИЕ
поскольку стандарт не должен генерировать ответ, сообщения CTCP отправляются как ПРИВМСГ
и ответ реализован с помощью УВЕДОМЛЕНИЕ
вместо ПРИВМСГ
.
Запрос CTCP инициируется на большинстве клиентов следующим образом:
CTCP <цель> <команда> <аргументы>
Где <target> целевой ник или канал, <command> это команда CTCP (например, ВЕРСИЯ
), и <arguments> являются дополнительной информацией для отправки в <target>.
Общие команды CTCP
Команды и ответы CTCP зависят от клиента; поэтому, в зависимости от клиента IRC, некоторые из следующих команд CTCP могут не вызывать ответа или будут иметь другой формат, чем показано здесь.
ВЕРСИЯ
А ВЕРСИЯ CTCP
запрос вернет имя и версию IRC-клиента, который использует цель, а в некоторых случаях техническую информацию, такую как Операционная система, тактовая частота, Производитель процессора и Архитектура процессора /Набор инструкций.
Образец ответа на ВЕРСИЯ CTCP
запрос к цели, которая использует HexChat клиент (а вилка XChat) это:
ВЕРСИЯ HexChat 2.9.1 [x86] / Windows 8 [1,46 ГГц]
ВРЕМЯ
А CTCP ВРЕМЯ
запрос вернет местное время целевого компьютера. В зависимости от клиента IRC ответ может состоять из Дата, то время (либо в 12-часовой формат или же 24-часовой формат ), год (например, 2012 г.), а иногда часовой пояс (например. стандартное восточное время ).
Образец ответа на CTCP ВРЕМЯ
запрос к цели, которая использует ChatZilla клиент:
ВРЕМЯ Пт, 23 ноября 2012 г., 19:26:42 EST
ПИНГ
А CTCP PING
запрос определит скорость пинга который существует напрямую между двумя клиентами (т.е. дисконтирует сервер). В CTCP PING
команда работает, отправляя (часто) целое число аргумент (а отметка времени ) целевому клиенту, целевой клиент затем отвечает, предоставляя точно такой же числовой параметр. В разница между исходной меткой времени и текущей меткой времени вычисляется, и результат отображается пользователю, который инициировал CTCP PING. Чаще всего метка времени, использующая миллисекунды используется из-за того, что большинство пользователей с широкополосный Интернет-соединения с пингом менее 1 секунды.
Образец CTCP PING
запрос на таргетинг <nickname> от XChat клиент:
CTCP PING 23152511
Аналогичным образом, образец вывода, созданный из разницы (см. Выше):
Ping-ответ от <ник>: 0,53 сек.
DCC ЧАТ
Сервис ЧАТ позволяет пользователям общаться друг с другом через DCC-соединение. Трафик будет идти напрямую между пользователями, а не через сеть IRC. По сравнению с обычной отправкой сообщений это снижает нагрузку на сеть IRC, позволяет сразу отправлять большие объемы текста из-за отсутствия защиты от флуда и делает обмен более безопасным, не раскрывая сообщение серверам IRC (однако сообщение все еще в простой текст ).
DCC CHAT обычно запускается с помощью CTCP рукопожатие. Пользователь, желающий установить соединение, отправляет целевой объект CTCP:
DCC CHAT <протокол>
<порт>
Как только соединение установлено, протокол, используемый для DCC CHAT, очень прост: пользователи обмениваются CRLF -завершенные сообщения. Сообщения, начинающиеся с ASCII 001 (control-A, представленный ниже как ^ А) и слово «ДЕЙСТВИЕ» и заканчиваются другим кодом ASCII 001, интерпретируются как эмоции:
^ АACTION машет рукой на прощание^ А
Доска DCC
Это расширение DCC CHAT, позволяющее отправлять простые команды рисования, а также строки текста. DCC Whiteboard запускается с помощью рукопожатия, аналогичного DCC CHAT, с заменой протокола "chat" на "wboard":
DCC CHAT wboard
<порт>
Как только соединение установлено, два клиента обмениваются CRLF -завершенные сообщения. Сообщения, которые начинаются (и, возможно, заканчиваются) с ASCII 001, интерпретируются как специальные команды; команда ACTION представляет эмоцию, в то время как другие вызывают рисование линий на поверхности доски пользователя или позволяют двум клиентам согласовать набор функций.
DCC ОТПРАВИТЬ
Служба SEND позволяет пользователям отправлять файлы друг другу. Первоначальная спецификация для рукопожатия не позволяла получателю узнать общий размер файла или возобновить передачу. Это заставило клиентов использовать собственные расширения для рукопожатия, многие из которых получили широкую поддержку.
Первоначальное рукопожатие состояло из отправки отправителем следующего CTCP получателю:
DCC SEND <имя файла>
<порт>
Как и в случае с DCC CHAT,
DCC SEND <имя файла>
<порт> <размер файла>
На этом этапе в исходной спецификации получатель либо подключался к заданному адресу и порту и ждал данных, либо игнорировал запрос, но для клиентов, поддерживающих расширение DCC RESUME, третья альтернатива - попросить отправителя пропустить часть файл, отправив ответ CTCP:
DCC RESUME <имя файла> <порт> <положение>
Если отправляющий клиент поддерживает DCC RESUME, он ответит:
DCC ACCEPT <имя файла> <порт> <положение>
и получатель может подключиться к заданному адресу и порту и прослушивать данные для добавления в уже существующий файл.
Данные отправляются клиенту блоками, каждый из которых клиент должен подтвердить, отправив общее количество полученных байтов в виде 32-битный сетевой порядок байтов целое число. Это замедляет соединения и является избыточным из-за TCP. Расширение предварительной отправки несколько облегчает эту проблему, не ожидая подтверждений, но поскольку получатель по-прежнему должен отправлять их для каждого получаемого блока, в случае, если отправитель их ожидает, это полностью не решается.
Другое расширение, TDCC или turbo DCC, удаляет подтверждения, но требует немного измененного квитирования и широко не поддерживается. В старых версиях TDCC слово SEND в подтверждении заменено на TSEND; в более поздних версиях используется слово SEND, но после квитирования добавляется буква "T", что делает эту версию TSEND совместимой с другими клиентами (при условии, что они могут анализировать измененное рукопожатие).
DCC SEND эксплойт
Эксплойт DCC send может относиться к двум ошибкам, вариант переполнение буфера ошибка в mIRC запускается именами файлов длиннее 14 символов[4] и ошибка проверки ввода в некоторых маршрутизаторах производства Netgear, D-Link и Linksys, вызванный использованием порта 0.[5][6] Эксплойт роутера, в частности, может сработать, когда фраза 'DCC ОТПРАВИТЬ', за которым следует не менее 6 символов без пробелов или символов новой строки, появляется в любом месте TCP поток на порт 6667, а не только при фактическом запросе DCC SEND.
DCC XMIT
Служба XMIT - это модифицированная версия DCC SEND, которая позволяет возобновлять файлы и сокращает бесполезный трафик из длинных запросов ACK. XMIT широко не поддерживается.
Рукопожатие XMIT несколько отличается от рукопожатия SEND. Отправитель отправляет CTCP предлагая файл получателю:
DCC XMIT <протокол>
<порт> [<имя> [<размер> [ ]]]
Квадратные скобки заключают здесь необязательные детали. <протокол> - это протокол использовать для перевода; в настоящее время определяется только «чистый». В отличие от стандартного DCC SEND,
ERRMSG DCC CHAT <протокол> недоступен
ЧАТ используется здесь для обеспечения совместимости с сообщениями об ошибках, отправляемыми расширенным ЧАТ DCC. Если получатель отклоняет перевод, он отправляет следующий ответ CTCP:
ERRMSG DCC CHAT <протокол> отклонен
Таким же образом сообщается и о других ошибках. Если получатель желает и может получить файл, он подключится к заданному адресу и порту. Что произойдет дальше, зависит от используемого протокола.
В случае «чистого» протокола сервер XMIT после получения соединения отправит 32-битный время t в сетевой порядок байтов, представляющий время модификации файла. Предположительно, исходя из времени модификации локального файла, клиент затем отправит другой сетевой порядок байтов. длинный, смещение, которое сервер должен искать при отправке файла. Это должно быть установлено на ноль, если требуется весь файл, или на размер локального файла, если клиент желает возобновить предыдущую загрузку.
Хотя XMIT работает быстрее, чем SEND, он имеет одно из тех же ограничений, что невозможно определить размер файла, если его размер не указан в CTCP переговоры или известно заранее. Кроме того, вы не можете возобновить файл после отметки в два гигабайта из-за 32-битного смещения.
Пассивный DCC
В обычном соединении DCC инициатор действует как сервер, а целью является клиент. Из-за широко распространенного брандмауэр и снижение сквозной прозрачности из-за NAT, инициатор может не работать как сервер. Были разработаны различные способы попросить цель действовать как сервер:
DCC Сервер
Это расширение для обычных DCC SEND и CHAT было введено клиентом IRC. mIRC. DCC Server имеет умеренную поддержку, но не является стандартом для всех клиентов (см. Сравнение клиентов Internet Relay Chat ).
Он позволяет инициировать соединение DCC по IP-адресу без необходимости использования сервера IRC. Это достигается за счет того, что принимающий клиент действует как сервер (отсюда и название), ожидающий (обычно на порту 59) подтверждения от отправителя.
Для ЧАТа инициатор отправляет:
1000 <ник инициатора>
Затем цель отвечает:
1000 <целевой ник>
а все остальное происходит по стандартному протоколу DCC CHAT.
Для SEND инициатор отправляет:
1200 <ник инициатора> <размер файла> <имя файла>
Цель отвечает:
1210 <целевой ник> <возобновить позицию>
где <позиция возобновления> - это смещение в файле, с которого следует начать. Отсюда передача происходит как обычная передача DCC.
DCC Server также поддерживает файловые серверы в стиле mIRC и DCC GET.
RDCC
DCC Server не позволяет указать используемый порт, поэтому его нужно согласовывать вручную, что не всегда возможно, так как одна из сторон может быть не человеком. RDCC - это механизм квитирования для DCC Server, который помимо порта также предоставляет IP-адрес сервера, который клиент может не найти в противном случае из-за маскировки хоста. Это не пользуется широкой поддержкой.
Инициатор запрашивает порт, который прослушивает цель, отправляя запрос CTCP:
RDCC <функция> <комментарий>
где
Затем цель может ответить CTCP:
RDCC 0
<порт>
где
DCC REVERSE
В отличие от сервера DCC, где квитирование осуществляется через прямое IP-соединение, DCC REVERSE имеет обычное квитирование CTCP, подобное тому, которое используется DCC SEND. Это широко не применяется. Отправитель предлагает файл получателю, отправив сообщение CTCP:
DCC REVERSE <имя файла> <размер файла> <ключ>
<ключ> - это строка длиной от 1 до 50 символов ASCII символов в диапазоне от 33 до 126 и действует как идентификатор для передачи.
Если получатель принимает, он отправляет ответ CTCP:
DCC REVERSE <ключ> <начало>
<порт>
Здесь
DCC REJECT REVERSE <ключ>
DCC RSEND
Это клиент KVIrc, альтернативный DCC REVERSE. Отправитель предлагает файл, отправив CTCP:
DCC RSEND <имя файла> <размер файла>
Затем получатель может принять ответ CTCP, ответив:
DCC RECV <имя файла>
<порт> <начало>
и отправитель подключается к получателю и отправляет как при обычном DCC SEND.
Обратный / межсетевой экран DCC
Этот пассивный механизм DCC поддерживается как минимум mIRC, Визуальный IRC, XChat, KVIrc, DMDirc, Klient, Konversation, и PhibianIRC. Отправитель предлагает файл, отправив сообщение CTCP:
DCC SEND <имя файла>
0 <размер файла> <токен>
Получатель может принять файл, открыв прослушивающий сокет и ответив сообщением CTCP:
DCC SEND <имя файла>
<порт> <размер файла> <токен>
Это идентично исходному сообщению Reverse DCC, за исключением того, что
Затем отправитель подключается к сокету получателя, отправляет содержимое файла и ждет, пока получатель закроет сокет, когда файл будет завершен.
Когда используется расширение RESUME для протокола SEND, последовательность команд становится (где '>>' указывает исходящее сообщение на инициирующей стороне и ответ '<<' его одноранговым узлом):
>> DCC SEND <имя файла>
0 <размер файла> <токен> << DCC RESUME <filename> 0 <position> <token>
>> DCC ACCEPT <имя файла> 0 <позиция> <токен>
<< DCC SEND <filename> <peer-ip> <port> <filesize> <token>
После этого протокол работает в обычном режиме (т.е. отправитель подключается к сокету получателя).
Файловые серверы (FSERV)
DCC fserve, или файловый сервер, позволяет пользователю просматривать, читать и загружать файлы, расположенные на сервере DCC.
Обычно это реализуется с помощью сеанса DCC CHAT (который представляет пользователю командную строку) или специального CTCP команды для запроса файла. Файлы отправляются через DCC SEND или DCC XMIT. Существует множество реализаций файловых серверов DCC, среди которых есть команда FSERV в популярном mIRC клиент.
Смотрите также
- Интернет-чат (IRC)
- IRC клиент
- Сравнение клиентов Internet Relay Chat
- DCC (Прямой клиент-клиент)
Рекомендации
- ^ Пикард, Пол; Брайан Баскин; Джордж Спиллман; Маркус Сакс (1 мая 2005 г.). «Сети IRC и безопасность». Защита приложений обмена мгновенными сообщениями и P2P для предприятия (1-е изд.). Syngress. п. 386. ISBN 1-59749-017-2.
Первоначально авторы программного пакета ircII первыми разработали передачу файлов через IRC.
- ^ См. Файлы «ПРИМЕЧАНИЯ» и «source / ctcp.c», включенные в ircii-2.1.4e.tar.gz[постоянная мертвая ссылка ]
- ^ См. Файлы «ОБНОВЛЕНИЯ» и «source / dcc.c», включенные в ircii-2.1.4e.tar.gz[постоянная мертвая ссылка ]
- ^ "Информация об эксплойте SecurityFocus".
- ^ "'DCC Send 'уязвимость на маршрутизаторах Netgear ".
- ^ "'DCC Send 'уязвимость на маршрутизаторах Linksys ".