Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.66 KB | None | 0 0
  1. Traceback (most recent call last):
  2. File "C:/Users/R.Halyuta/Downloads/rdpy-master/rdpy-master/bin/rdpy-rdpclient.py", line 265, in <module>
  3. create_rpds(i["Password"].encode('utf-8'), i["IpAddress"].encode('utf-8'))
  4. File "C:/Users/R.Halyuta/Downloads/rdpy-master/rdpy-master/bin/rdpy-rdpclient.py", line 225, in create_rpds
  5. reactor.run()
  6. File "C:Python27libsite-packagesqtreactorqt4base.py", line 281, in run
  7. self.runReturn()
  8. File "C:Python27libsite-packagesqtreactorqt4base.py", line 273, in runReturn
  9. self.startRunning(installSignalHandlers=installSignalHandlers)
  10. File "C:Python27libsite-packagestwistedinternetbase.py", line 1222, in startRunning
  11. ReactorBase.startRunning(self)
  12. File "C:Python27libsite-packagestwistedinternetbase.py", line 730, in startRunning
  13. raise error.ReactorNotRestartable()
  14. twisted.internet.error.ReactorNotRestartable
  15.  
  16. import threading
  17. import time
  18. import sys, os, getopt, socket
  19. import json
  20. from PyQt4 import QtGui, QtCore
  21. from rdpy.ui.qt4 import RDPClientQt
  22. from rdpy.protocol.rdp import rdp
  23. from rdpy.core.error import RDPSecurityNegoFail
  24. from rdpy.core import rss
  25. from twisted.internet import error
  26. import rdpy.core.log as log
  27.  
  28. log._LOG_LEVEL = log.Level.INFO
  29.  
  30.  
  31. class RDPClientQtRecorder(RDPClientQt):
  32. """
  33. @summary: Widget with record session
  34. """
  35.  
  36. def __init__(self, controller, width, height, rssRecorder):
  37. """
  38. @param controller: {RDPClientController} RDP controller
  39. @param width: {int} width of widget
  40. @param height: {int} height of widget
  41. @param rssRecorder: {rss.FileRecorder}
  42. """
  43. RDPClientQt.__init__(self, controller, width, height)
  44. self._screensize = width, height
  45. self._rssRecorder = rssRecorder
  46.  
  47. def onUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, data):
  48. """
  49. @summary: Notify bitmap update
  50. @param destLeft: {int} xmin position
  51. @param destTop: {int} ymin position
  52. @param destRight: {int} xmax position because RDP can send bitmap with padding
  53. @param destBottom: {int} ymax position because RDP can send bitmap with padding
  54. @param width: {int} width of bitmap
  55. @param height: {int} height of bitmap
  56. @param bitsPerPixel: {int} number of bit per pixel
  57. @param isCompress: {bool} use RLE compression
  58. @param data: {str} bitmap data
  59. """
  60. # record update
  61. self._rssRecorder.update(destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel,
  62. rss.UpdateFormat.BMP if isCompress else rss.UpdateFormat.RAW, data)
  63. RDPClientQt.onUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress,
  64. data)
  65.  
  66. def onReady(self):
  67. """
  68. @summary: Call when stack is ready
  69. """
  70. self._rssRecorder.screen(self._screensize[0], self._screensize[1], self._controller.getColorDepth())
  71. RDPClientQt.onReady(self)
  72.  
  73. def onClose(self):
  74. """
  75. @summary: Call when stack is close
  76. """
  77. self._rssRecorder.close()
  78. RDPClientQt.onClose(self)
  79.  
  80. def closeEvent(self, e):
  81. """
  82. @summary: Convert Qt close widget event into close stack event
  83. @param e: QCloseEvent
  84. """
  85. self._rssRecorder.close()
  86. RDPClientQt.closeEvent(self, e)
  87.  
  88.  
  89. class RDPClientQtFactory(rdp.ClientFactory):
  90. """
  91. @summary: Factory create a RDP GUI client
  92. """
  93.  
  94. def __init__(self, width, height, username, password, domain, fullscreen, keyboardLayout, optimized, security,
  95. recodedPath):
  96. """
  97. @param width: {integer} width of client
  98. @param heigth: {integer} heigth of client
  99. @param username: {str} username present to the server
  100. @param password: {str} password present to the server
  101. @param domain: {str} microsoft domain
  102. @param fullscreen: {bool} show widget in fullscreen mode
  103. @param keyboardLayout: {str} (fr|en) keyboard layout
  104. @param optimized: {bool} enable optimized session orders
  105. @param security: {str} (ssl | rdp | nego)
  106. @param recodedPath: {str | None} Rss file Path
  107. """
  108. self._width = width
  109. self._height = height
  110. self._username = username
  111. self._passwod = password
  112. self._domain = domain
  113. self._fullscreen = fullscreen
  114. self._keyboardLayout = keyboardLayout
  115. self._optimized = optimized
  116. self._nego = security == "nego"
  117. self._recodedPath = recodedPath
  118. if self._nego:
  119. # compute start nego nla need credentials
  120. if username != "" and password != "":
  121. self._security = rdp.SecurityLevel.RDP_LEVEL_NLA
  122. else:
  123. self._security = rdp.SecurityLevel.RDP_LEVEL_SSL
  124. else:
  125. self._security = security
  126. self._w = None
  127.  
  128. def buildObserver(self, controller, addr):
  129. """
  130. @summary: Build RFB observer
  131. We use a RDPClientQt as RDP observer
  132. @param controller: build factory and needed by observer
  133. @param addr: destination address
  134. @return: RDPClientQt
  135. """
  136. # create client observer
  137. if self._recodedPath is None:
  138. self._client = RDPClientQt(controller, self._width, self._height)
  139. else:
  140. self._client = RDPClientQtRecorder(controller, self._width, self._height,
  141. rss.createRecorder(self._recodedPath))
  142. # create qt widget
  143. self._w = self._client.getWidget()
  144. self._w.setWindowTitle('rdpy-rdpclient')
  145. if self._fullscreen:
  146. self._w.showFullScreen()
  147. else:
  148. self._w.show()
  149. self._w.show()
  150. QtCore.QTimer.singleShot(10000, self._w.close)
  151. controller.setUsername(self._username)
  152. controller.setPassword(self._passwod)
  153. controller.setDomain(self._domain)
  154. controller.setKeyboardLayout(self._keyboardLayout)
  155. controller.setHostname(socket.gethostname())
  156. if self._optimized:
  157. controller.setPerformanceSession()
  158. controller.setSecurityLevel(self._security)
  159.  
  160. return self._client
  161.  
  162. def clientConnectionLost(self, connector, reason):
  163. # from twisted.internet import reactor
  164. """
  165. @summary: Connection lost event
  166. @param connector: twisted connector use for rdp connection (use reconnect to restart connection)
  167. @param reason: str use to advertise reason of lost connection
  168. """
  169. # try reconnect with basic RDP security
  170. if reason.type == RDPSecurityNegoFail and self._nego:
  171. # stop nego
  172. log.info("due to security nego error back to standard RDP security layer")
  173. self._nego = False
  174. self._security = rdp.SecurityLevel.RDP_LEVEL_RDP
  175. self._client._widget.hide()
  176. connector.connect()
  177. return
  178. log.info("Lost connection : %s" % reason)
  179. reactor.stop()
  180. app.exit()
  181.  
  182. def clientConnectionFailed(self, connector, reason):
  183. """
  184. @summary: Connection failed event
  185. @param connector: twisted connector use for rdp connection (use reconnect to restart connection)
  186. @param reason: str use to advertise reason of lost connection
  187. """
  188. # from twisted.internet import reactor
  189. log.info("Connection failed : %s" % reason)
  190. reactor.stop()
  191. app.exit()
  192.  
  193.  
  194. def autoDetectKeyboardLayout():
  195. """
  196. @summary: try to auto detect keyboard layout
  197. """
  198. try:
  199. if os.name == 'posix':
  200. from subprocess import check_output
  201. result = check_output(["setxkbmap", "-print"])
  202. if 'azerty' in result:
  203. return "fr"
  204. elif os.name == 'nt':
  205. import win32api, win32con, win32process
  206. from ctypes import windll
  207. w = windll.user32.GetForegroundWindow()
  208. tid = windll.user32.GetWindowThreadProcessId(w, 0)
  209. result = windll.user32.GetKeyboardLayout(tid)
  210. log.info(result)
  211. if result == 0x40c040c:
  212. return "fr"
  213. except Exception as e:
  214. log.info("failed to auto detect keyboard layout " + str(e))
  215. pass
  216. return "en"
  217.  
  218.  
  219. def create_rpds(passw, ip):
  220. keyboardLayout = autoDetectKeyboardLayout()
  221. domain = ""
  222. fullscreen = False
  223. optimized = False
  224. recodedPath = None
  225. width = 1024
  226. height = 800
  227.  
  228. if fullscreen:
  229. width = QtGui.QDesktopWidget().screenGeometry().width()
  230. height = QtGui.QDesktopWidget().screenGeometry().height()
  231.  
  232. log.info("keyboard layout set to %s" % keyboardLayout)
  233.  
  234. connector = reactor.connectTCP(ip, 3389,
  235. RDPClientQtFactory(width, height, "Administrator", passw, domain, fullscreen,
  236. keyboardLayout,
  237. optimized, "nego", recodedPath))
  238. reactor.run()
  239. # reactor.runReturn()
  240. # print i
  241. # tr.start()
  242. app.exec_()
  243.  
  244. # reactor.callLater(5000, create_rpds)
  245. # time.sleep(10)
  246. # connector.disconnect()
  247. # reactor.stop()
  248. #print 'gfgddsfdsfsdffgfd'
  249.  
  250.  
  251. def exits():
  252. # time.sleep(10)
  253. print "before stop"
  254. reactor.stop()
  255. # del(reactor)
  256.  
  257. print "after stop"
  258. # time.sleep(10)
  259. print "before app_ehit"
  260.  
  261. app.exit()
  262. print "after app"
  263.  
  264.  
  265. import qt4reactor
  266.  
  267. qt4reactor.install()
  268.  
  269. with open('json_file.json', 'r') as f:
  270. data = json.load(f)
  271. app = QtGui.QApplication(sys.argv)
  272. for i in data:
  273. from twisted.internet import reactor
  274.  
  275. create_rpds(i["Password"].encode('utf-8'), i["IpAddress"].encode('utf-8'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement