python - ¿Cómo hago que rdpy-rdpmitm permita que el cliente vuelva a ingresar el nombre de usuario y la contraseña cuando la contraseña no es incorrecta?
(2)
Realmente no conozco la biblioteca que está utilizando, pero no puede simplemente probar si hay un error en la conexión y luego volver a intentar la conexión con su código anterior, es decir, algo similar a lo siguiente:
Python 2.x
password = raw_input("Please re-enter your password:")
Python 3.x
password = input("Please re-enter your password")
Utilizo la demo rdpy-rdpmitm
de rdpy
para implementar un proxy rdp, pero quiero verificar la contraseña antes de conectarme a Target y dejar que el cliente vuelva a ingresar el nombre de usuario y la contraseña. Mi código es así; ¿Cómo implemento el método OnReady
?
class ProxyServer(rdp.RDPServerObserver):
def __init__(self, controller, target, clientSecurityLevel, rssRecorder):
"""
@param controller: {RDPServerController}
@param target: {tuple(ip, port)}
@param rssRecorder: {rss.FileRecorder} use to record session
"""
rdp.RDPServerObserver.__init__(self, controller)
self._target = target
self._client = None
self._rss = rssRecorder
self._clientSecurityLevel = clientSecurityLevel
def onReady(self):
"""
@summary: Event use to inform state of server stack
First time this event is called is when human client is connected
Second time is after color depth nego, because color depth nego
restart a connection sequence
@see: rdp.RDPServerObserver.onReady
"""
if self._client is None:
# try a connection
domain, username, password = self._controller.getCredentials()
self._rss.credentials(username, password, domain, self._controller.getHostname())
width, height = self._controller.getScreen()
self._rss.screen(width, height, self._controller.getColorDepth())
if checkPassword(username, password): #password ok
reactor.connectTCP(''127.0.0.1'', 3389, ProxyClientFactory(self, width, height, domain, username, password,self._clientSecurityLevel))
else:
pass
#how to make client re-input username and password in this place
intenta usar la recursividad:
class ProxyServer(rdp.RDPServerObserver):
def __init__(self, controller, target, clientSecurityLevel, rssRecorder):
"""
@param controller: {RDPServerController}
@param target: {tuple(ip, port)}
@param rssRecorder: {rss.FileRecorder} use to record session
"""
rdp.RDPServerObserver.__init__(self, controller)
self._target = target
self._client = None
self._rss = rssRecorder
self._clientSecurityLevel = clientSecurityLevel
def onReady(self):
"""
@summary: Event use to inform state of server stack
First time this event is called is when human client is connected
Second time is after color depth nego, because color depth nego
restart a connection sequence
@see: rdp.RDPServerObserver.onReady
"""
if self._client is None:
# try a connection
domain, username, password = self._controller.getCredentials()
self._rss.credentials(username, password, domain, self._controller.getHostname())
width, height = self._controller.getScreen()
self._rss.screen(width, height, self._controller.getColorDepth())
if checkPassword(username, password): #password ok
reactor.connectTCP(''127.0.0.1'', 3389, ProxyClientFactory(self, width, height, domain, username, password,self._clientSecurityLevel))
else:
onReady(self)
De esta manera se repite hasta que la contraseña sea correcta.