Витой Python - как контролировать буферизованный / небуферизованный ввод в Telnet или SSH? - PullRequest
1 голос
/ 14 ноября 2011

Я хочу написать сервер Python Twisted, который передает текст своим клиентам, и я хочу, чтобы клиенты могли записывать текст обратно для манипулирования сервером. Я буду использовать Telnet, а клиенты будут использовать Putty или другой подобный терминал ... Я также был бы открыт для использования SSH, если это проще сделать.

Мой вопрос: как мне настроить сервер так, чтобы клиент мог отправлять необработанные небуферизованные байты (я не хочу, чтобы пользователь нажимал клавишу ввода после команды)? Кроме того, есть ли способ изменить конфигурацию в середине сеанса, чтобы я мог переходить туда и обратно в буферизованные / небуферизованные байты и обратно?

Я думаю, что это опция Telnet 34 "Linemode" --- http://www.freesoft.org/CIE/RFC/1700/10.htm

Я просто не знаю, как настроить Twisted, чтобы использовать это ...

Любая помощь в настройке для Telnet или SSH приветствуется !!! Спасибо!

1 Ответ

1 голос
/ 14 ноября 2011

twisted.conch.telnet.TelnetBootstrapProtocol является хорошим примером того, как выполнить согласование некоторых параметров. Также случается выполнить некоторые LINEMODE переговоры. Посмотрите подробности в реализации , но вот фрагмент кода, который показывает серверу, запрашивающему у клиента включить linemode, naws и sga:

for opt in (LINEMODE, NAWS, SGA):
    self.transport.do(opt).addErrback(log.err)

Реальный сервер может захотеть сделать больше обработки ошибок, чем log.err в случае сбоя согласования, поскольку клиент останется в состоянии, которое, по-видимому, не идеально подходит для использования с сервером.

Также взгляните на некоторые прикольные терминальные демо , которые поставляются с Twisted. Они выполняют много посимвольной обработки.

...