What is Manhole?
Manhole is an in-process service, that will accept UNIX domain socket connections and present the stack traces for all threads and an interactive prompt.
Using it we can access and modify objects or definition in the running application, like change or add the method in any class, change the definition of any method of class or module.
This allows us to make modifications in running an application without restarting the application, it makes work easy like debugging the application, you are able to check the values of the object while the program is running.
How to configure it?
from twisted.internet import reactor from twisted.conch import manhole, manhole_ssh from twisted.conch.ssh.keys import Key from twisted.cred import portal, checkers DATA = {"Service": "Manhole"} def get_manhole_factory(namespace, **passwords): def get_manhole(arg): return manhole.ColoredManhole(namespace) realm = manhole_ssh.TerminalRealm() realm.chainedProtocolFactory.protocolFactory = get_manhole p = portal.Portal(realm) p.registerChecker(checkers.InMemoryUsernamePasswordDatabaseDontUse(**passwords)) f = manhole_ssh.ConchFactory(p) f.publicKeys = {"ssh-rsa": Key.fromFile("keys/manhole.pub")} f.privateKeys = {"ssh-rsa": Key.fromFile("keys/manhole")} return f reactor.listenTCP(2222, get_manhole_factory(globals(), admin='admin')) reactor.run()
Once you run above snippet, the service will start on TCP port 2222.
You need to use SSH command to get login into the service.
See below how it looks like.
[lalit : ~]₹ ssh admin@localhost -p 2222 admin@localhost's password: >>> dir() ['DATA', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'checkers', 'get_manhole_factory', 'manhole', 'manhole_ssh', 'portal', 'reactor'] >>> DATA {'Service': 'Manhole'} >>> DATA['Service'] = "Edited" >>> DATA {'Service': 'Edited'}
[lalit : ~]₹ ssh admin@localhost -p 2222 admin@localhost's password: >>> dir() ['DATA', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'checkers', 'get_manhole_factory', 'manhole', 'manhole_ssh', 'portal', 'reactor'] >>> DATA {'Service': 'Edited'}
Here In the first login, we change the value in DATA dictionary in running application, as we can see we get the new value in the second login.
The post Manhole service in Twisted Application. appeared first on Lintel Technologies Blog.
from Planet Python
via read more
No comments:
Post a Comment