2015-11-04 6 views
16

Я использую демо rdpy-rdpmitm demo 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