Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/107: Рейтинг темы: голосов - 107, средняя оценка - 4.65
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67

Управление удаленным компьютером

16.01.2011, 19:49. Показов 22955. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Хочу написать программу, наподобие mstsc.exe. То есть задачи состоят в том, чтобы приконнектится к удаленному компьютеру и залогиниться. Подскажите, как это можно реализовать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2011, 19:49
Ответы с готовыми решениями:

Управление удалённым компьютером помогите не игнорируйте
Вот какая ситуация. У меня есть подруга. Постоянно ни чё не шарит в компе. Под предлогом я ей сказал установить TeamViewer(я сказал ей что...

Программа управления удаленным компьютером
Помогите с программой управления удаленным компьютером.

Удаленное управление компьютером
Доброго времени суток! столкнулся с такой проблемой:) хочу написать что-то типа удаленного управления компьютером. вот. будет две...

11
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
16.01.2011, 21:21
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от S1deX Посмотреть сообщение
Подскажите, как это можно реализовать?
Знакомы с сокетами?
Если нет - то дальше идти не стоит, ибо мороки будет много.
Если знакомы - то напишите минимальное клиент/серверное приложение, которое способно обмениваться сообщениями в обе стороны.
А дальше можете закинуть сетевое программирование в сторону.

Недавно реализовывал подобный проект. Могу сказать, что сначала подошёл к его решению неправильно: не продумал все опции, которые были необходимы. Пришлось закинуть начинания, разработать модель и только затем приступить к реализации...

Задумайтесь также о сетевой модели. Что вы хотите от приложения?
Если вам необходима возможность обычной установки соединения с машинами, обладающими частными IP-адресами - то вам по сути, не нужен транслирующий сервер. Чем это плохо? Тем, что подключение к рабочей станции, находящейся за NAT, PAT, Proxy без дополнительных настроек, будет просто невозможным.

Когда я начинал реализацию, этот вариант я отбросил сразу. По мне, лучше иметь выделенный сервер на аннонсированном IP-адресе, который и поможет выполнить проброс/трансляцию контента к удалённой стороне.

Дальше, вам необходимо определить подход к определению изменившихся частей "снимка рабочего стола". Если подходите серьёзно, то смотрите в сторону Mirror Driver. Исходники есть в MS WDK. Если нужно что-то проще, то разбейте изображение на равные части и сравнивайте их. При несовпадении - отсылайте запросившей стороне или составляйте карту изменений. Также, подумайте о том, как можно оповещать другую сторону о том, что произошло движение мышью или нажаты определённые клавиши. Такую информацию можно получить обработав стандартные события, доступные для любой формы в С++ Builder'e. Информацию можно приложить к части изменённого изображения. Разобрать информацию и выполнить команду на удалённой стороне вам поможет функция SendInput.

В общем, советую сперва хорошенько задуматься над моделью приложения и над вопросом "необходимо ли оно вам и готовы ли вы идти к реализации сами?"...

Небольшую часть видеопрезентации разработанного мною программного продукта можно посмотреть на YouTube (видео прилагаю).
Возможно, оно поможет понять то, о чём я говорил...


P.S. Если необходимо HD-качество, перейдите сюда и выберите необходимое разрешение
3
 Аватар для S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
17.01.2011, 13:24  [ТС]
Извините, возможно я неправильно задал вопрос. Дело в том, что мне надо пользоваться тем же протоколом, который использует mstsc. Посредством гугла я нашел ссылку на msdn, однако совершенно не представляю, как им пользоваться.

Вот ссылка: http://msdn.microsoft.com/en-u... S.85).aspx
0
dimult
21.01.2011, 08:40
Цитата Сообщение от MikeSoft Посмотреть сообщение
....Недавно реализовывал подобный проект. Могу сказать, что сначала подошёл к его решению неправильно: не продумал все опции, которые были необходимы. Пришлось закинуть начинания, разработать модель и только затем приступить к реализации...
...

хотите сказать что вы создатель teamviewer-а?
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
21.01.2011, 14:14
Цитата Сообщение от dimult Посмотреть сообщение
хотите сказать что вы создатель teamviewer-а?
Вы где-нибудь видели упоминание о нём в моей речи или в видео?

TW - программный продукт, обладающий более расширенным набором возможностей, которые мне не особо были нужны. К тому же, мне нужна была система не привязанная к чьему-то сервера, поэтому было принято решение создать свою. После некоторых доработок серверный модуль будет находится в свободном доступе, что позволит развернуть подобную систему в своей ЛВС не отдавая за это деньги.
0
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 24
04.02.2011, 19:37
Поздновато заметил подобную тему. Расскажу как я реализовал подобное Михаилу и TW. Моя программа позволяет создать соединение между компьютером имеющим белый айпи адрес и компьютером находямщимся за NAT(это самый худший возможный вариант). Сложного ничего нет. Я взял компонент TNMUDP в 6 билдере. Теперь предположим что у Михаила белый IP а мы находимся за NATом и имеем к примеру адрес 192.168.0.10. Нам важно знать этот адрес Михаила(например95.98.120.76). Теперь нам достаточно послать Михайлу сообщение
C++
1
2
3
4
5
6
 
 UDP1->RemoteHost = //Адрес Михаила;
 UDP1->RemotePort = //Порт у михайла указаный как RemotePort ;
 SendConnectTimer->Enabled = true;//Если нажали кнопку соединить, то вкл таймер постоянного пинга клиентами друг друга что бы связь постоянно потдерживалась даже после смены RemotePort одного из них
 UDP1->SendBuffer("###MSG USER###Устанавливается соединение...",50,43);//отсылаем сообщение ДАВАЙ ДРУЖИТЬ 8)
 ChatInputOutput->Lines->Add("Устанавливается соединение...");//Пишем в наш чат что мол отослали       приглашение ждемс ответ от Михаила
Когда Михаилу придет сообщение то придут так же данные нашего внешнего IP адреса и Номер порта через который Михаил отправит нам сообщение и NAT пропустит его нам обратно в локалку на адрес
192.168.0.10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::UDP1DataReceived(TComponent *Sender,
      int NumberBytes, AnsiString FromIP, int Port)
{  
  Edit1->Text = FromIP;
  Edit2->Text = IntToStr(Port);
if(NumberBytes != -1){
  int N;
  char RdBuff[2*1024] = "";
  UDP1->ReadBuffer(RdBuff,2*1024,N);
  MsgMode = AnsiString(RdBuff);
 
 //Если пришло сообщение
  if(MsgMode.SubString(0,14) == "###MSG USER###"){ FlashWindow(Application->Handle,true);//моргаем окном если сообщение пришло
 
  ChatInputOutput->Lines->Add(AnsiString("Собеседник ") + Time().FormatString("hh:nn") + ": \r\n" + MsgMode.SubString(15,MsgMode.Length()));//Пишем в наш чат текст который прислал собеседник
 
  // Если юзер сделал запрос на  установление соединения
  if(MsgMode.SubString(15,29) == "Устанавливается соединение..."){//Если текст сообщения содержит слова "Устанавливается соединение..." значит собеседник просит подтвердить наличие связи с ним
 
 UDP1->RemoteHost = FromIP;//Адрес Михаила
 UDP1->RemotePort = Port ;//Порт Михаила
 UDP1->SendBuffer("###MSG USER###Связь установлена",50,31);//отсылаем сообщение ПОДРУЖИЛИСЬ 8)
  ChatInputOutput->Lines->Add("Связь установлена");//Пишем в наш чат что связь установлена
Вообщем прога уже проверена пока на передаче звука и голоса. Но есть огромный минус у компонента . Это размер максимально передаваемого буфера где то не больше 2Кб. То есть передача больших размеров информации уже будет достаточно длинным процессом. Так что я пока в поисках компонентов через которые можно реализовать подобную программу. Кстати для соединения двух компьютеров находящихся за Натом достаточно будет сделать Комп Михаила сервером что бы он определял ваш адрес и порт во внешний мир а далее Вы сообщите собеседнику Ваш адрес и порт и соединитесь(такое я еще не делал но думаю работать будет). Если я что то не правильно сказал или выразился, прошу сильно не пинать, я только учусь 8) как 1,5 месяца. Михаил а можно узнать чем посоветуете заменить мой TNMUDP? но при этом иметь возможность соединяться с компами даже за NAT?
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
04.02.2011, 23:58
Цитата Сообщение от Natrv Посмотреть сообщение
Но есть огромный минус у компонента . Это размер максимально передаваемого буфера где то не больше 2Кб.
Эм... а что за магическое число такое?
Возможно, в подходе принята попытка избавится от фрагментации пакетов?
Например, передавать пакет, размер которого не больше MTU, тогда значение будет 1472 байта.
Узнать MTU можно запретив фрагментацию и явно указав размер пакета:
Code
1
ping google.com.ua -f -l 1472
Можете попробовать больший размер. В случае превышения - получите уведомление о необходимости фрагментации

Цитата Сообщение от Natrv Посмотреть сообщение
Моя программа позволяет создать соединение между компьютером имеющим белый айпи адрес и компьютером находямщимся за NAT(это самый худший возможный вариант).
Самый худший, однако и самый распространённый...
Надеюсь, потихоньку эта проблема решится сама собой. На днях был продан последний блок IPv4-адресов.
Но собственно говоря, пока что проблема очень актуальна и пришлась мне по духу.
Поэтому вопрос пришлось исследовать, предложить некоторые подходы, выступить на конференции...

Цитата Сообщение от Natrv Посмотреть сообщение
Кстати для соединения двух компьютеров находящихся за Натом достаточно будет сделать Комп Михаила сервером что бы он определял ваш адрес и порт во внешний мир а далее Вы сообщите собеседнику Ваш адрес и порт и соединитесь(такое я еще не делал но думаю работать будет).
Оба компьютера находятся за NAT. Как же вы выполните соединение? Никак.
Необходимо только поднимать проброс на указанный доступный порт. То есть, необходимо оставить возможность проброса по порту, что вызывает затруднения. Если вы находитесь в администрируемой ЛВС, то вам придётся терроризировать администраторов. Не факт, что они выполнят вашу просьбу.

Цитата Сообщение от Natrv Посмотреть сообщение
Михаил а можно узнать чем посоветуете заменить мой TNMUDP?
Посмотрите в сторону библиотеки Indy.
Программу я строил на TIdTCPClient/TIdTCPServer (ну и естественно, TIdUDPClient/TIdUDPServer).
После компонента, существовавшего в С++ Builder 6 вам может показаться непривычным то, что данные из буфера клиента вам придётся выгребать вручную.
Частично вопрос разбирался здесь: RAD 2010 и Indy 10.
О том, как обновить Indy я упоминал в следующей статье: Visual Component Library: Вид изнутри, удаление и установка компонентов.
Цитата Сообщение от Natrv Посмотреть сообщение
но при этом иметь возможность соединяться с компами даже за NAT?
Эту возможность вы должны самостоятельно воплотить в жизнь...
0
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 24
05.02.2011, 11:45
Магическое число это 2000 байт - максимальный передаваемый размер пакета TNMUDP за один раз. В случае превышения размера выскакивает еррор не помню что точно. Понятно только одно что больше нельзя. А относительно соединения двух компов за Nat, то надо иметь сервак с постоянным IP адресом, далее эти два юзера, которые за Nat, посылают вам на сервер любое сообщение. В момент когда они посылаю сообщение ,Nat открывает случайный порт. Когда вам на сервер придут сообщения от этих людей в сообщении будет видно какой белый IP у каждого юзера и какой порт определил Nat каждому участнику. Если к примеру из инета теперь послать пакет указав эти два параметра: белый IP и порт который открыл Nat, то Nat их переадресует на внутренюю локалюную сеть тому кто посылал пакеты. То есть эти порты открыты еще какое то время. Вам как серверу достаточно будет послать в ответ юзеру информацию:"Твой айпишник:Порт" Теперь когда юзер1 позвонив юзеру2 узнает какой у того IP и порт(NAT) он может ему послать сообщение и NAT перенаправит сообщение юзеру2 внутри сети. Юзер 2 получит собщение а так же информацию какой порт(Nat) и IP у юзера1 и по этим данным перенаправит свой ответ. Ваш сервер больше будет не нужен, участникам достаточно самим посылать друг другу типа пинга что бы NAT не удалил порты. А подскажите еще, ваш проект был комерческий или так для себя? Это мне просто любопытно.
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
15.02.2011, 20:45
Цитата Сообщение от Natrv Посмотреть сообщение
А относительно соединения двух компов за Nat, то надо иметь сервак с постоянным IP адресом, далее эти два юзера, которые за Nat, посылают вам на сервер любое сообщение. В момент когда они посылаю сообщение ,Nat открывает случайный порт. Когда вам на сервер придут сообщения от этих людей в сообщении будет видно какой белый IP...
Если у одного из клиентов белый IP адрес зачем вообще нужны пляски с выделенным сервером? Не нужен он тут вообще. В такой среде инициатором должен пользователь с серым IP и вопрос будет целиком и полностью решён.

Цитата Сообщение от Natrv Посмотреть сообщение
Юзер 2 получит собщение а так же информацию какой порт(Nat) и IP у юзера1 и по этим данным перенаправит свой ответ. Ваш сервер больше будет не нужен, участникам достаточно самим посылать друг другу типа пинга что бы NAT не удалил порты.
Мне кажется, вы пытаетесь перевести тему к IP Spoofing'у. Это несколько другой подход.

Цитата Сообщение от Natrv Посмотреть сообщение
А подскажите еще, ваш проект был комерческий или так для себя? Это мне просто любопытно.
Его часть была коммерческой. Сейчас проект переписан и после доработок и внедрения свежих идей появится в "свободном доступе".
0
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 24
15.02.2011, 22:54
Добрый вечер Михаил. Наверное немного не правильно Вы меня поняли. Если комп находится за NAT у него уже не белый IP адрес. К примеру я на ноутбуке сижу за шлюзом и имею адрес 192.168.0.10 мой друг сидит то же за своим шлюзом и у него на ноутбуке адрес 192.168.0.20. Это не одна сеть, а у каждого своя. Вот и как нам соединить наши ноутбуки по
UDP не делая проброс портов на шлюзе? Легко и просто на этом этапе нужен как раз ваш сервак с былым IP. То есть я описываю ситуацию когда 2 серых IP!!! Если опять чего не понятно вот поясняющая статья http://it.sander.su/udp-hole-punching.php Если есть хотя бы 1 белый IP, сервак ясное дело не нужен клиенты сами сконектятся. Если честно прогу написал, работает, решил посветить этой теме порядочное время и никуда особо не спешить. Поэтому начал работу не с зеркального драйвера, а с простых снятий скринов. Делал по принципу: снял скрин, сделал мини копию, разбил мини-копию на равных 20 кусочков, сравниваю каждый кусочек с прошлым в буфере, если кусочки одинаковые пропускаем, если разные вырезаем с нашего скрина этот кусок заданым размером складываем буфер и так проверяем все 20 раз. Если в процессе работы буфер достигнет максимума, отсылаем буфер клиенту. А на приемной стороне просто приходит этот буфер, я оттуда достаю кусочки читаю в доп инфо где он должен стоять и делаю вставку. Вообщем все работает, только есть немного заторможеность всвязи с тем что мне эти кусочки надо преобразовывать в jpeg, а он скотина это на моем нетбуке долго делает. Вообщем есть заторможеность маленькая но не приятная.
А Вы Михаил свою программу построили на зеркальном драйвере или как я на скринах?
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
21.02.2011, 13:37
Цитата Сообщение от Natrv Посмотреть сообщение
Добрый вечер Михаил. Наверное немного не правильно Вы меня поняли.
Конечно неправильно...
Вы забыли указать протокол.
После того, как сказали про UDP - сразу всё стало на свои места

Цитата Сообщение от Natrv Посмотреть сообщение
А Вы Михаил свою программу построили на зеркальном драйвере или как я на скринах?
На анализе скриншотов. Заказчика не устраивала реализация с зеркальным драйвером, т.к. необходимо было программное обеспечение, которое не нужно устанавливать. То есть, с минимальной интеграцией в систему. С одной стороны, мне не пришлось заморачиваться c WDK, а с другой - мне ещё предстоит этим заняться
0
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 24
22.02.2011, 00:53
Приветствую Михаил хочу прогу испытать вашу, выкладывайте скорей. Так же как и Вы, написав программу я закинул все очень далеко и начал писать заново. А все благодаря тому что в инете нашел алгоритм который мне пришелся больше по душе. Сейчас занят его реализацией. Сам алгоритм снятия скринов и упаковка в буфер только изменений экрана уже выполнено, осталось только сжатие сделать. Хочу JPEG послать куда подальше и написать самому хотя бы быстрый RLE. Вообщем жду вашу прогу Михаил, выкладывайте на пробу. Алгоритм не рассекретите?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2011, 00:53
Помогаю со студенческими работами здесь

Разработка ПАК "Управление удаленным сервером посредством SMS сообщений"
Доброго времени суток. Ребят, если у кого-то похожая прога на это: Разработка ПАК "Управление удаленным сервером посредством SMS...

Управление удаленным компьютером
Имеется локальная сеть. Необходимо напистать программу для администратора, которая могла бы через компьютер администратора завершенить...

OpenVPN и управление удаленным компьютером.
Сабж. Как можно 2 компьютера под управлением Windows и подключенных к одной сети OpenVPN (клиент-клиент или клиент-сервер, не имеет...

Работа с удаленным компьютером
Доборого времени=) Такая проблема: Нужно установить драйвер на удаленный компьютер.. Каким образом это можно сделать (желательно без...

Соединение с удалённым компьютером по Телнет
Помогите и мне, пожалуйста. Я не могу понять, в чём дело. проблема такая: Я имею возможность подключиться к удалённому рабочему столу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru