2015-11-04 167 views
16

我使用rdpy-rdpmitm演示版rdpy来实现rdp代理服务器,但我想在连接到目标服务器之前检查密码并让客户端重新启动输入用户名和密码。我的代码是这样的;我如何实施OnReady方法?我如何让rdpy-rdpmitm让客户端在密码不正确时重新输入用户名和密码

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

请问你的代码已经是你的类中,还是可以在外面? –

回答

0

我真的不知道你正在使用的库,但你不能只测试一个错误,如果连接失败,然后重试由以前的代码的东西沿着线的连接,即:

的Python 2.x的

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

Python 3.x都有

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

尝试使用递归:

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) 

这种方式重复,直到密码正确

+0

这是我会建议以及。您只需要注意何时添加未来的功能支架,这些内容也会重复使用! – monamona

相关问题