Каким протоколом подключается mstsc?
Каким протоколом подключается mstsc ? и можно написать python скрипт, чтобы при подключений (после ввода логина и пароля Админа ) можно было выполнять команды ??
Ответы (3 шт):
Автор решения: Victor VosMottor thanks Monica
→ Ссылка
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()
Автор решения: 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
