Похоже, что ваш способ договориться LINEMODE
недействителен.
Вы не можете отправить IAC
SB
из голубой для варианта, который не был первым переговоров с WILL
или DO
или что не ответил положительно с DO
или WILL
, соответственно.
В режиме линии, в частности, в соответствии с RFC 1184, на стороне сервера должны только когда-либо инициировать IAC
DO
LINEMODE
(не WILL
).
Затем он будет ждать клиента, чтобы ответить либо IAC
WILL
LINEMODE
или IAC
WONT
LINEMODE
. В последнем случае вы ничего не можете сделать, так как клиент не хочет поддерживать режим линии в данный момент времени, а затем отправка субсогласования будет бессмысленной (соответствующий клиент будет просто игнорировать ее).
Если клиент ответил на ваш запрос с IAC
WILL
LINEMODE
, это означает, что далее подразделены переговоры режима линии будет иметь место, но это, как правило, инициируется клиентом, не вами (сервер).
Это означает, что теперь вы должны ждать клиента, чтобы отправить отправить IAC
SB
LINEMODE
что-то IAC
SE
и в ответ на что вы должны запросить MODE
и FORWARDMASK
как подопций.
В частности, вы хотите, чтобы запросить EDIT
быть превращена на в клиенте, так как это фактический режим, в котором клиент отправляет только полные линии, и что более важно, вы хотите сделать запрос TRAPSIG
быть превращена от в клиенте , поскольку захват сигналов означает, что клиент перехватывает нажатые нажатия клавиш и переводит их в команды Telnet (например, IAC
IP
), которые вы не хотите. То есть:
IAC
SB
LINEMODE
MODE
IAC
SE
(1 означает EDIT
на и TRAPSIG
прочь.)
И вы также хотите, чтобы договориться о FORWARDMASK
, где все биты, связанные с управляющие символы, которые вы хотите получить, установлены, в противном случае вы получите эти символы только тогда, когда клиент отправит завершенную строку или даже совсем не будет.
Для Ctrl-C (ASCII-3) запрос на минимальный вперед маска будет:
IAC
SB
LINEMODE
DO
FORWARDMASK
IAC
SE
(16 десятичное Следует отметить, что биты. считается начальным с MSB, а не LSB, что может сбить с толку, если вы не знаете об этом.)
Затем вам придется ждать, пока клиент подтвердит как режим, так и маску вперед. Клиент должен соблюдать запрос сервера для настроек EDIT
и TRAPSIG
, если он ранее согласился согласовать режим линии вообще (однако это не гарантирует, что он будет передавать специальные нажатия клавиш вам), но он свободен для отказаться от передней маски.
В конце концов, если вы хотите, чтобы клиент успешно согласовал с вами нужные параметры, вам необходимо убедиться, что вы придерживаетесь протокола как можно ближе. Я предлагаю вам по крайней мере прочитать и понять образец связи в section 5.10 of the RFC.
Почему вы не включаете '', чтобы получить все символические имена в качестве макросов? –
Кроме того, что вы получаете за ответ на запрос? –
Спасибо Joachim за предложение. Я получаю ответ - IAC IP IAC DO 6. – Alok