Управление компьютером с помощью 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-порт, к которому подключен модем, и кроме него доступ к модему больше никто не получит. В данный момент я решаю, как разрешить использовать нескольким экзеплярам один порт. Как решу — выложу обновление.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 41

      +1
      Было бы интересно посмотреть исходники, особенно в части приема-отправки SMS. Если это не противоречит вашей лицензионной политике, конечно.
        +4
        >Было бы интересно посмотреть исходники
        Попробую угадать: там элементарные команды GSM-модема (AT+CMGF и т.д.), отправляемые на порт.
          +1
          Так точно, обычные команды модема и работа с PDU
            0
            очень хотел использовать эти возможности с 3g модемом пиплнетовским (telit), но ни одна из них не прошла… на знаете в чем дело?
          +3
          Исходники и пример использования выложу, ссылку добавлю в статью
            0
            Ссылки в статье, видимо, устарели. Обновите, пожалуйста.
            И обещали выложить исходники. Было бы интересно посмотреть.
          –1
          А ребутнуть полностью зависший сервер так не получится ведь?
          • UFO just landed and posted this here
              +2
              Виброзвонком от СМС замыкать контакт ресета?
              Хотя тогда он будет ребутать сервер на каждую СМСку…
              Ага, нужно 2 телефона!
                0
                неужели так часто приходится ребутать сервера, что для этого нужно подсоединять мобильник? ради такого случая можно ребутать и самостоятельно, зайдя в серверную) Мобильник больше подходит для экстренных оповещений, когда другим способом инфу не передать…
                  0
                  Если он завис намертво, да так, что и этот сервис «умер», то не получится. Если же сервис еще ворочается, то можно скриптом. Пример есть здесь

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

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

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

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

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

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

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

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

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

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

                                          Все входящие SMS пересылать на новый номер (с пометкой от кого), входящие звонки отбивать и слать SMS-ку о том, что был звонок с такого-то номера.
                                        • UFO just landed and posted this here
                                            0
                                            Ссылки битые… У кого осталась прога или исходники большая просьба поделится.
                                              0
                                              Присоединяюсь к nemaniak, линки битые :-(
                                                0
                                                Ну хоть ктонибудь перезалил бы :(
                                                Или может аналоги есть?
                                                  0
                                                  Извините, братцы, новую версию залил в rar, и никак не мог понять отчего скачать никто не может. Перезалил.
                                                    0
                                                    Оперативно :)
                                                    Спасибо!

                                              Only users with full accounts can post comments. Log in, please.