用于python3的RDP库

时间:2017-06-27 16:23:34

标签: python python-3.x rdp

我需要一个python3 RDP库。我找到了https://github.com/citronneur/rdpy,但我不明白如何通过端口,登录名和密码连接到主机。此代码中没有登录名和密码:

from rdpy.protocol.rdp import rdp
from twisted.internet import reactor


class MyRDPFactory(rdp.ClientFactory):
    def clientConnectionLost(self, connector, reason):
        reactor.stop()

    def clientConnectionFailed(self, connector, reason):
        reactor.stop()

    def buildObserver(self, controller, addr):
        class MyObserver(rdp.RDPClientObserver):
            def onReady(self):
                """
                @summary: Call when stack is ready
                """
                # send 'r' key
                self._controller.sendKeyEventUnicode(ord(unicode("r".toUtf8(), encoding="UTF-8")), True)
                # mouse move and click at pixel 200x200
                self._controller.sendPointerEvent(200, 200, 1, true)

            def onUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, data):
                """
                @summary: Notify bitmap update
                @param destLeft: xmin position
                @param destTop: ymin position
                @param destRight: xmax position because RDP can send bitmap with padding
                @param destBottom: ymax position because RDP can send bitmap with padding
                @param width: width of bitmap
                @param height: height of bitmap
                @param bitsPerPixel: number of bit per pixel
                @param isCompress: use RLE compression
                @param data: bitmap data
                """

            def onSessionReady(self):
                """
                @summary: Windows session is ready
                """

            def onClose(self):
                """
                @summary: Call when stack is close
                """

        return MyObserver(controller)

reactor.connectTCP(ip, port, MyRDPFactory())
reactor.run()

也许,当我已经连接到主机时,我需要以登录形式输入登录名和密码?我该怎么办?

1 个答案:

答案 0 :(得分:0)

目前RDPY没有Python 3实现。这是带有用户名和密码的版本。您只需在构建功能中将这些信息设置到控制器即可。

from rdpy.protocol.rdp import rdp
from twisted.internet import reactor


class MyRDPFactory(rdp.ClientFactory):

    def __init__(self, username, password,domain):
        self._username = username
        self._password = password
        self._domain = domain
        self._security = rdp.SecurityLevel.RDP_LEVEL_SSL

    def clientConnectionLost(self, connector, reason):
        print reason
        reactor.stop()

    def clientConnectionFailed(self, connector, reason):
        print 'connection failed'
        reactor.stop()

    def buildObserver(self, controller, addr):
        controller.setUsername(self._username)
        controller.setPassword(self._password)
        controller.setDomain(self._domain)
        class MyObserver(rdp.RDPClientObserver):

            def onReady(self):
                """
                @summary: Call when stack is ready
                """
                # send 'r' key
                self._controller.sendKeyEventUnicode(ord(unicode("r", encoding="UTF-8")), True)
                # mouse move and click at pixel 200x200
                self._controller.sendPointerEvent(200, 200, 1, True)

            def onUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, data):
                """
                @summary: Notify bitmap update
                @param destLeft: xmin position
                @param destTop: ymin position
                @param destRight: xmax position because RDP can send bitmap with padding
                @param destBottom: ymax position because RDP can send bitmap with padding
                @param width: width of bitmap
                @param height: height of bitmap
                @param bitsPerPixel: number of bit per pixel
                @param isCompress: use RLE compression
                @param data: bitmap data
                """

            def onSessionReady(self):
                """
                @summary: Windows session is ready
                """

            def onClose(self):
                """
                @summary: Call when stack is close
                """

        return MyObserver(controller)




     reactor.connectTCP("XXX.XXX.XXX.XXX", 3389, MyRDPFactory(username='Please',domain='Dont Hack',password='Me'))
     reactor.run()