Удаленное управление компьютером по сети: Введение
Удаленное управление в разрезе
Удаленное управление в стиле TeamViewer можно разбить на две части: серверную и клиентскую. Серверной стороной оказывается та, которой управляют. Клиент же занимается управлением.
Для серверной части основными являются следующие функции:
Клиентской части характерны такие функции:
Схематично это можно представить следующим образом:
Реклама
Какие модули нам понадобятся
Нам известен необходимый функционал. Распределим его по логическим модулям, которые нам потребуется разработать:
Возможно, нам понадобятся и другие вспомогательные библиотеки, но эта архитектура уже способна удовлетворить ключевые потребности.
Для реализации клиент-серверного взаимодействия я планирую использовать библиотеку LibQxt. Она достаточно проста в использовании. А от сетевой части кроме примитивной передачи сообщений в Qt-приложении нам ничего и не требуется. Поэтому идем на компромисс, и жертвуем переносимостью в пользу более простой реализации.
Реклама
Выводы
Мы готовы начать разработку. Но хочу предупредить, что, полноценный TeamViewer у нас все же не получится. Мы заведомо игнорируем многие важные вопросы. Например, безопасность, чтобы не усложнять реализацию шифрованием. Так же на практике могут возникнуть проблемы из области оптимизации передачи данных по сети (в первую очередь для видео-потока). Все это не входит в наши цели, поэтому мы закрываем глаза на подобные сложности. Но даже то, что остается, уже можно считать полноценным приложением, при разработке которого мы решим много интересных задач.
Управление удаленным компьютером
Управление удалённым компьютером помогите не игнорируйте
Вот какая ситуация. У меня есть подруга. Постоянно ни чё не шарит в компе. Под предлогом я ей.
Программа управления удаленным компьютером
Помогите с программой управления удаленным компьютером.
Удаленное управление компьютером
Доброго времени суток! столкнулся с такой проблемой:) хочу написать что-то типа удаленного.
Разработка ПАК «Управление удаленным сервером посредством SMS сообщений»
Доброго времени суток. Ребят, если у кого-то похожая прога на это: Разработка ПАК «Управление.
Решение
Недавно реализовывал подобный проект. Могу сказать, что сначала подошёл к его решению неправильно: не продумал все опции, которые были необходимы. Пришлось закинуть начинания, разработать модель и только затем приступить к реализации.
Когда я начинал реализацию, этот вариант я отбросил сразу. По мне, лучше иметь выделенный сервер на аннонсированном IP-адресе, который и поможет выполнить проброс/трансляцию контента к удалённой стороне.
В общем, советую сперва хорошенько задуматься над моделью приложения и над вопросом «необходимо ли оно вам и готовы ли вы идти к реализации сами?».
Небольшую часть видеопрезентации разработанного мною программного продукта можно посмотреть на YouTube (видео прилагаю).
Возможно, оно поможет понять то, о чём я говорил.
P.S. Если необходимо HD-качество, перейдите сюда и выберите необходимое разрешение
Пишем шустрый Remote — Desktop клиент на C# и XNA
Привет, я покажу, как написать Remote — Desktop клиент, используя C# + XNA
На написание этой статьи меня вдохновил вот этот топик
Немного от себя
Я очень долго ждал второй части той статьи, но так и не дождался. Как утверждал автор, во второй статье должна была быть реализация передачи изображения по протоколу UDP на удалённый клиент. После я пытался сам реализовать второю часть статьи, но всегда выходило плохо. Из — за медленного рисования GDI — программа просто зависала на компьютере Core 2 Duo 2.66 GHz, Nvidia GeForce 9600 GT. Я использовал разные алгоритмы оптимизации, но это слабо помогало и тогда я решил использовать XNA.
Выбор протокола передачи
Очень сильно хотелось выбрать протокол передачи TCP, с ним меньше проблем, но я выбрал UDP, потомучто все говорят, что для таких дел лучше его брать бла бла бла… Вам наверное интересно почему с UDP больше проблем? Ответ прост- UDP сообщение не может превысить размер в 65 507 байт, что очень не удобно. Наши пакеты составляют в среднем размер 130 000 байт (для экрана размером 1366×768), при попытке отправить такой пакет возникает ошибка, как показано ниже.
Решить эту проблему можно двумя путями:
1) Создать костыль
2) Создать структуру
1) Так как я ленивый, выбрал костыль. Костыль заключается в том, чтобы разбивать более большое сообщение на множество маленьких и в первом сообщении писать количество кусков которое будет отправляться. Костылём я назвал, потомучто, потеряв первое сообщение, программа полетит к чертям не сможет нормально склеить изображение (она не будет знать на сколько частей разбито изображение).
2) Можно разбивать экран на множество кусочков и запоминать их координаты. Всё это надо будет хранить в структуре, что очень удобно, кстати, этот алгоритм поможет в будущем сделать оптимизацию.
Практика
Начну с простого. С отправителя. Отправлять мы будем скриншоты нашего экрана на удалённый компьютер. Я написал функцию для загрузки данных и инициализации некоторых переменных.
Точкой запуска будет наша функция Run()
Сначала загружаются данные Load(), после происходит объявление переменных и зацикливание. В цикле мы получаем изображение экрана, конвертируем в массив байтов, используем мой костыль (разбиение сообщения на несколько под сообщений — CutMsg(bytes)), отправляем все пакеты.
В функции Load() ничего интересного не происходит.
Из файла ip.txt будут считываться две строки. Первая строка — IP адрес на который нужно отсылать данные. Вторая строка — Порт, на который будет происходить отсылка. Также там будет происходить получение длины и ширины экрана.
И самое интересное — реализация костыля.
Я делю данные по блокам 65500 (число взял меньше, чтобы явно попасть) и записываю их в лист массивов байтов, после я возвращаю этот лист.
Код получателя
С получателем всё сложнее, я там использовал делегаты и события для асинхронной работы и утомлять вас кодом не хочу, что так напишу основное.
Асинхронное получение данных.
Снова видим зацикливание, далее получаем первый пакет, с него считываем первый байт (в этом байте записано количество будущих сообщений), если длина сообщения больше 10, то первый пакет мы явно потеряли, следовательно прибавим счётчик потерь, иначе получаем все сообщения — склеиваем в одно и вызываем событие GetData(byte []).
В GetData(byte[]) мы получаем Texture2D, конвертируя её из массива байтов.
Весь проект вы сможете скачать в конце статьи, что так не отчаивайтесь если что — то я не написал.
Итоги и вывод
В итоге при одновременном запуске «отправителя» и «получателя» на своём компьютере происходит рекурсия и огромное количество потерь (30 — 90 потерь), при запуске «отправителя» на моём компьютере, а на компьютере родителей «получателя», потерь минимум (10 — 15 потерь). Оба компьютера (родителей и мой) соединены в одну Wi-Fi сеть с каналом 54 Мбит/с. Есть пинг (около 250 мс.) — напоминает по пингу TeamViewer. Если добавить оптимизацию и заменить костыль, то получится отличная программа для передачи изображения.
Рекурсия
Компьютер родителей (передача изображения с моего компьютера на их)
Как выглядит потеря
В следующей статье я доделаю программу, а точнее добавлю возможность удалённого управления и возможно ещё оптимизирую её.
Скачать проект
Скачать Receiver (Получает изображения)
Скачать Sender (Отправляет изображения)
Программа для удаленного управления рабочим столом — Aspia
Хочу представить общественности свою разработку – приложение для удаленного управления рабочим столом Aspia. Проект является полностью бесплатным и с открытым исходным кодом (GPL 3.0).
На данный момент реализованы следующие возможности:
Реализовывать одну лишь возможность сбора информации о компьютерах по сети мне показалось немного неправильно и недальновидно. Так появилась идея сделать полноценный инструмент, который будет включать удаленное управление и сбор/просмотр отчетов по компьютерам. Мне была нужна основа для сетевой версии и текущая версия является этой основой.
Приложение полностью переписано, код теперь написан на C++ с использованием фреймворка Qt. Для сериализации данных используется protobuf, для шифрования libsodium, для сжатия данных zlib-ng и libvpx.
К сожалению, тип сессии «Информация о системе» не вошел в этот релиз, но доступны другие интересные функции. Давайте рассмотрим их подробнее.
Управление пользователями
Вы можете создавать пользователей с различными правами доступа. Разграничение прав осуществляется по типам сессий. Возможно отключение аккаунта пользователя.
Адресная книга
Отдельного упоминания стоит адресная книга. Каждая адресная книга представляет собой документ, который может быть расположен там, где удобно пользователю.
Адресные книги открываются в приложении «Aspia Console» и могут быть зашифрованными и незашифрованными. При открытии зашифрованной адресной книги будет предложено ввести пароль:
После успешного ввода пароля адресная книга будет открыта:
В адресной книге вы можете управлять группами компьютеров, создавать компьютеры с индивидуальными настройками подключения и подключаться к ним.
Свойства компьютера:
Так же возможно «быстрое» подключение, без добавления компьютера в адресную книгу:
Управление рабочим столом
Окно управления рабочим столом мало отличается от других программ подобного рода.
Возможно изменение параметров сессии «на лету». На выбор есть 3 типа кодеков: VP9, VP8 и ZLIB.
VP8 отлично подходит для быстрых соединений, это полноценный видео-кодек. Он отлично справляется с воспроизведением видео, плавной прокруткой в браузерах, анимацией.
ZLIB хорошо подходит для относительно медленных соединений. Он позволяет указать глубину цвета и степень сжатия.
VP9 является экспериментальным. На данный момент он потребляет нерациональное количество ресурсов.
В параметрах сессии возможно отключить обмен буфером обмена и отправку изображения курсора мыши.
Для совсем медленных соединений (менее 256кбит/с) текущие кодеки подходят плохо, хотя работать возможно. Тут есть над чем поработать, но без создания нового кодека тут не обойтись. Было бы неплохо добавить в этот новый кодек кеширование графики, детектирование одноцветных областей (передавать значение цвета вместо передачи сжатого ZLIB прямоугольника) и некоторые другие возможности.
Передача файлов
Передача файлов так же не слишком отличается от программ-аналогов. Поддерживаются горячие клавиши, drag-and-drop.
Что ждать от следующей версии?
Одни из ключевых запланированных возможностей:
Планируется ли версия для других операционных систем?
К сожалению, я работаю над проектом один и у меня недостаточно свободного времени для поддержки других операционных систем.
Количество платформозависимого кода минимально, все сторонние библиотеки могут быть собраны для Linux/MacOS.
Если у вас есть желание заняться подобной версией, то вы можете присоединиться к проекту и сделать это.
Чем помочь проекту?
Ссылки
→ Страница проекта на GitHub
→ Сайт проекта
Буду рад ответить на ваши вопросы, если таковые имеются.