Почтовый робот своими руками
Дата: 22/04/2005
Тема: Все, что связано с Глобальной сетью


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

Системные администраторы -- народ переборчивый. Одни любят маленькие утилиты и командные файлы, другие предпочитают сложные корпоративные приложения. Кто-то без промедления приступает к изучению очередного обновления какого-нибудь Resource Kit, а кто-то, волею судьбы перебравшись на платформу Windows, никак не может расстаться со своим Unix-прошлым. Однако никто из них наверняка не откажется познакомиться с новой технологией или идеей, способной повысить эффективность труда или упростить решение определенных задач. Надеемся, в сегодняшнем материале они также найдут для себя кое-что интересное.

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

Рис. 1. Различные каналы доставки почтовому роботу сообщений с командами
Поскольку почтовые роботы фактически используются (не считая совсем банальных случаев) для удаленного управления компьютером, у многих наверняка возникнет вопрос о целесообразности их создания и применения. Действительно, в настоящее время наблюдается расцвет программных средств и даже онлайновых служб, позволяющих дистанционно получить полный контроль над вашим компьютером, однако существуют ситуации и задачи, для которых использовать подобные решения неэффективно или вообще невозможно. Несмотря на то что почтовые роботы, безусловно, не являются альтернативой таким универсальным инструментам, в некоторых случаях они вполне удобны, а иногда попросту незаменимы:

  • как правило, оформить и отправить письмо проще и быстрее, чем установить полноценную сессию с удаленным компьютером;
  • даже если в настоящий момент в вашем распоряжении лишь мобильный телефон, вы сможете воспользоваться SMS;
  • при нестабильности или высокой загрузке канала связи традиционное удаленное управление может превратиться в сущее мучение;
  • почтовые роботы также хороши как резервный способ администрирования в случае отказа некоторых системных служб;
  • как правило, организация удаленного управления требует открытия дополнительных портов брандмауэра, что не всегда приветствуется, онлайновые же службы, хоть и обходятся одним HTTP, не бесплатны.
Таким образом, почтовый робот вполне заслуживает того, чтобы стать еще одним инструментом в арсенале системного администратора -- применяемым по ситуации, но от этого не менее полезным.

Что касается воплощения такого робота в жизнь, то тут стоит, пожалуй, обратить внимание читателя на следующий момент -- опытный системный администратор часто предпочтет отказаться от сторонней утилиты, если ее функциональность хотя бы отчасти дублирует возможности стандартных средств. Гораздо мудрее и надежнее досконально разобраться в уже имеющихся технологиях и инструментах, а при необходимости связывать их друг с другом с помощью командных файлов или скриптов. Именно этот принцип мы и возьмем на вооружение.


Что нам понадобится

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

Раз наш робот -- почтовый, то ему, естественно, необходим собственный почтовый ящик, размещенный на сервере, поддерживающем протоколы POP3 и SMTP, -- хоть внутрикорпоративном, хоть публичном вроде mail.ru (в этом случае управляемый компьютер, естественно, должен быть подключен к Интернету). Во избежание путаницы и различных неприятностей этот ящик не рекомендуется использовать ни для каких других целей.

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

Общее управление будет осуществлять стандартный планировщик задач Windows -- для наших целей его вполне достаточно. В качестве альтернативы можно рассмотреть программу nnCron, которая, в частности, умеет самостоятельно проверять наличие корреспонденции в указанных почтовых ящиках.


Реализация

Рис. 2. Не поленитесь подробно разобраться с настройками планировщика
Для начала создадим в корневом каталоге диска C: папку Programs, а в ней -- подпапки Postie и MailRobot. В первую установим одноименную утилиту, а во второй заведем еще две подпапки: Archive -- для журнала операций и Commands -- для инструкций роботу.

Далее займемся созданием вспомогательных командных файлов. Первый (!get_msg.bat) будет получать письма из почтового ящика, выделенного роботу, а второй (!send_msg.bat) -- отправлять результаты выполнения команд по указанному адресу. Тексты обоих приведены в листингах, в каждом случае используется только один вызов postie, однако программе необходимо передать правильные параметры (в нашем примере предполагается применение mail.ru) -- подробности вы найдете в документации.

Обратите также внимание, что !get_msg.bat удаляет очередное письмо с сервера, а его содержимое сохраняет в файле !in_mail.bat. В свою очередь, !send_msg.bat предполагает наличие файла !out_mail.txt с результатами выполнения команд.

Теперь создадим основной командный файл !proceed.bat, который будет работать по следующему алгоритму:
  1. Получать сообщение из почтового ящика, выделенного роботу, и сохранять его в командном файле.
  2. Делать в журнале соответствующую пометку, содержащую текущие время и дату, а также текст команды.
  3. Выполнять командный файл, полученный на шаге 1, и результаты его работы также заносить в журнал.
  4. Отправлять специальный файл с результатами работы на ваш (либо любой другой указанный) адрес, а после -- удалять его.
Дополнительно мы добавили команды, проверяющие наличие старых рабочих файлов и при необходимости уничтожающие их. По-скольку этот набор из трех командных файлов фактически и есть сам почтовый робот, разместим его в папке MailRobot.

Собственно, все, что нам осталось, -- настроить планировщик задач, чтобы он ежеминутно запускал созданный нами на предыдущем шаге командный файл !proceed.bat. Не забудьте указать пользователя, от имени которого будет выполняться задание, и его пароль.


За дело

На этом создание почтового робота фактически завершено. Теперь достаточно направить на его адрес письмо, в теле которого следует разместить любые допустимые команды операционной системы или вызовы программ. Чтобы получить результаты их выполнения, необходимо перенаправлять консольный вывод в файл !out_mail.txt (при последовательном выполнении нескольких команд не забудьте использовать >> вместо >).

Однако при непосредственном применении почтового робота ввод команд вручную непрактичен -- это не очень удобно, кроме того, велик риск допустить ошибку. Скорее всего, вам редко понадобится передавать роботу такие команды, которые нельзя предусмотреть и определить заранее, поэтому мы рекомендуем создать набор полезных командных файлов и разместить их в папке Commands.

Например, иногда очень полезно просто проверить, что компьютер находится в рабочем состоянии. Для этого вполне подойдет файл hi.bat, содержащий одну строку:

echo "Robot Response - ALL OK!" > !out_mail.txt

Теперь необходимо лишь отправить роботу письмо всего с двумя буквами hi и дождаться его ответа.

А что делать, если вы уехали в командировку и забыли выключить компьютер? Ваш почтовый робот и здесь придет на помощь. Для этого понадобится файл sh.bat с командой:

shutdown -s

Напоследок предложим чуть менее тривиальный пример, перезапускающий определенную системную службу. Командный файл rsfw.bat с таким содержимым

REM Restart Firewall Service
net stop "Microsoft Firewall" >
!out_mail.txt
net start "Microsoft Firewall" >> !out_mail.txt


имеет непосредственное практическое значение, которое оценят администраторы, знакомые с Microsoft ISA Server: зачастую только таким образом можно решить проблемы с правилами публикации сервера. А если доступ к нему с помощью службы Remote Desktop невозможен, то без почтового робота просто не обойтись.

Естественно, можно создавать и гораздо более сложные командные файлы, в том числе такие, которые получают параметры -- хватило бы фантазии и опыта.


О безопасности

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

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

Для решения этой задачи можно предложить два очень простых, но довольно эффективных варианта, основанных на фильтрации корреспонденции:

  • специальная сигнатура или пароль в теме письма;
  • "белый" список адресатов, от которых допускается принимать корреспонденцию.
Оба варианта, конечно, имеют свои плюсы и минусы и, в принципе, могут применяться совместно.

Еще одним потенциально уязвимым местом при работе с почтовым роботом является ваш собственный почтовый ящик, откуда осуществляется отправка команд. В данном случае рекомендации также вполне традиционны -- надежно удаляйте копии отправленных роботу писем (в том числе выполняя, когда возможно, операции "сжатия" почтовых папок). Также следует иметь в виду, что ваши письма могут быть просмотрены на внутрикорпоративном почтовом сервере. Из этих соображений вполне разумно использовать для отправки команд онлайновую службу, доступную через Web-интерфейс и поддерживающую безопасное соединение, или ваш личный мобильный телефон и SMS.

И последняя, наиболее общая, рекомендация: если вы серьезно заботитесь о безопасности, то одной из главных ее составляющих всегда было, есть и будет обеспечение конфиденциальности жизненно важной информации -- не посвящайте никого в детали реализации вашего робота, тогда наверняка у вас будет меньше головной боли.


Дальнейшее развитие

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

Безопасность. Несмотря на свою кажущуюся простоту, используемый почтовый клиент postie поддерживает PGP -- пожалуй, самый популярный инструмент обеспечения персональной конфиденциальности. С его помощью можно реализовать шифрование отправляемых писем/команд, чтобы никто даже не догадался об их содержании, либо просто применять цифровую подпись в качестве средства аутентификации.

Удобство использования. Набирать команды в SMS-сообщении достаточно неудобно. Читатели, знакомые с языком JAVA и обладающие мобильными телефонами с J2ME (а сейчас практически все новые модели, независимо от ценового диапазона, поддерживают эту платформу), могут попробовать свои силы в написании мидлета, который представлял бы собой оболочку для отправки заготовленных команд -- что-то вроде "мобильной консоли удаленного управления".

Возможности. Реализация почтового робота в виде набора командных файлов существенно отражается на его функциональности. Если же вместо них использовать, скажем, сценарии на Windows Scripting Host, то возможности робота станут практически безграничными. В таком случае можно будет не просто выполнять простые команды, но и обеспечивать взаимодействие со сложными программными комплексами -- как вам, например, такое: запросить через SMS у корпоративной АСУП объем полученной фирмой прибыли за текущий день?

Компоненты почтового робота

!get_msg.bat

programspostiepostie -host:pop.mail.ru -user:mailrobot -pass:password

-msg:1 -file:commands!in_mail.bat -extract --rm


!send_msg.bat

programspostiepostie -host:smtp.mail.ru -from:mailrobot@mail.ru

-to:user@mail.ru -file:commands!out_mail.txt


!proceed.bat

:start

if not exist commands!in_mail.bat goto :no_old_mail

del commands!in_mail.bat


:no_old_mail


if not exist commands!out_mail.txt goto :no_old_send_mail

del commands!out_mail.txt


:no_old_send_mail


call !get_msg.bat


if not exist commands!in_mail.bat goto :no_new_mail


echo NEW COMMAND ARRIVED >> archivearchive.txt

echo Time stamp: ------------------- >> archivearchive.txt

date /t >> archivearchive.txt

time /t >> archivearchive.txt


echo Command data: ----------------- >> archivearchive.txt

type commands!in_mail.bat >> archivearchive.txt


echo Command output: --------------- >> archivearchive.txt


cd commands

call !in_mail.bat >> ..archivearchive.txt

cd ..


echo ------------------------------- >> archivearchive.txt


if not exist commands!out_mail.txt goto :no_new_send_mail


call !send_msg.bat

del commands!out_mail.txt


:no_new_send_mail


goto :start


:no_new_mail

Автор: Вячеслав Колдовский
Источник: www.itc.ua







Это статья Информационный проект Ynks.Net
http://www.ynks.net

URL этой статьи:
http://www.ynks.net/modules.php?name=News&file=article&sid=70