|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.01.2011, 23:15 | #1 |
Пользователь
Регистрация: 11.01.2011
Сообщений: 12
|
Перехват данных или эмуляция действий пользователя?
Кратко смысл задачи, поставленной передо мной таков.
На работе наш отдел обслуживает несколько удаленных телефонных станций. Работа осуществляется через программу-терминал. Один из высших начальников приказал отсылать ему все данные о телефонных соединениях, сделанных с его номера. Специальной функции в софте АТС для этого нет, мы с теминала запускаем диагностическую программу, которая завершает свою работу через 15 мин после крайнего события. Соответственно, дежурный скачет козликом, чтобы постоянно запускать диагностику и копировать с экрана данные в файл отчета. Есть желание как-то автоматизировать этот процесс. Мысли пока такие: 1. Сделать прогу, которая будет сканировать нужный порт и сразу записывать перехваченные данные в лог. Сложность в том, чтобы расшифровать данные, поскольку передаются они бинарном виде. Если бы это удалось, то также можно было бы отправлять команду перезапуска диагностики 2. Просто эмулировать действия пользователя, подменить ввод с клавы вводом из моей программы. Но как, подскажите? |
12.01.2011, 10:04 | #2 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
>>которая завершает свою работу через 15 мин после крайнего события
сделать чтобы не завершалась >>копировать с экрана данные в файл отчета то что выползает на экран с помощью какой либо программы запросто можно копировать и сохранять в файл без всяких скачущих козликами дежурных а вообще программу смотреть надо, я скажу, да и хоть бы сказали ОС под которой это все работает
Нет, ну правда..
|
12.01.2011, 11:44 | #3 | |
Пользователь
Регистрация: 11.01.2011
Сообщений: 12
|
На клиентских машинах ХР, а ОС сервера (АТС) - Линукс.
Цитата:
|
|
12.01.2011, 13:45 | #4 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
насколько я понимаю программа-клиент, которая работает под винду выдает нужную вам информацию, но завершает работу после 15ти минут бездействия. Все так? программа консольная или нет?
Нет, ну правда..
|
12.01.2011, 16:22 | #5 |
Пользователь
Регистрация: 11.01.2011
Сообщений: 12
|
Да, все именно так. Программа неконсольная, хотя в ней имеется псевдо-консоль. Вот как выглядит окно программы
|
12.01.2011, 16:38 | #6 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
насколько понимаю нужная инфа в окошке с именем вверху LIST TRACE, думаю можно просто написать для этой программки длл, которая будет инжектиться в процесс программы, сабклассить данный контрл с текстом и пропускать все данные через свою процедуру, в которой можно сохранять в файл, можно не сохранять в файл, вообщем вся информация программно уже будет в руках
насчет 15ти минут это надо либо смотреть саму программу, потому что непонятно от чего она отсчет ведет от какого именно сообщение итп.
Нет, ну правда..
|
12.01.2011, 17:17 | #7 | |
Пользователь
Регистрация: 11.01.2011
Сообщений: 12
|
Цитата:
Я не очень владею программистским жаргоном (инжектить, сабклассить и т.д.), поскольку никогда не общался другими с программистами, так жизнь сложилась. Нельзя ли теперь перевести эту терминологию. Если говорить простым языком, решение я вижу такое:
Так что, если несложно, можно поподробнее про "инжектить" и "сабклассить". |
|
12.01.2011, 17:53 | #8 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Да все просто. Инжектить это подгружать в адресное пространство процесса. Обычно имеется ввиду длл библиотека. Тут думаю можно будет запросто прописать ее статически в таблице импорта программы, если программа не проверяет целостнось своего ексе файла. Сабклассинг. У оконных программ есть так называемый основной цикл приема сообщений окну, для него создается процедура, которая имеет свой адрес в пространстве процесса. Смысл сабклассинга изменить этот адрес(из длл это и произойдет) чтобы сначала сообщения шли в нашу процедуру с возможностью их анализа и обработки, а затем если данные не нужны можно в том же виде отправлять их в основной оконный цикл, а можно вообще ничего не отправлять основному циклу. Вкратце примерно так. Почитайте про сабклассинг-статей очень много
Нет, ну правда..
|
12.01.2011, 18:13 | #9 |
Пользователь
Регистрация: 11.01.2011
Сообщений: 12
|
Спасибо, уже читаю
|
12.01.2011, 20:35 | #10 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Наверное легче всего будет так:
пишем exe программу-лоадер(не особо кошерно конечно, ну да ладно), лоадер запускает цикл поиска окна программы - окна нет стало быть запускаем исследуемую программу-терминал, делаем задержку чтобы не запускалось по стопиццот раз одно и то же приложение, повторяем цикл, находим нужное окно, находим идентификатор потока в котором крутится оконный цикл, устанавливаем хук на этот цикл(с помощью длл), у каждого контрола есть свой ID, который легко ищется с помощью разных программ типа WinSpy, ждем когда будут идти сообщения нужному контролу, анализируем информацию, нужную - сохраняем. И все вроде должно бы получится единственное что нужно прочесть это про виндовые хуки можно здесь: http://www.wasm.ru/article.php?article=1001024
Нет, ну правда..
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Эмуляция действий мыши в свернутом окне | senia | Win Api | 12 | 18.11.2010 16:38 |
Перехват POST передачу данных | Verst | Общие вопросы Delphi | 4 | 24.11.2009 15:34 |
Перехват данных с формы | brato4karik | Win Api | 8 | 20.11.2009 13:38 |
создание учётной записи пользователя в системе с случайными параметрами (имя, пароль). js или vbs | samCS | JavaScript, Ajax | 1 | 22.12.2008 19:36 |
Перехват данных | Socol | Работа с сетью в Delphi | 1 | 19.02.2007 13:47 |