Как реализуется удаленное управление компьютером (Аля тимвивер/радмин своими руками) в windows?
Здравствуйте,
Стало интересно, как создается подключение и управление к удаленному рабочему столу, хотя бы локально (подобие тимвивера/радмина/лайтменеджера) пока только для винды
Покопался в интернете, но особо не нашел ничего.
Натыкался на ssh/telnet, но я не пойму как там выводить рабочий стол удаленного компьютера в реальном времени и управлять, если вообще это возможно. Понял, через него можно управлять консольными командами, но мне хочется узнать, как реализуется именно получение и управление графическим интерфейсом рабочего стола windows в реальном времени
rdp не подходит в виду того, что локального пользователя выбивает, пока к нему кто-то удаленно подключен, да и там запреты лицензионные от microsoft.
Хочу узнать через какие технологии идет управление и насколько сложно это реализуемо, желательно на nodejs, но можно и другие яп) В общем, хочу свой корявый велосипед))
p.s. не знаю конкретно, какие теги указывать, извините, если что
а еще в RDP есть shadow sessions, никого не выбивает, можно при необходимости перехватить управление, а если надо просто наблюдать - юзер даже не поймет что за ним смотрят.
/control – режим взаимодействия с сеансом пользователя. Если параметр не задан, вы подключитесь в режиме просмотра (наблюдения) сессии пользователя, т.е. вы не сможете управлять его мышью и вводить данные с клавиатуры;
/noConsentPrompt – не запрашивать у пользователя подтверждение на подключение к сессии.
Ну и по поводу версии:
"Функционал теневого подключения Remote Desktop Shadowing работает в Windows 10 / 8.1 и Windows Server 2012 R2 /2016. Чтобы теневое подключение работало на клиентах с Windows 7 SP1 (Windows Server 2008 R2) нужен RDP клиент версии 8.1 – поэтому придется установить обновление KB2830477 (требует наличия установленных KB2574819 и KB2857650)."
Про Pro/Home не скажу, у меня нет Home под рукой)
Что значит своими руками?
Если хотите своими руками - пишите программу вроде тимвьювера, амми, или чего другого, захват видео, сжатие, передача, и.т.п.
Если не хотите писать программу - пользуетесь готовыми - их куча.
Натыкался на ssh/telnet, но я не пойму как там выводить рабочий стол удаленного компьютера в реальном времени и управлять, если вообще это возможно.
Какой рабочий стол? Это консольные утилиты, они работают в текстовом режиме, а не в графическом.
Алексей, можно начать с программ захвата принтскрина с открытыми исходниками, далее протоколы связи и авторизации, далее перевод картинок в видеопоток, далее по вкусу...
Я правильно понимаю идею?)
1) мне удаленный пользователь присылает фото(видеопоток)
2) я на основе них как-то передаю координаты движения мыши (нажатие кнопок (мыши/клавиатуры)).
Таким способом получается двухсторонняя связь с удаленным клиентом
В таком виде я теоретически понимаю в какой сторону копать и как делать, но это в моем понимании только в текущем пользователе, а если на пк два пользователя user и admin. Во время перехода с одного пользователя на другой, как эта схема сможет работать?)
Алексей, А что там копать? На компьютере которым управляете читаете информацию из видеобуфера, сжимаете ее кодеком, отправляете на другой компьютер, на компьютере с которого управляете перехватываете нажатия клавиш и движения мыши, и отправляете тоже.
Ничего сложного нет.
Вся загвоздка обычно в видеокодеке - он должен сжимать очень качественно, в режиме реального времени, и при этом не сильно нагружать компьютер. Собственно хороший кодек это залог успеха.
Во время перехода с одного пользователя на другой, как эта схема сможет работать?)
Точно так же - чтение видео, и передача нажатий клавиш. Какой пользователь активен с тем и будет работать. Пользователь то в любом случае один, больше быть не может.
В случае если вы подключаетесь к серверу терминалов, там посложнее, активных пользователей может быть несколько.
rdp не подходит в виду того, что локального пользователя выбивает, пока к нему кто-то удаленно подключен, да и там запреты лицензионные от microsoft.
Во первых - не выбивает.
Во вторых никаких запретов лицензионных на RDP нет.
Есть запреты на работу более одного пользователя - если у вас одновременно работает два и боле пользователя с рабочим столом, значит вы нарушаете лицензионное соглашение. А уж с помощью какой именно программы вы этого добились - неважно.
rdp не подходит в виду того, что локального пользователя выбивает, пока к нему кто-то удаленно подключен, да и там запреты лицензионные от microsoft.
локального пользователя выбивает не протокол, а клиент от microsoft, и то делает это по умолчанию. А можно прописать подключение к текущей консоли, а не создавать новую виртуальную для каждого подключения.
Можно написать свой клиент, который не будет выбивать.
Можно пользоваться стандартным, и даже сидеть вдвоем на одном удаленном компе.
Так что изучайте rdp
p.s. а вот radmin свой протокол передачи вроде использует, передает битмап своими силами. С одной стороны полная независимость от rdp, с другой стороны гораздо больше нагрузка на сеть.