2015-11-04 4 views
16

Ich benutze die rdpy-rdpmitm Demo von rdpy, um eine RDP-Proxy zu implementieren, aber ich möchte das Passwort vor der Verbindung zu Ziel überprüfen und Client re -input Benutzername und Passwort. Mein Code ist so; Wie implementiere ich OnReady Methode?Wie mache ich rdpy-rdpmitm lassen Client Benutzernamen und Passwort erneut eingeben, wenn das Passwort nicht inkorrekt

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 
+0

Gibt es in Ihrem Code in Ihrer Klasse sein haben, oder es auf der Außenseite sein kann? –

Antwort

0

Ich weiß nicht wirklich, die Bibliothek, die Sie verwenden, kann aber nicht einfach für einen Fehler testen, ob die Verbindung fehlschlägt und dann die Verbindung von Ihrem vorherigen Code wiederholen, das heißt etwas entlang der Linien von:

Python 2.x

password = raw_input("Please re-enter your password:") 

Python 3.x

password = input("Please re-enter your password") 
1

Versuchen Sie es mit Rekursion:

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) 

auf diese Weise, bis das Passwort wiederholt korrekt

+0

Das würde ich auch vorschlagen. Sie müssen nur aufpassen, wenn Sie zukünftige Funktionsklammern hinzufügen, diese werden auch wiederholt! – monamona

Verwandte Themen