Как отправить смс с линукса

Приём и обработка SMS-сообщений на Linux-машине

В одном из наших свежих проектов команде разработчиков была поставлена задача собрать максимально реальные контактные данные о пользователях нашего сайта. Жаркое обсуждение правильных и неправильных форм регистрации, одно- и двушаговые, дополнение информации по мере пользования сайтом… Казалось поток идей не остановится. Однако ни одна из них не гарантировала, что в результате мы не получим кучу никчемных данных. Валидировать? Можно, но разве все предусмотришь? Активация учетной записи через почтовый ящик для его валидации? Но куча сервисов типа 10 Minute Mail сводят на нет эффект. К тому же, специфика проекта не позволяла слишком растягивать процесс регистрации. Решено было, что пользователь должен зайти, сделать своё дело, а потом уже активировать или нет свою учетную запись. В конце концов прозвучала фраза «А давайте активировать по SMS!». Поиск провайдеров, изучение прайс-листов и отказ от идеи взвалить обработку SMS на стороннюю контору… Стало понятно, что принимать и обрабатывать их придется самим.

Скромный опыт работы с VOIP/Asterisk и подбора оборудования для VOIP-шлюза имелся. Полез по старым ссылкам к китайским братьям искать SMS-gateway. Но во-первых время поджимало, во-вторых по опыту работы с ними с первого раза редко что-то выходит, поэтому стало интересно, сможет ли обычный USB GSM-модем справиться. И, забегая вперед, скажу что это решение было правильным. По крайней мере на данном этапе.

Настройка сервера

Итак, ко мне в руки попал модемчик Huawei E1750 (HSPA USB Stick) с контрактом. Первое с чем столкнется человек взявшийся за подобную задачу, это то, что все свежие модели GSM-модемов, в угоду пользователям Windows, опознаются в системе сначала как устройство хранения данных (SCSI CD-ROM). С него запускается autorun, который установит драйвера и переключит модем в режим модема (о как!). Сразу как я узнал это, я решил «приехали». Однако еще полчаса, и была найдена утилита usb_modeswitch, которая выполняет переключение режимов модема. Только после этого модем заработает по его прямому назначению. Запускается и настраивается она просто, тут писать особо нечего.

Ну, с богом! Информации к этому моменту уже было нарыто не сказать чтоб много, но достаточно, чтобы копать в нужном направлении. Существующие решения были отфильтрованы по признаку «работает как демон», в итоге остался один кандидат — SMS Server Tools. Нужно отметить, что оригинальный пакет уже не развивается, но его продолжение SMS Server Tools 3 не только развивается, но и отлично поддерживается своим создателем Mr. Keijo «Keke» Kasvi.

К сожалению, в моей любимой Gentoo не нашлось ebuild-а для свежей версии, последняя имеющаяся версия 2.2.20. Но, недолго погуглив, я нашел уже готовый ebuild для 3-й версии, который и скомпилировал после небольшой его правки. На данный момент у меня установлена и стабильно работает версия 3.1.14.

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

Структура файла конфигурации тоже понятна до безобразия (viva unix-way!). В начале файла прописываем глобальные настройки демона, а затем в секциях описываем настройки наших устройств:
# Глобальные настройки демона
.
.

# Наш модем и его настройки
[Huawei E1750 ]
.

# И еще одно устройство, если оно у нас есть, со своими настройками
[AnotherModem]
.

Глобальные настройки

Самый важный параметр, это какие устройства демон будет опрашивать на предмет наличия новых сообщений. Если у вас всего одно устройство, как у меня, просто пропишите devices = HuaweiE1750 , если их у Вас несколько, перечислите их тут через запятую.

Еще два важных параметра — это user = smsd и group = sms . Людям, знакомым с линукс, объяснять их значение не надо, я же ограничусь лишь напоминанием о правильных правах на все ресурсы, к которым демон должен иметь доступ. Ну и упомяну про такие инструкции, как pidfile = /var/run/smsd/smsd.pid , logfile = /var/log/smsd/smsd.log , значение которых тоже должно быть понятно. Кстати, на момент отладки рекомендую вставить в конфигурацию также инструкцию loglevel = 7 , это позволит Вам отслеживать, что же происходит внутри демона. В дальнейшем я выставил loglevel = 5 .

Настройки модема

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

Одной проблемой стало жгучее желание модема все время соскочить на новое устройство. Один раз он определялся как /dev/ttyUSB0 , в другой раз под другим номером. Такое положение дел не устраивало меня. Поэтому, я стал искать как писать udev правила для устройств. Однако, когда я уже был готов внести свои изменения, обнаружилось, что ebuild usb_modeswitch уже сделал это за меня добавив в систему файл /lib64/udev/rules.d/40-usb_modeswitch.rules , согласно которому в системе появлялся симлинк на девайс по адресу /dev/gsmmodem . Его мы и пропишем в конфигурации.

Читайте также:  Sublime text editor linux

Второй проблемой стало зависание модема время от времени. К сожалению, вычитывать матчасть времени уже не было, да и гугл выдал такое количество вариантов, что пробовать их все не имело смысла. Поэтому, не особо рассчитывая на помощь, я пополз на форум smstools3. Каковы же были мои удивление и радость, когда keke ответил на мой пост через жалких 2-3 часа. Нет, точного решения он не давал, однако две строки которые он рекомендовал добавить в конфиг раз и навсегда избавили меня от зависаний. Для меня до сих пор остаётся загадкой, где брать значения для них, я не нашел технической документации по модему:
check_memory_method = 1
memory_start = 0

Ну, и третьей проблемой, из-за которой затевался весь сыр-бор, стало написание обработчика SMS. Для этого в конфиг была добавлена инструкция eventhandler = /usr/local/scripts/activate , внутри которого происходила отправка на сервер проекта запроса на активацию учетной записи. Скрипт, получает два параметра — тип события и файл сообщения. Выдергивает из него нужные нам данные, и отсылает на сервер.

Итого, получили вот такой короткий конфиг:
devices = Huawei
loglevel = 5

user = smsd
group = sms
logfile = /var/log/smsd/smsd.log
infofile = /var/run/smsd/smsd.running
pidfile = /var/run/smsd/smsd.pid

alarmlevel = 7
alarmhandler = /usr/local/scripts/activate/smsd-alarm

[Huawei]
device = /dev/gsmmodem
baudrate = 115200
pin = 1111
incoming = high
cmgl_value = 0
check_memory_method = 1
memory_start = 0
eventhandler = /usr/local/scripts/activate

Неожиданный profit

Изначально форма регистрации содержала поле Мобильный телефон — это было в требованиях проекта. Пришедшее SMS должно было быть отправлено с указанного телефона, и учетная запись с этим телефоном активировалась. Однако, как оказалось, пользователи становятся в тупик, когда им в сообщении ничего не надо писать. Сначала после регистрации появилась инструкция «Отправьте на номер 12345678 сообщение с текстом «F»». Потом родилась другая, гениальная как сейчас кажется, идея: из формы было убрано поле Мобильный телефон, после короткой регистрации (Имя, Фамилия, E-mail/login, Пароль), пользователю выдается код, который он должен отправить на указанный номер. По этому коду находится учетная запись, а телефон, с которого пришла СМС-ка заносится в профиль пользователя. Вуаля, у нас есть пользователь, есть его реальный телефон, есть возможность добавить кучу телефонов в свой профиль, и сменить номер телефона в профиле в случае утери старого, отправив еще одну СМС и удалив старый номер.

Источник

Отправка и прием SMS под Линуксом

Оригинал: Sending and Receiving SMS from your Linux Computer. Linux Gazette, #164
Автор: Suramya Tomar,
Дата публикации: июль 2009 г.
Перевод: С.Владимирский
Дата перевода: сентябрь 2009 г.

Что такое SMS? SMS — это сервис коротких сообщений, который используется для отправки текстовых посланий с одного сотового телефона GSM на другой. Но иногда вы бы хотели послать SMS-сообщение, используя ваш компьютер. Есть три способа, которыми вы можете послать SMS с компьютера:

  1. Использовать сервис SMS-шлюза, который позволяет вашему компьютеру соединиться с ним, используя API, и посылать сообщения. В Интернете существует огромное количество таких сервисов, но большинство из них не свободны и требуют оплаты.
  2. Использовать сотовый телефон или GPRS-модем, подключенный к компьютеру.
  3. Некоторые провайдеры позволяют отправлять SMS на номер телефона путем отправки почтового email-сообщения на специальный адрес электронной почты, обеспечивающий преобразование сообщения.

Я выбираю использование второго варианта, потому что мой провайдер не поддерживает последнюю опцию и, я думаю, это дешевле, чем первый вариант. Все, что вам необходимо, чтобы это работало, — это дополнительный телефон и дешевый тарифный план, что позволит вам отправлять и принимать SMS. В моем случае у меня был старый Sony Ericsson Т610, пылившийся в моем столе, так что я имел предоплаченную SIM-карту и был готов к действию.

Шаги перед установкой

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

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

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

Установка gnokii

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

Для установки из исходных кодов вам нужно будет загрузить последнюю версию gnokii с сайта проекта ( http://www.gnokii.org/download/gnokii/ ).

Читайте также:  Как запустить файл установки linux

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

Когда tar закончит раскрытие архива, перейдите в папку gnokii с помощью следующей команды:

Теперь, если вы подключаете ваш телефон к компьютеру с помощью Bluetooth, вам сначала будет необходимо установить библиотеку libbluetooth-dev с помощью следующей команды (от имени root-а):

Когда библиотека установлена, вы можете настроить установщик gnokii, используя следующую команду:

Если вы не используете Bluetooth, вместо указанной команды вам необходимо будет использовать следующую команду:

Когда настройка выполнена и вы не видите каких-либо ошибок, скомпилируйте gnokii с помощью следующей команды:

Если компиляция закончена без ошибок, установите gnokii посредством следующей команды (снова от root-а):

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

Настройка gnokii

Образец файла настройки для gnokii находится среди файлов исходных кодов в подпапке Docs/sample/ той папки, в которую вы развернули архив исходных файлов gnokii. Если вы установили gnokii с помощью apt-get, то образец файла настройки находится в папке /etc/gnokiirc.

Простейший способ настроить gnokii — изменить образец файла настройки. Для этого начнем с копирования образца файла настройки в вашу домашнюю папку с помощью следующей команды:

и откроем файл в вашем любимом текстовом редакторе для его редактирования. Первое, что вы должны сделать, это сказать gnokii, какой телефон вы используете, путем установки переменной ‘model’ в соответствии с приведенными ниже указаниями:

  • Установить model = series40, если вы используете телефон Nokia, кроме серии Symbian Series60
  • Установить model = gnapplet, если у вас телефон Nokia Symbian Series60 до 3-ей версии
  • Установить model = AT для всех остальных моделей телефонов.

В моем случае я устанавливаю модель AT.

Далее вы должны сказать gnokii, каким образом ваш телефон подключается к компьютеру. Для этого вы должны будете изменить переменные ‘connection’, ‘port’ и ‘rfcomm_channel’.

Если вы используете для соединения Bluetooth, установите для переменной соединения значение ‘bluetooth’, а для переменной порта значение адреса Bluetooth вашего телефона как показано ниже:

В соответствии с руководством пользователя переменная ‘rfcomm_channel’ может быть опущена как автоопределяемая, однако я вынужден был выполнить настройку переменной во всех деталях, чтобы использовать gnokii для соединения.

Большинство телефонов используют переменную rfcomm_channel=1. Однако для моего Nokia N95 8GB я вынужден был установить значение ‘2’, тогда как Sony Ericsson T610 использовал значение rfcomm_channel=1. Если вы не уверены, можете использовать команды ‘ sdptool search SP’ или ‘ sdptool search DUN’ или ‘ sdptool browse’ , чтобы найти правильный номер канала для вашего телефона.

Если вы для соединения используете USB, то имя соединения зависит от типа используемого вами соединительного кабеля и модели телефона. Некоторые из значений, которые вы можете попробовать подставить: ‘connection = serial’ для использования протокола AT и ‘connection = dku2libusb’ для использования протокола FBUS (если кабель и телефон поддерживают этот протокол).

Имя порта также зависит от типа кабеля: некоторые кабели создают /dev/ttyACM0, другие создают /dev/ttyUSB0. При использовании значения переменной connection = dku2libusb значение для port=1 устанавливает выбор для первого телефона, port=2 — для второго телефона и так далее. Для идентификации порта, к которому подключен телефон, смотрите /var/log/messages.

После того, как вы сделали изменения и сохранили файл настроек, вы готовы тестировать соединение.

Тестирование соединения gnokii с телефоном

В командной строке наберите следующую команду:

Если вы все установили корректно, то увидите выходной листинг для вашей модели телефона, аналогичный следующему:

Если вы не видите этого листинга, значит, gnokii не смог подключиться к вашему телефону. Проверьте доступность вашего телефона для соединения Bluetooth, корректность указания модели, корректность адреса и протокола, по которым производится попытка соединения.

Если вы все еще не можете подключиться, вам следует включить режим отладки для gnokii путем установки флага ‘debug = on’ (без кавычек) в

/.gnokiirc. Просмотр в режиме отладки позволит вам идентифицировать проблему и устранить ее.

Отправка SMS с вашего компьютера

Корректно настроив gnokii и получив выходной листинг как было показано выше, вы теперь готовы отправить SMS с вашего компьютера. Команда отправки SMS следующая:

Эта команда использует контент со стандартного входа. Например, протокол отправки SMS на номер 555-123-4567 будет выглядеть следующим образом:

gnokii может быть загружен с другими функциями. Используйте команду ‘gnokii —help’ для получения списка параметров и функциональности.

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

Отправка SMS с помощью специально оформленных email-сообщений

Чтобы отправлять SMS, когда я получаю специально оформленное email-сообщение, мне необходимо было написать программу, которая проверяет наличие новых сообщений email, а затем обрабатывает их. Для этого я использовал Perl, поскольку он превосходно подходит для обработки текста. Кроме того, я уже написал часть кода для другого проекта (отправка/прием IM как сособщений email).

Читайте также:  Эксплорер для windows 10 64 bit

Первое, что мне было нужно,- это новый email-аккаунт, к которому я мог бы иметь доступ через РОР3. Поскольку у меня есть свой домен, я вошел в панель управления моим доменом и создал новый email-адрес. Если хотите, вы можете использовать gmail.

В моей программе я полагаю, что номер телефона, на который я отправляю SMS, является темой отправленного email-сообщения, а содержание SMS — это фактическое содержание email-сообщения.

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

Вся обработка выполняется в функции ProcessEmail(). В этой функции мы сначала выделяем имя ‘От кого'(‘From’) из email-сообщения (оно добавляется в SMS, так что получатель SMS знает, кто его послал).

Получив поле ‘От кого'(‘From’), мы выделяем тему из email-сообщения и проверяем, что это номер телефона (Этот номер может быть с префиксом ‘+’ для обозначения кода страны). Если это не номер, мы игнорируем и удаляем email-сообщение. Листинг кода для этой операции показан ниже:

Наконец, мы выделяем содержание из email-сообщения. Оно становится содержанием SMS-сообщения.

Теперь у нас есть все необходимые компоненты для отправки SMS: номер назначения, содержание SMS и адрес «От кого», так что мы готовы отправить SMS. Тем не менее, поскольку мы можем отправить в одном сообщении, как максимум, 160 знаков, перед отправкой SMS нам необходимо проверить, что содержание SMS умещается в 160 знаков.

Файлы исходных кодов программы Email2SMS доступны для скачивания.

Прием SMS-сообщений на вашем компьютере.

Возможность приема SMS на вашем компьютере зависит от модели телефона, который вы используете, поскольку gnokii поддерживает не все модели телефонов. Согласно информации на сайте проекта gnokii поддерживает большинство телефонов Nokia серий 3110/3180, 5110/6110, 7110/6210 и 6510/6310. К сожалению, поддержка АТ в телефонах серии Symbian OS сильно ограничена, так что на этих телефонах обеспечиваются только самые основные функции. Более детальная информация о поддержке телефонов доступна по на сайте проекта .

К моему прискорбию, я не смог прочитать SMS-сообщения с помощью gnokii с телефонов Nokia как серии N95, так и серии T610. Мне удалось организовать только отправку SMS-сообщений с этих телефонов.

Если ваш телефон поддерживается, вы можете прочитать SMS-сообщение на телефоне, используя следующую команду:

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

Некоторые возможные значения:

  • ME: Internal Phone memory
  • SM: SIM card
  • MT: Combined ME and SIM phonebook
  • CB: Currently selected memory

Для считывания всех SMS из внутренней памяти телефонов на стандартный дисплей наберите следующую команду:

Другая интересная опция для считывания SMS: ‘—smsreader’, которая обеспечивает ожидание входящих сообщений и сохранение их в почтовом ящике в папке /tmp/sms/* (фактическое имя файла может меняться). В этом случае сообщения никогда не сохраняются в телефоне.

Итоги

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

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

Биография автора (Suramya Tomar)

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

Линукс я начал изучать в конце 1999г., когда друг дал мне инсталляционный CD-диск Redhat 7.1, а другой друг «пожертвовал» жесткий диск на 6ГБ. Это произошло сразу после того, как упал мой Windows 98 и я решил дать возможность выстрелить Линуксу. Я его испытал и почти сразу привязался к нему. Через два года я сделал апдейт на Redhat 7.3, но когда Redhat решил прекратить поддержку Redhat 7.3, я переключился на Debian и с тех пор чувствую себя счастливым.

Мне нравится много программировать и недавно я понял, как разобраться в неразберихе кодов, с помощью которых некоторые любят вызывать скрипты на Perl, и обнаружил, что мне это действительно нравится. Для интернет-сайтов я предпочитаю использовать РНР с СУБД MySQL. Я могу программировать на С, С++, VB, .NET. Мне также очень интересна компьютерная безопасность и искусственный интеллект. Я стараюсь как можно больше читать публикуемые здесь материалы.

Кроме работы за компьютером мне нравится читать (в основном фантастику и научно-популярную литературу, однако я читаю все что угодно, кроме романов и романтической литературы), слушать музыку (среди любимых певцов: Шаниа Тваин, Ин-Грид, Кристал Ватерс) и разбирать что-нибудь, чтобы посмотреть, как это работает.

Источник

Оцените статью