Каким протоколом подключается mstsc?

Каким протоколом подключается mstsc ? и можно написать python скрипт, чтобы при подключений (после ввода логина и пароля Админа ) можно было выполнять команды ??


Ответы (3 шт):

Автор решения: Denis I

При подключении через протокол rdp в Windows можно выполнить ту или иную команду. введите сюда описание изображения

→ Ссылка
Автор решения: Victor VosMottor thanks Monica

RDP Library on PyPI — rdpy

Simple RDP Client:

from rdpy.protocol.rdp import rdp

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)

from twisted.internet import reactor
reactor.connectTCP("XXX.XXX.XXX.XXX", 3389, MyRDPFactory())
reactor.run()

Simple RDP Server

from rdpy.protocol.rdp import rdp

class MyRDPFactory(rdp.ServerFactory):

    def buildObserver(self, controller, addr):

        class MyObserver(rdp.RDPServerObserver):

            def onReady(self):
                """
                @summary: Call when server is ready
                to send and receive messages
                """

            def onKeyEventScancode(self, code, isPressed):
                """
                @summary: Event call when a keyboard event is catch in scan code format
                @param code: scan code of key
                @param isPressed: True if key is down
                @see: rdp.RDPServerObserver.onKeyEventScancode
                """

            def onKeyEventUnicode(self, code, isPressed):
                """
                @summary: Event call when a keyboard event is catch in unicode format
                @param code: unicode of key
                @param isPressed: True if key is down
                @see: rdp.RDPServerObserver.onKeyEventUnicode
                """

            def onPointerEvent(self, x, y, button, isPressed):
                """
                @summary: Event call on mouse event
                @param x: x position
                @param y: y position
                @param button: 1, 2, 3, 4 or 5 button
                @param isPressed: True if mouse button is pressed
                @see: rdp.RDPServerObserver.onPointerEvent
                """

            def onClose(self):
                """
                @summary: Call when human client close connection
                @see: rdp.RDPServerObserver.onClose
                """

        return MyObserver(controller)

from twisted.internet import reactor
reactor.listenTCP(3389, MyRDPFactory())
reactor.run()

Simple VNC Client

from rdpy.protocol.rfb import rfb

class MyRFBFactory(rfb.ClientFactory):

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

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

    def buildObserver(self, controller, addr):
        class MyObserver(rfb.RFBClientObserver):

            def onReady(self):
                """
                @summary: Event when network stack is ready to receive or send event
                """

            def onUpdate(self, width, height, x, y, pixelFormat, encoding, data):
                """
                @summary: Implement RFBClientObserver interface
                @param width: width of new image
                @param height: height of new image
                @param x: x position of new image
                @param y: y position of new image
                @param pixelFormat: pixefFormat structure in rfb.message.PixelFormat
                @param encoding: encoding type rfb.message.Encoding
                @param data: image data in accordance with pixel format and encoding
                """

            def onCutText(self, text):
                """
                @summary: event when server send cut text event
                @param text: text received
                """

            def onBell(self):
                """
                @summary: event when server send biiip
                """

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

        return MyObserver(controller)

from twisted.internet import reactor
reactor.connectTCP("XXX.XXX.XXX.XXX", 3389, MyRFBFactory())
reactor.run()

GitHub

→ Ссылка
Автор решения: John Smith
import subprocess  # Импорт модуля subprocess для выполнения внешних команд
import time  # Импорт модуля time для работы с временными задержками
import getpass  # Импорт модуля getpass для безопасного ввода пароля
import pyautogui  # Импорт модуля pyautogui для автоматизации ввода клавиш и мыши

def connect_to_rdp(username, password, ip_address):
    # Запуск программы Remote Desktop Connection
    subprocess.run('mstsc')  

    # Ожидаем, пока откроется окно RDP
    time.sleep(2)

    # Вводим IP-адрес удаленного компьютера
    pyautogui.typewrite(ip_address)
    pyautogui.press('enter')

    # Ожидаем, пока появится окно для ввода учетных данных
    time.sleep(2)

    # Вводим имя пользователя
    pyautogui.typewrite(username)

    # Вводим пароль (без отображения)
    pyautogui.press('tab')  # Переход на поле ввода пароля
    pyautogui.write(password, interval=0.1)  # Метод write с интервалом для ввода символов
    pyautogui.press('enter')

# Пример использования
username = input("Введите имя пользователя: ")  # Ввод имени пользователя с клавиатуры
password = getpass.getpass("Введите пароль: ")  # Ввод пароля без отображения символов
ip_address = input("Введите IP-адрес удаленного компьютера: ")  # Ввод IP-адреса с клавиатуры

connect_to_rdp(username, password, ip_address)  # Вызов функции для подключения по RDP
→ Ссылка