Using telnet to manipulate a twisted server

    To start things off, we're going to create a simple server that just gives you remote access to a Python interpreter. We will use a telnet client to access this server.

    Run twistd telnet -p 4040 -u admin -w admin at your shell prompt. The Application has a telnet server that you specified to be on port 4040, and it will start listening for connections on this port. Try connecting with your favorite telnet utility to 127.0.0.1 port 4040.

    $ telnet localhost 4040
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    
    twisted.manhole.telnet.ShellFactory
    Twisted 1.1.0
    username: admin
    password: admin
    >>>
    

    Now, you should see a Python prompt -- >>>. You can type any valid Python code here. Let's try looking around.

    >>> dir()
    ['__builtins__']
    

    Ok, not much. let's play a little more:

    >>> import __main__
    >>> dir(__main__)
    ['__builtins__', '__doc__', '__name__', 'os', 'run', 'string', 'sys']
    
    >>> service
    <twisted.application.internet.TCPServer instance at 0x10270f48>
    >>> service._port
    <twisted.manhole.telnet.ShellFactory on 4040>
    >>> service.parent
    <twisted.application.service.MultiService instance at 0x1024d7a8>
    

    The service object is the service used to serve the telnet shell, and that it is listening on port 4040 with something called a ShellFactory. Its parent is a twisted.application.service.MultiService, a collection of services. We can keep getting the parent attribute of services until we hit the root of all services.

    As you can see, this is quite useful - we can introspect a running process, see the internal objects, and even change their attributes. The telnet server can of course be used from straight Python code; you can see how to do this by reading the code for twisted.tap.telnet.

    A final note - if you want access to be more secure, you can even have the telnet server use SSL. Assuming you have the appropriate certificate and private key files, you can twistd telnet -p ssl:443:privateKey=mykey.pem:certKey=cert.pem -u admin -w admin. See twisted.application.strports for more examples of options for listening on a port.

    Index

    Version: 8.2.0