Системное администрирование

индекс
199,96

Управление компьютером с помощью SMS сообщений

Хочу предложить вашему вниманию программу, которую я написал ради эксперимента. Программа представляет из себя системную службу, которая работает с GSM модемом, умеет принимать и отправлять SMS сообщения. В зависимости от текста пришедшего сообщения вызывает указанные скрипты и отправляет ответ.
Может пригодится, например, для управления сервером, доступ к которому ограничен (находится во внутренней сети компании). Не судите строго, т.к. это скорее прототип, первая версия.


Скачать программу можно здесь.

В архиве программы находятся несколько файлов: сама программа (SMSRC.exe), файл установок (options.ini), примеры готовых скриптов (папка scripts).

Железо
Должно работать с любым GSM модемом, либо сотовым телефоном, который может быть подключен в режиме GSM модема. Для определения номера порта, на котором «висит» модем, необходимо зайти в панель управления, открыть панель Телефон и модем на закладке Модемы в столбце Подключен к посмотреть номер порта.

Настройка и запуск
Перед запуском необходимо изменить файл установок (указать порт, как минимум прописать свои номера), убедиться, что на компьютере не запущено других программ, работающих с GSM модемом.

Для установки программы в качестве службы необходимо запустить ее с ключем -install. Для удаления из служб -uninstall. Для запуска без добавления в системные службы -debug (окна при запуске не создаст, для останова придется «убивать» через список процессов).

Файл установок представляет из себя ini файл в котором задаются параметры подключения к устройству и сценарии обработки сообщений.

[Settings]
; Номер порта, на котором висит модем
port = com8
rate = 115200
; Интервал проверки в миллисекундах
timeout = 5000

Далее следуют сценарии. Рассмотрим один из них для примера.

; В квадратных скобках текст пришедшего сообщения
[123]
; Путь к скрипту
script = scripts\cpuLoad.vbs
; Отправлять ответ. Если ключ отсутствует,
; либо его значение не равняется единице ответ отправляться не будет
reply = 1
; Номер, на который следует отправлять ответ
replyTo = 7917XXXXXXX
; Действие разрешено, если запрос пришел с одного из указанных номеров
allowedTo = 7917XXXXXXX,7902YYYYYYY

Если с номера 7917XXXXXXX или 7902YYYYYYY придет сообщение с текстом 123 будет выполнен скрипт cpuLoad.vbs и ответ будет отправлен на номер 7917XXXXXXX

Скрипт cpuLoad.vbs содержит:

On Error Resume Next

Dim strComputer : strComputer = "."
Dim strResponse

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor",,48)

For Each objItem in colItems
  strResponse = strResponse & "CPU load: " & objItem.LoadPercentage & "%" & vbCrLf
Next

Wscript.Echo strResponse


* This source code was highlighted with Source Code Highlighter.


Скрипт, через WMI, получает информацию об установленных процессорах, для каждого из них определяет текущую загрузку и выдает результат через Wscript.Echo. Этот текст и будет отправлен SMS-кой.

Внимание! Не используйте в скрипте MsgBox, при выполнении такого скрипта программа будет ждать окончания выполнения скрипта, а скрипт, в свою очередь, закрытия окна сообщения.

В качестве примера в архиве так же присутствует скрипт для определения IP адреса подключения к локальной сети и открытия mp3 файла.

После запуска в директории программы будет создан файл debug.log, который, в случае неработоспособности, сможет подсказать где искать причину.

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

Буду рад, если программа кому-нибудь окажется полезной.

UPD

Набор классов для получения, отправки SMS сообщений и пример использования в исходниках на C++ лежит здесь По идее должно работать под любой версией Windows

UPD2 Добавлен ключ -send для отправки SMS из коммандной строки. Пример:

SMSRC.exe -send XXXXXXXXXXX «from cmd line!»

Где XXXXXXXXXXX — номер, на который следует отправить SMS.

В данный момент программа работает в режиме «дудочка или кувшинчик», т.е. запустить программу как сервис и одновременно использовать ее для отправки SMS из коммандной строки нельзя. Первый экземпляр откроет COM-порт, к которому подключен модем, и кроме него доступ к модему больше никто не получит. В данный момент я решаю, как разрешить использовать нескольким экзеплярам один порт. Как решу — выложу обновление.
+41
8 сентября 2009, 11:04
77

комментарии (38)

+1
denvo #
Было бы интересно посмотреть исходники, особенно в части приема-отправки SMS. Если это не противоречит вашей лицензионной политике, конечно.
+4
Antikiller #
>Было бы интересно посмотреть исходники
Попробую угадать: там элементарные команды GSM-модема (AT+CMGF и т.д.), отправляемые на порт.
+1
Terror #
Так точно, обычные команды модема и работа с PDU
0
Siddthartha #
очень хотел использовать эти возможности с 3g модемом пиплнетовским (telit), но ни одна из них не прошла… на знаете в чем дело?
+3
Terror #
Исходники и пример использования выложу, ссылку добавлю в статью
0
xredor #
Ссылки в статье, видимо, устарели. Обновите, пожалуйста.
И обещали выложить исходники. Было бы интересно посмотреть.
–1
BlackStorkKCO #
А ребутнуть полностью зависший сервер так не получится ведь?
0
smq #
Это надо к Arduino какому-нить подключать и чтобы он ребутал. Дело на полдня
+2
Blandinka #
Виброзвонком от СМС замыкать контакт ресета?
Хотя тогда он будет ребутать сервер на каждую СМСку…
Ага, нужно 2 телефона!
0
odminestrator #
неужели так часто приходится ребутать сервера, что для этого нужно подсоединять мобильник? ради такого случая можно ребутать и самостоятельно, зайдя в серверную) Мобильник больше подходит для экстренных оповещений, когда другим способом инфу не передать…
0
Terror #
Если он завис намертво, да так, что и этот сервис «умер», то не получится. Если же сервис еще ворочается, то можно скриптом. Пример есть здесь

Есть еще железный вариант с подобной штукой Управляет питанием, сам управляется по SNMP

0
Vertex #
А вот к вам вопрос… а где такую штуку купить и сколько она денег стоит? Нигде не смог найти… полдня угробил
0
Terror #
Вот, например IPM-8002-EU Planet. Цены и где купить можно посмотреть на price.ru
0
Terror #
И вот, подешевле, NetPing Цена вопроса от 1500 рублей
0
Breaker #
Слегка глючная вещь.
Также можно попробовать PingComServer: функционал пошире, работает стабильнее, саппорт более адекватный.
П.С.: занимался этими железками 2-3 года назад.
–2
kingoleg #
Чисто зло.
0
indapublic #
Хорошая программа.
А отправить смс из командной строки она сможет? Тогда еще одно ее применение: отправка сообщений в некоторых случаях (допустим, пропал/восстановился Интернет или остановилась критичная служба). Можно конечно воспользоваться почтой типа «номер@оператор.ру», но все же ради интереса.
+1
Terror #
Хорошо, добавлю
+1
Terror #
Добавил, перезалил

SMSRC.exe -send XXXXXXXXXXX «from cmd line!»

Есть ограничения, добавил информацию в конце статьи.
0
indapublic #
Благодарю, потестирую :)
+1
ImKremen #
Вы изобрели «Отправте смс на номер ХХХ с текстом...» :)
+4
Terror #
Можно деньги на этом зарабатывать. Отправь SMS с текстом 123 на номер XXX и перезагрузи сервер :)
–6
RUQ #
Тёмы Лебедев
0
eremeevDOTru #
Полезно.
+1
123 #
>>Может пригодится, например, для управления сервером, доступ к которому ограничен
Действительно, после настройки SMS-интерфейса, c ограниченностью доступа будет покончено. :)
0
mihmig #
При текущем соотношении GPRS/SMS трафика выгоднее с коммуникатора управлять сервером с помощью putty через SSH.

Хотя, если с египетского пляжа нужно ребутнуть сервачок к Задрищенске м.б. и одинаково выйдет…
+1
kutsy #
Очень хорошая идея.
Но так и хочется отправить «format C:» :-)

Вот только было бы классно что-то подобное для *nix-cистем.
Если кто-то знает — не молчите!
+1
eeccho #
Kannel. Штука достаточно монструозная и предназначена, по большому счёту, для контент-провайдеров, но и для целей, освещённых в статье, подойдёт вполне, достаточно будет настроить взаимодействие с GSM-модемом и навешать реакции exec на keyword в SMS-service.
0
kutsy #
Спасибо, поковыряем.
+2
linx56 #
Вот тут подробности www.lissyara.su/?id=1787.
У себя поднял это на Motorola c390 + Ubuntu.
0
kutsy #
Тут больше о создании СМС-шлюза, но всё-равно спасибо.
0
linx56 #
Не скажите, там внизу отличный перл-скрипт для реакции на события. Именно его я и спользовал, чтобы команды из СМС обрабатывать. Плюс можно сделать «аутентификацию» по номеру от которого пришла СМС.
–1
Zhilinsky #
С этим бы и nnCron справился, например.
+1
lost_shadow #
Делал нечто подобное лет 5 назад.
Но я так и не решил две проблемы:
Некоторые телефоны, например, фирмы Motorola, умеют отдавать sms только в текстовом режиме. То есть команду смены на бинарный режим они принимают (AT+CMGF=1, что ли, не помню уже), но смс отдают текстом. При этом склеить составную смс не представляется возможным.
Перерыл немало открытой документации по GSM, но так и не научился склеивать отправляемое составное сообщение. Делаю так же, как во входящих, отправляется, но не приходит получателю.

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

Проблему универсальности команд я решил так:
Первой командой отсылал имя хоста, порта и юзера, и с этими параметрами запускался модифицированный стандартный ssh-клиент. Вся модификация сводилась к тому, чтобы убрать проверку на то, что stdin является псевдотерминалом. Дело в том, что если stdin не является псевдотерминалом, то ssh отказывается считывать с него пароли.
Дальше всё просто — с телефона с помощью AT-команд через демон считывается SMS, и, если не содержит специальных инструкций, то перенаправляется в трубу стандартного входа ssh, далее ответ по некоторому алгоритму считывается и ответ отправляеться обратно в сеть.

Разработку прекратил по следующим причинам:
— сомнительные перспективы — тогда уже появились телефоны с Java, на них можно было поставить ssh-клиент
— был студентом, денег на смену телефона не было, а брать телефоны взаймы у знакомых всё время неудобно

Актуальная такая вещь может быть в следующих случаях:
— если абонент находится в роуминге/попе без gprs
— нет возможности вывести порт ssh-сервера наружу
— абонент не позаботился о апгрейде телефона на телефон с java и gprs и установкой на него ssh-клиента. К слову, мне в этом деле все эти годы не везло — каждый раз, покупая новый телефон, я забывал проверить в нём наличие Java. И, конечно, каждый раз его не оказывалось.
0
Terror #
А я, кажется, нашел применение для себя. Правда оно уже никак не касается удаленного управления — возможность сменить оператора и ничего не пропустить. :)

Все входящие SMS пересылать на новый номер (с пометкой от кого), входящие звонки отбивать и слать SMS-ку о том, что был звонок с такого-то номера.
0
AracooL #
А вот было бы ооочень хорошо если б тоже самое но под никсы…
0
nemaniak #
Ссылки битые… У кого осталась прога или исходники большая просьба поделится.
0
NukLeoN #
Присоединяюсь к nemaniak, линки битые :-(

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.