Прямая связь от клиента к клиенту

редактировать

Прямая связь от клиента к клиенту (DCC ) (первоначально Прямое клиентское соединение ) - это подпротокол, связанный с IRC, позволяющий одноранговым узлам взаимодействовать с использованием сервера IRC для подтверждения связи для обмена файлами или выполнения чаты без ретрансляции. После установки типичный сеанс DCC запускается независимо от сервера IRC. Первоначально разработанный для использования с ircII, теперь он поддерживается многими IRC-клиентами. Некоторые одноранговые клиенты на серверах с протоколом napster также имеют возможность отправки / получения DCC, включая TekNap, SunshineUN и Lopster. Вариант протокола DCC под названием SDCC (Secure Direct Client-to-Client), также известный как DCC SCHAT, поддерживает зашифрованные соединения. RFC-спецификации по использованию DCC не существует.

DCC-соединения могут быть инициированы двумя разными способами:

  • Наиболее распространенный способ - использовать CTCP для инициирования сеанса DCC. CTCP отправляется от одного пользователя по сети IRC другому пользователю.
  • Другой способ инициировать сеанс DCC - это подключение клиента напрямую к серверу DCC. При использовании этого метода трафик не будет проходить через сеть IRC (участвующие стороны не должны быть подключены к сети IRC, чтобы инициировать соединение DCC).
Содержание
  • 1 История
  • 2 Общий DCC приложения
    • 2.1 DCC CHAT
      • 2.1.1 Доска DCC
    • 2.2 DCC SEND
      • 2.2.1 Эксплойт DCC SEND
    • 2.3 DCC XMIT
    • 2.4 Пассивный DCC
      • 2.4.1 DCC Server
      • 2.4.2 RDCC
      • 2.4.3 DCC REVERSE
      • 2.4.4 DCC RSEND
      • 2.4.5 Reverse / Firewall DCC
    • 2.5 Файловые серверы (FSERV)
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
История

ircII был первым IRC-клиентом, реализовавшим протоколы CTCP и DCC. Протокол CTCP был реализован Майклом Сандрофом в 1990 году для ircII версии 2.1. Протокол DCC был реализован Троем Ролло в 1991 году для версии 2.1.2, но никогда не предназначался для переноса на другие клиенты IRC.

Общие приложения DCC

DCC CHAT

Сервис ЧАТ позволяет пользователям общаться друг с другом через DCC-соединение. Трафик будет идти напрямую между пользователями, а не через сеть IRC. По сравнению с обычной отправкой сообщений это снижает нагрузку на сеть IRC, позволяет сразу отправлять большие объемы текста из-за отсутствия защиты от флуда и делает обмен более безопасным, не раскрывая сообщение серверам IRC (однако сообщение все еще находится в виде открытого текста ).

DCC CHAT обычно инициируется с помощью подтверждения CTCP. Пользователь, желающий установить соединение, отправляет целевой протокол CTCP:

DCC CHAT

и принадлежат отправителю и выражаются целыми числами. - это «чат» для стандартного DCC CHAT. Затем принимающая сторона может подключиться к заданному порту и адресу.

После того, как соединение установлено, протокол, используемый для DCC CHAT, очень прост: пользователи обмениваются сообщениями, завершенными CRLF. Сообщения, которые начинаются с ASCII 001 (control-A, представлен ниже ^ A ) и слова «ACTION», и заканчиваются другим ASCII 001, интерпретируются как эмоции:

^AACTION машет на прощание ^A

DCC Whiteboard

Это расширение DCC CHAT, позволяющее отправлять простые команды рисования, а также строки текста. DCC Whiteboard инициируется с помощью квитирования, аналогичного DCC CHAT, с заменой протокола «chat» на «wboard»:

DCC CHAT wboard

После установления соединения два клиента обмениваются CRLF -завершенные сообщения. Сообщения, которые начинаются (и, возможно, заканчиваются) с ASCII 001, интерпретируются как специальные команды; команда ACTION представляет эмоцию, в то время как другие вызывают рисование линий на поверхности доски пользователя или позволяют двум клиентам согласовать набор функций.

DCC SEND

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

Первоначальное рукопожатие состояло в том, что отправитель отправлял получателю следующий CTCP:

DCC SEND

Как и в случае с DCC CHAT, и - это IP-адрес и порт, по которому отправитель машина будет прослушивать входящее соединение. Некоторые клиенты заключают имена файлов в двойные кавычки пробелами. Обычно в качестве последнего аргумента добавляют размер файла:

DCC SEND

На этом этапе в исходной спецификации получатель либо подключался к заданному адресу и порту и ждал данных, либо игнорировал запрос, но для клиентов, поддерживающих расширение DCC RESUME, третья альтернатива - попросить отправителя пропустить часть файла, отправив ответ CTCP:

DCC RESUME

Если отправляющий клиент поддерживает DCC RESUME, он ответит:

DCC ACCEPT

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

Данные отправляются клиенту блоками, каждый из которых клиент должен подтвердить, отправив общее количество полученных байтов в виде 32-битного сетевого порядка байтов. целое число. Это замедляет соединения и является избыточным из-за TCP. Расширение предварительной отправки несколько снимает эту проблему, не ожидая подтверждений, но поскольку получатель по-прежнему должен отправлять их для каждого получаемого блока, в случае, если отправитель их ожидает, это полностью не решается.

Другое расширение, TDCC, или турбо DCC, удаляет подтверждения, но требует немного измененного квитирования и широко не поддерживается. В старых версиях TDCC слово SEND в подтверждении заменено на TSEND; в более поздних версиях используется слово SEND, но после квитирования добавляется буква "T", что делает эту версию TSEND совместимой с другими клиентами (при условии, что они могут анализировать измененное рукопожатие).

Эксплойт DCC SEND

Эксплойт DCC send может относиться к двум ошибкам: вариант ошибка переполнения буфера в mIRC, вызванная именами файлов длиннее 14 в некоторых маршрутизаторах Netgear, D-Link и Linksys, вызванных использованием порта 0. Эксплойт маршрутизатора, в частности, может запускаться, когда фраза «DCC SEND», за которой следует не менее 6 символов без пробелов или новых строк, появляется в любом месте потока TCP на порту 6667, а не только тогда, когда был сделан фактический запрос DCC SEND.

DCC XMIT

Служба XMIT - это модифицированная версия DCC SEND, которая позволяет возобновлять файлы и сокращает бесполезный трафик из длинных запросов ACK. XMIT широко не поддерживается.

Подтверждение связи XMIT несколько отличается от рукопожатия SEND. Отправитель отправляет CTCP, предлагающий файл получателю:

DCC XMIT [ [ [ ]]]

Здесь квадратные скобки заключают необязательные части. - это протокол, используемый для передачи; в настоящее время определяется только «чистый». В отличие от стандартного DCC SEND, может быть в дополнительных формах стандартной записи с точками для IPv4 или в шестнадцатеричной или смешанной нотации для IPv6. Чтобы оставить ранний параметр пустым, но по-прежнему указать более поздний, можно указать более ранний параметр как «-». Если получатель не реализует используемый протокол, он отправит ответ CTCP в формате:

ERRMSG DCC CHAT недоступен

CHAT используется здесь для обеспечения совместимости с сообщениями об ошибках, отправляемыми расширенным DCC. ЧАТ. Если получатель отклоняет передачу, он отправляет следующий ответ CTCP:

ERRMSG DCC CHAT отклонено

Другие ошибки сообщаются таким же образом. Если получатель желает и может получить файл, он подключится к заданному адресу и порту. Что произойдет дальше, зависит от используемого протокола.

В случае «чистого» протокола сервер XMIT после получения соединения отправит 32-битное время t в сетевом порядке байтов, представляющий время модификации файла. Предположительно, основываясь на времени модификации локального файла, клиент затем отправит другой сетевой порядок байтов long, смещение, которое сервер должен искать при отправке файла. Это должно быть установлено на ноль, если требуется весь файл, или на размер локального файла, если клиент желает возобновить предыдущую загрузку.

Хотя XMIT работает быстрее, чем SEND, он имеет одно из тех же ограничений: невозможно определить размер файла, если его размер не указан в согласовании CTCP или известен заранее. Кроме того, вы не можете возобновить файл после отметки в два гигабайта из-за 32-битного смещения.

Пассивный DCC

В обычном DCC-соединении инициатор действует как сервер, а целью является клиент. Из-за широко распространенного брандмауэра и снижения сквозной прозрачности из-за NAT инициатор может быть не в состоянии действовать как сервер. Были разработаны различные способы попросить цель действовать как сервер:

DCC Server

Это расширение для обычных 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 не предоставляет возможности указать используемый порт, поэтому его нужно согласовывать вручную, что не всегда возможно, так как одна из сторон может быть не человеком. RDCC - это механизм квитирования для DCC Server, который помимо порта также предоставляет IP-адрес сервера, который клиент не сможет найти в противном случае из-за маскировки хоста. Это не пользуется широкой поддержкой.

Инициатор запрашивает порт, который прослушивает цель, отправляя запрос CTCP:

RDCC

, где - это 'c' для чата, 's' для отправки и 'f' для файловый сервер.

Цель CTCP может тогда ответить:

RDCC 0

, где и имеют то же значение, что и для обычных DCC SEND и CHAT. После этого инициатор подключается к IP-адресу и порту, и следует рукопожатие DCC Server.

DCC REVERSE

В отличие от сервера DCC, где квитирование осуществляется через прямое IP-соединение, DCC REVERSE имеет обычное квитирование CTCP, подобное тому, которое используется DCC SEND. Это широко не применяется. Отправитель предлагает файл получателю, отправляя сообщение CTCP:

DCC REVERSE

- это строка длиной от 1 до 50 символов, состоящая из символов ASCII в диапазоне от 33 до 126, и действует как идентификатор перевода.

Если получатель принимает, он отправляет ответ CTCP:

DCC REVERSE

Здесь - позиция в файле, с которой следует начать отправку, - это IP. адрес получателя в стандартной точечной нотации для IPv4 или шестнадцатеричной записи для IPv6. Затем отправитель подключается к IP-адресу и порту, указанным получателем, и следует обычная отправка DCC. И отправитель, и получатель могут отменить рукопожатие, отправив ответ CTCP:

DCC REJECT REVERSE

DCC RSEND

Это альтернатива DCC REVERSE для клиента KVIrc. Отправитель предлагает файл, отправив CTCP:

DCC RSEND

Затем получатель может принять, отправив CTCP ответ с:

DCC RECV

, а отправитель подключается к получателю и отправляет как при обычном DCC ОТПРАВИТЬ.

Обратный / Брандмауэр DCC

Этот пассивный механизм DCC поддерживается как минимум mIRC, Visual IRC, XChat, KVIrc, DMDirc, Konversation и. Отправитель предлагает файл, отправляя сообщение CTCP:

DCC SEND 0

- это IP-адрес отправителя в сетевом порядке байтов, выраженный как одно целое число (как в стандартном DCC). Число 0 отправляется вместо действительного порта, сигнализируя о том, что это обратный запрос DCC. - уникальное целое число; если TSEND используется (клиентом, который его поддерживает), к токену добавляется буква «T», чтобы получатель знал, что ему не нужно отправлять подтверждения.

Получатель может принять файл, открыв прослушивающий сокет и ответив сообщением CTCP:

DCC SEND

Это идентично исходному сообщению Reverse DCC, за исключением и определить сокет, на котором слушает приемник. - это то же самое, что и в исходном запросе, позволяющее отправителю узнать, какой запрос принимается. (Поскольку это сообщение имеет тот же формат, что и обычный запрос отправки DCC, некоторые серверы, которые фильтруют запросы DCC, могут потребовать от отправителя добавить получателя в его или ее список «DCC allow».)

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

Когда используется расширение RESUME для протокола SEND, последовательность команд становится (где '>>' указывает исходящее сообщение на инициирующей стороне и '<<' response by its peer):

>>DCC SEND 0
<< DCC RESUME 0
>>DCC ACCEPT 0
<< DCC SEND

После чего протокол работает в обычном режиме (т.е. отправитель подключается к сокету получателя).

Файловые серверы (FSERV)

DCC fserve, или файловый сервер, позволяет пользователь просматривает, читает и загружает файлы, расположенные на сервере DCC.

Обычно это осуществляется с помощью сеанса DCC CHAT (который представляет пользователю командную строку) или специальных команд CTCP для запросить файл. Файлы отправляются через DCC SEND или DCC XMIT. Существует множество реализаций файловых серверов DCC, среди которых есть команда FSERV в популярном клиенте mIRC.

См. также
  • CTCP (протокол клиент-клиент)
  • XDCC (расширенный DCC)
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-17 08:14:20
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте