Как обрабатывать IPv6 в протоколе IRC DCC - PullRequest
1 голос
/ 25 августа 2011

В сеансе связи IRC DCC для установления соединения необходимо предоставить IP-адрес и порт другому лицу. Однако как вы справляетесь с этим в мире IPv6?

Я пишу часть платформы IRC бота на Java, поэтому мне нужно уметь справляться с различными ситуациями. Кажется, не существует стандартного способа справиться с этим

Я провел несколько тестов с существующими клиентами по IPv6 (два клиента Teredo подключались к freenode по Ipv6

  • Chatzilla в Firefox ничего не отправляет. Это просто действует, как ничего не случилось
  • Xchat просто отправляет 0 как IP-адрес, что неверно.

Я знаю, что существуют некоторые расширения протокола DCC, которые отправляют IP-адрес в удобочитаемом формате, но они не являются ни стандартными, ни широко поддерживаемыми. Отправка 0 не выглядит подходящим способом для проверки моего бота на будущее.

Прямо сейчас я конвертирую адрес IPv6 в BigInteger, но на другом конце выясняю, является ли BigInteger адресом IPv4 или IPv6, меня озадачивает (я спрашиваю, как это сделать позже).

TL; DR: Каков подходящий способ обработки DCC в среде IPv6? Должен ли я отправлять 0, не следует ли вообще отправлять что-либо и вызывать в боте исключения, которые не поддерживаются, или отправлять монстра BigInteger?

1 Ответ

5 голосов
/ 26 августа 2011

Официального RFC для DCC не существует, поэтому единственным действительным документом является оригинальная спецификация CTCP:

http://www.irchelp.org/irchelp/rfc/ctcpspec.html

Какой тип предполагает IPv4:

Адрес, порт и размер следует отправлять в виде ASCII-представления десятичного целого числа, сформированного путем преобразования значений в порядок байтов хоста и обработки их как длинных без знака, коротких без знака и длинных без знака соответственно.

Возможно, вы захотите проверить, что делают mIRC и irssi, поскольку они чаще используются, чем Chatzilla и XChat, и, возможно, нашли какое-то взаимоприемлемое решение.

...