[Twisted-Python] Telnet server: localecho "ON" for linux client but not for windows client

James Tanis james at tanis.us
Tue Nov 17 07:45:12 MST 2009


I haven't worked with the telnet protocol since the 1.x series honestly and I remember having to add a good bit of code to support all the control functions in order to get things working as nicely as I wanted. That aside, echo (or lack thereof) did work fine, but "will" will not force a client to do anything. I believe you need to use "do"/"dont" to get the effect you desire.

--
James Tanis
Technical Coordinator
Computer Science Department
Monsignor Donovan Catholic High School



On Nov 16, 2009, at 9:14 AM, filoufake-python at yahoo.fr wrote:

> Hello,
> 
> Some month ago, exarkun helped me in the development of a very simplified
> telnet server.
> 
> I observed that when I connect from a windows client, the LOCALECHO
> is set to "OFF" after the authentication. I cannot set it "ON"
> afterwards. Everything typed in the client console is hidden.
> When I use a linux client, the "ECHO" is OFF just for typing the 
> password and then ON again.
> 
> Does someone has an idea how to do with the windows client?
> I tried to set the ECHO ON using self.transport.will(ECHO) but that
> doesn't work.
> 
> Here is the code:
> 
> ############################################################
> import sys
> from zope.interface import implements
> from twisted.internet import protocol
> from twisted.python import log
> from twisted.cred import error
> from twisted.cred import portal
> from twisted.cred import checkers
> from twisted.cred import credentials
> from twisted.conch.telnet import AuthenticatingTelnetProtocol
> from twisted.conch.telnet import StatefulTelnetProtocol
> from twisted.conch.telnet import ITelnetProtocol
> from twisted.conch.telnet import TelnetTransport
> from twisted.conch.telnet import ECHO
> 
> class Realm:
>  implements(portal.IRealm)
> 
>  def requestAvatar(self, avatarId, mind, *interfaces):
>    if ITelnetProtocol in interfaces:
>      av = MyTelnet()
>      av.transport.will(ECHO)
>      av.state = 'Command'
>      return ITelnetProtocol, av, lambda:None
>    raise NotImplementedError("Not supported by this realm")
> 
> class MyTelnet(StatefulTelnetProtocol):
>  def telnet_Command(self, line):
>    print "line received via telnet", line
>    self.sendLine('coucou man, you send me %s' % line)
> 
> def main():
>  r = Realm()
>  p = portal.Portal(r)
>  c = checkers.InMemoryUsernamePasswordDatabaseDontUse()
>  c.addUser("AA", "aa")
>  p.registerChecker(c)
>  p.registerChecker(checkers.AllowAnonymousAccess())
>  f = protocol.ServerFactory()
>  f.protocol = lambda: TelnetTransport(AuthenticatingTelnetProtocol, p)
>  log.startLogging(sys.stdout)
>  from twisted.internet import reactor
>  reactor.listenTCP(4738, f)
>  reactor.run()
> 
> if __name__ == '__main__':
>  main()
> ############################################################
> 
> Best Regards,
> Philippe
> 
> 
> 
> 
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20091117/6683c3e6/attachment.html>


More information about the Twisted-Python mailing list