2015-11-04 17 views
16

Bir rdp proxy uygulamak için rdpy'un rdpy-rdpmitm tanıtımını kullanıyorum, ancak hedefe bağlanmadan önce parolayı kontrol etmek ve istemciye yeniden izin vermek istiyorum -kullanıcı kullanıcı adı ve şifre. Benim kodum böyle; OnReady yöntemini nasıl uygularım?rdpy-rdpmitm istemcisinin parola yanlış olduğunda kullanıcı adı ve parolayı yeniden girmesini sağlarım

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

dışarıdan olabilir kodunuzun sınıf içinde olmak zorunda ya mı doğrudur? –

cevap

0

Gerçekten kullandığınız kütüphane bilmiyorum, ama sadece bağlantı başarısız olursa bir hata için test etmek ve daha sonra çizgisinde yani önceki kodla bağlantı, bir şeyi yeniden edemez:

Python 2.x

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

Python 3.x

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

deneyin kullanarak özyineleme:

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) 

o şifre dek tekrarlar bu şekilde

+0

Bu benim de önereceğim. Gelecek fonksiyon parantezlerini eklediğinizde sadece dikkat etmeniz gerekir, bunlar da tekrarlanacaktır! – monamona

İlgili konular