Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [3] 4  Все   Вниз
  Печать  
Автор Тема: программа удалённого администрирования  (Прочитано 88049 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #60 : 07-03-2011 04:59 » 

zubr, да, есть ещё простор для оптимимзации )) Дело в том, что я не проверял на верхний левый и нижний правый углы - вся маска изменившихся битов шлётся. Но уже понятно, куда идти


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

Добавлено через 4 часа, 23 минуты и 42 секунды:
вот ещё вопросы:
1) (необязательный) как в радмине реализуется опция "не показывать обои рабстола" - как он распознаёт, что это им енно пикселы обоев видны?
2) как шифровать трафик - направьте в нужную сторону
3) как решить, что кнопконажатия клавы должны быть направлены к слейву, а не были нажаты для интерфейса программы на мастере ? Я пока сделал галочку, если её поставить - все кнопки летят к слейву, если снять - не летят
« Последнее редактирование: 07-03-2011 09:23 от Алексей1153 » Записан

Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #61 : 07-03-2011 09:32 » 

1) (необязательный) как в радмине реализуется опция "не показывать обои рабстола" - как он распознаёт, что это им енно пикселы обоев видны?

Для этого рендеринг делается не на уровне битовой карты дисплея, а на более высоком. Правда, при этом теряется тема экранного оформления. Впрочем, вряд ли она кому-то интересна.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #62 : 07-03-2011 10:18 » 

Потому, что RDP-сервер встроен в винду и, по сути, является новым десктопом - DC, и имеет доступ ко всем оконным данным, может игнорировать стили, обои и многое другое.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #63 : 07-03-2011 10:51 » 

На самом деле для этого не обязательно влезать в систему очень глубоко.

Много лет назад я участвовал в одном проекте, который жив до сих пор: http://rinel.ru/ . Тогда только что вышла Windows 95, и первая версия класа вышла на ее основе. Учитель мог подключиться к любому ученическому компьютеру, проконтролировать действия ученика и оказать ему помощь, то есть те самые действия, которые умеют делать современные удаленные консоли.

В то время в ходу были 10-мегабитные сети на коаксиальном кабеле, а сетевые карты NE2000 пропускали до 300Кбайт/с, что при наличии 16 рабочих мест в сегменте весьма немного с учетом мультимедийного трафика реального времени. Поэтому сжимали данные, как только могли.

Я занимался аппаратной частью и общей архитектурой комплекса, поэтому не в курсе деталей софта. Но точно помню, что все было написано на Delphi. Никаких специальных драйверов и прочих штучек режима ядра заведомо не было, все делалось на пользовательском уровне. Передавалась не битовая карта, а информация об иконках, окошках, меню и т.д. Трафик получался минимальный даже с учетом убогих характеристик сети.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #64 : 07-03-2011 11:29 » 

у меня всё сделано предельно просто, без драйверов и встраиваний - одно приложение без дополнительных модулей. Использую только функции WinAPI. Рендеринг не делаю - я просто забираю битмап с контекста устройства десктопа (HDC==0)

в принципе, при разностной передаче на обои плевать - только первый кадр будет большой

>>Передавалась не битовая карта, а информация об иконках, окошках, меню и т.д.
сейчас объектов и их внешнего вида развелось столько, что дешевле битмап передать ИМХО )

Добавлено через 8 минут и 35 секунд:
кстати, если переключалка языков с панели задач отправлена в свободное плавание, то она тоже почему-то не берётся с контекста


Добавлено через 59 секунд:
Потому, что RDP-сервер встроен в винду и, по сути, является новым десктопом - DC, и имеет доступ ко всем оконным данным, может игнорировать стили, обои и многое другое.
нет, это в Радмине такая опция. Я не про встроенный в винду говорю Улыбаюсь
« Последнее редактирование: 07-03-2011 11:38 от Алексей1153 » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #65 : 07-03-2011 12:36 » 

В виндовом RDP тоже можно отключать излишества:





* rdp_settings_experience.png (25.77 Кб - загружено 2018 раз.)
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Гость
« Ответ #66 : 07-03-2011 12:58 » 

RDP конечно хорошо, но если этот сервис не включен в системе и система не под админом, а ко всему юзер не должен знать, что его мониторят?
1. Как вариант, можно использовать EnumWindows
2. Криптоапи: CryptCreateHash, CryptHashData, CryptDeriveKey, CryptEncrypt, CryptDecrypt
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #67 : 07-03-2011 14:01 » 

2. Криптоапи: CryptCreateHash, CryptHashData, CryptDeriveKey, CryptEncrypt, CryptDecrypt
хорошо, посмотрю
Записан

PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #68 : 09-03-2011 10:19 » 

а где в радмине такая опция?
Записан

Удачного всем кодинга! -=x[PooH]x=-
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #69 : 09-03-2011 11:48 » 

PooH, да, точно, не в радмине, а в TeamViewer


Добавлено через 2 минуты и 35 секунд:
кстати, уже работает  передача сообщений мыши и клавы, а также разностная передача изображения ) . Довёл до 1кБ/с сти статическом экране, пока оставил дальнейшую оптимизацию, надо над другими частями программы поработать пока

Добавлено через 5 часов, 58 минут и 3 секунды:
есть смельчаки, что бы сейчас вышел в чат и потестировал мою программку ? )

Добавлено через 2 часа, 7 минут и 23 секунды:
тестировали с Димкой. Всплыли определённые проблемы
1) тормоза при сдирании кадра с контекста (это фигня, оптимизация)
2) от хрюнделя к семёрке не передаются клавонажатия (тут мысли есть, проверю)
3) когда на семёрке Аэро, то с контекста сдирается лишь чёрный экран. С обычной темой - нормально изображение берётся. Это как победить ?

* tv3.PNG (6.35 Кб - загружено 1678 раз.)
« Последнее редактирование: 09-03-2011 19:56 от Алексей1153 » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #70 : 10-03-2011 06:29 » 

Я бы наоборот сказал: с обычной темой картинки нет, картинка передаётся только для старых упрощённых тем Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #71 : 10-03-2011 06:42 » 

Dimka, кстати, а локально то не пробовал два клиента через сервер соединить ? )

А насчёт DirectX - я нашёл кое-что уже, вечером буду ковыряться
« Последнее редактирование: 10-03-2011 09:51 от Алексей1153++ » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #72 : 10-03-2011 09:49 » 

Алексей1153++, нет, локально не пробовал. И вообще тебе стоит поработать над usability Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #73 : 10-03-2011 09:50 » 

а интерфейса ещё нет, пока только функциональность делается
Записан

v2
Помогающий

ua
Offline Offline

« Ответ #74 : 10-03-2011 11:23 » 

3) когда на семёрке Аэро, то с контекста сдирается лишь чёрный экран. С обычной темой - нормально изображение берётся. Это как победить ?
А если "Print Screen" а потом изображение с буфера, или накладно будет.?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #75 : 10-03-2011 12:15 » 

v2, а буфер-то как портить будет...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zubr
Гость
« Ответ #76 : 10-03-2011 12:30 » 

v2, если там DirectX, то PrintScreen не поможет. Попробуй открыть видеоплеер и сделать с него PrintScreen.
Записан
v2
Помогающий

ua
Offline Offline

« Ответ #77 : 10-03-2011 13:53 » 

2) само задание "сделать <...> наподобие TeamView, только упрощённо"
Zubr, вот и будет упрощенно Улыбаюсь
Dimka, да буферу не повезло, но это для того, чтобы пока сделать хоть так и решать другие вопросы, а потом ...

Кроме того, в похожем коде (поиск по картинке места на экране, куда нужно кликнуть) , который я когда-то писал, проблем с Аэро нет, хотя ничего хитрого не использовал.
Код:
ToDc:=Im.Canvas.Handle; //Im:TImage (стандартный Borland'овский :) )
Dc:=GetWindowDC(GetDesktopWindow);
BitBlt(ToDc,0,0,c,d,Dc,a,b,SRCCOPY);

Возможно проблемы с 32bit - 24bit - 16bit  А черт его знает...

Протестировал - всплывающие окна тоже захватывает.





Добавлено через 17 минут и 51 секунду:
Ух! и видео тож Ага
« Последнее редактирование: 10-03-2011 15:31 от v2 » Записан
Санычъ
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #78 : 11-03-2011 09:25 » 

Господа магистры, Саныч вроде нашел  решение проблемы просмотра (хотя бы) рабочего стола на удаленном пк.
В скайпе есть функция в видеозвонке "Демонстрация экрана", которую "должен" включать визави.
...
Правда, еще не опробовал, но , думаю, качество д.б. лучше, чем в TV.
...
Спасибо. Буду навещать )))
Записан

Благодарю за внимание...
zubr
Гость
« Ответ #79 : 11-03-2011 10:01 » 

v2, этот код с DirectX не прокатит, будет черный экран на месте окна видеоплеера.
Санычъ, качество в скайпе не лучше чем чем в TV и как мне показалось тормознутее.
Записан
v2
Помогающий

ua
Offline Offline

« Ответ #80 : 11-03-2011 10:29 » 

zubr, не знаю, но 3D шахматы в W7 и "гаджеты" и видеоплееры с видео - все съедает и не давится.
Если интересно, сделаю тестовое приложение или проект -  посмотришь.
Записан
Санычъ
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #81 : 11-03-2011 14:51 » 

Санычъ, качество в скайпе не лучше чем чем в TV и как мне показалось тормознутее.
zubr, качество видео в скайпе значительно лучше, чем в TV. Но тормоз жуткий.
С чем это может быть связано?
Плачу за 5мбит...
Записан

Благодарю за внимание...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #82 : 11-03-2011 16:33 » 

Ещё с директом не разбирался (вчера валялся с температуркой чойта), а сейчас провёл пару экспериментов.
1) винамповское окно с видео ожидаемо чёрное. Однако окно со "светомузыкой" передаётся
2) запустил контру в полноэкранном режиме - прекрасно передаётся. Как так
3) клавиши не передавались - разобрался вроде, теперь передаются. Кстати, корректно ли я это делаю:

Код:
LRESULT CALLBACK HOOKfunc(int code, WPARAM wParam, LPARAM lParam)
{
if(code>=0)
{

::CallNextHookEx(m_keyHOOK,0,0,0);

//передаю по сети
//...

return 1;
}

return ::CallNextHookEx(m_keyHOOK,code,wParam,lParam);
}
Записан

zubr
Гость
« Ответ #83 : 11-03-2011 17:14 » 

Код:
LRESULT CALLBACK HOOKfunc(int code, WPARAM wParam, LPARAM lParam)
{
if(code < 0)
        return ::CallNextHookEx(NULL,code,wParam,lParam);
       

//передаю по сети
//...

return ::CallNextHookEx(NULL,code,wParam,lParam);
}
Так корректнее будет.
m_keyHOOK нет смысла передавать, в NT системах он игнорируется.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #84 : 11-03-2011 17:33 » 

игнорируется - это пусть, но мне не нужно, чтобы отправленные нажатия исполнялись на мастере. Поэтому я делаю

::CallNextHookEx(m_keyHOOK,0,0,0);

на первый взгляд всё работает

Добавлено через 13 дней, 2 часа, 23 минуты и 6 секунд:
возникла ещё одна проблема с клавой:

поставил с великим скрипом и с использованием виртуалки эксперимент с семёркой:

в итоге выяснилось, что клава успешно передаётся в направлениях:

XP -> XP
XP -> 7

но не передаётся в направлении
7 -> XP (попробовал с виртуалки управлять хостом-хрюшкой)
и
7 -> 7  (это попробовать не имею возможности, но по рассказам Зака это так)

Общий вывод – с семёрки никуда не передаётся, а с хрюшки – передаётся хоть куда.

Передачу делаю так: полученные в хуке  параметры code, wParam, lParam передаю по сети, а на том конце собираю структуру INPUT  (в коде - структура struct myKeysINPUT:public INPUT , метод Set() )

Код:
	struct myKeysINPUT:public INPUT
{
union s_pars
{
LPARAM lParam;
struct
{
LPARAM repeat_counter:16;
LPARAM scan_code:8;
LPARAM extended:1;
LPARAM :4;//reserv
LPARAM alt_down:1;
LPARAM prev_was_down:1;
LPARAM was_raised:1;//transition: 0(u->d),1(d->u),
};
};

myKeysINPUT()
{
::memset(this,0,sizeof(*this));
}

myKeysINPUT(const Common::s_e_K2K_MASTERkeyActions::s_OneKeyMove& s)
{
Set(s);
}

void Set(const Common::s_e_K2K_MASTERkeyActions::s_OneKeyMove& s)
{
::memset(this,0,sizeof(*this));
type=INPUT_KEYBOARD;

s_pars Pparse;
Pparse.lParam=s.m_lParam_;

ki.wVk=s.m_wParam_;//virtual code
ki.dwFlags=0;
if(Pparse.extended)ki.dwFlags|=KEYEVENTF_EXTENDEDKEY;
if(Pparse.was_raised)ki.dwFlags|=KEYEVENTF_KEYUP;

// templ.mi.time=0;
// templ.mi.dwExtraInfo=0;
}
};
далее массив полученных структур исполняю в SendInput

Что я забыл сделать (чтобы передача с семёрки тоже стала выполняться)?
« Последнее редактирование: 24-03-2011 19:56 от Алексей1153 » Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #85 : 24-03-2011 20:05 » 

Алексей1153++, так тебе ведь не надо ничего имитировать.

Ты ведь можешь поставить клиентскую часть с хуком на клаву, а клиентской частью отдавать на серверный вариант только события клавы. Т.е написать кейлогер.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zubr
Гость
« Ответ #86 : 24-03-2011 20:41 » 

1. Хук в 7-ке   не перехватывает клавиатуру или данные теряются при передаче?
2. Хук работает только с GUI-процессами.
3. Хуку доступны только процессы текущего пользователя, если пользователь не админ.
4. Возможно стоит попробовать воспользоваться LowLevelKeyboardProc
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #87 : 24-03-2011 20:52 » 

Ты ведь можешь поставить клиентскую часть с хуком на клаву, а клиентской частью отдавать на серверный вариант только события клавы. Т.е написать кейлогер.
имитировать нужно, как же иначе то ?

zubr,
1) надо сделать тест
2) ну он и так GUI )
3) хук поставлен внутри приложения, которое сам пользователь и запустил. Тут, кстати, хук по сути и не нужен - можно просто все сообщения клавы ловить в оконной процедуре, но там очень геморно потом преобразовывать. Поэтому оставил хук - из него легко собирается INPUT
4) ок, попробую

Добавлено через 22 часа и 42 секунды:
разобрался, кстати. Всего то лишь надо было ещё ID потока указать - последний параметр функции SetWindowsHookEx() , значение ::GetCurrentThreadId()

Сначала я туда просто 0 передавал. Хрюше было достаточно, а под семёркой хук не ставился
« Последнее редактирование: 25-03-2011 18:53 от Алексей1153 » Записан

zubr
Гость
« Ответ #88 : 26-03-2011 04:51 » 

Хмм... А тебе мониторить надо только одно приложение, которое сам же пользователь и запустил?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #89 : 26-03-2011 08:08 » 

zubr, конечно. Более того - всего одно диалоговое окно. В общем-то, было бы достаточно оконную процедуру переопределить и там ловить клаву, но сборка структур INPUT сильно сложная. С хуковыми данными просто получается. Только смотреть, что в фокусе сейчас нужный диалог
Записан

Страниц: 1 2 [3] 4  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines