Сотовый фрикинг Sms в двух словах

Discussion in 'Электроника и Фрикинг' started by halkfild, 5 Nov 2007.

  1. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313
    SMS в двух словах

    1 Что такое SMS?

    SMS (Short Messages Service) — услуга, предоставляемая операторами цифровых стандартов мобильной связи (GSM, CDMA, DAMPS), заключающаяся в отправке коротких текстовых (и не только) сообщений на мобильный телефон, называемый также Mobile Terminal (MT) или Mobile Station (MS). В силу некоторой специфики, данный сервис не приобрел в России такой же популярности, как на западе, однако, постепенно начинает ее завоевывать. Причина «западной» популярности сервиса проста: его дешевизна по сравнению с голосовыми пререговорами, а также то, что обмен короткими сообщениями хорошо поддается автоматизации. Вообще, с точки зрения SMS, сотовый телефон можно рассматривать, как двусторонний пейджер, с одним большим преимуществом: сообщение будет обязательно доставлено (как говорят «доведено»), вне зависимости, находится ли абонент в зоне приема в момент его отправки (а точнее будут предприниматься попытки его доведения до тех пор, пока не истечет его «срок годности», validity period).

    2 Причем здесь программирование?


    Резонный вопрос, ведь написание софта для «мобильников» не самая распространенная область программистской деятельности. Но вся штука в том, что большинство (а скорее всего — все) операторов предоставляют возможность обмена короткими сообщениями между MT и внешними, по отношению к мобильной сети (PLMN – Private Local Mobile Network) устройствами, т. н. ESME (External Short Messages Entity), в качестве которого может выступать любое ПО, поддерживающее определенный протокол. Делается это с помощью определенных устройств, называемых SMSC (Short Messages Service Center), одним «концом» подключенных к PLMN, а другим — в сеть общего назначения, например TCP/IP (Internet). Вот как это выглядит:

    [​IMG]

    Не обращайте пока внимание на аббревиатуру SMPP (к ней мы вернемся чуть позже), а вместо нее читайте «некоторый протокол для связи с SMSC». Хорошим примером ESME является последняя версия «аси». Что? Уже кидали «мессаги» подружке на трубку? Так не пора ли теперь разобраться, как все это устроено?

    3 Протоколы SMS.

    Вот тут мы затронули достаточно скользкую тему. Дело в том, что хоть они и называются «протоколами», таковыми на деле не являются: это отраслевые рекомендации разработчиков SMSC, которых довольно много. И если в части передачи сообщений по мобильным сетям особых разногласий не наблюдается: работает «настоящий» протокол SS7 (Signaling System Seven, тема для отдельного большого разговора), то в части доведения сообщений от ESME до SMSC каждый разработчик придумывает свой «протокол»; единственное требование к разработчику: публикация спецификаций. Упомянем самые популярные протоколы, кратко перечислив их отличительные черты.

    3.1 SMPP

    SMPP (Short Messages Peer-to-Peer) является, видимо, самым распространенным протоколом и разрабатывается SMPP Developers Forum (ничего общего с Open Source, просто организация такая). Один из, на наш взгляд, самых удобных протоколов, много возможностей, достаточно хорошо проработан. SMPP предлагает бинарную кодировку пакетов (впрочем, к этому мы еще вернемся). Используется многими операторами, в т. ч. British Telecom.

    3.2 EMI


    Протокол EMI (External Machine Interface) продвигает ETSI (кажется расшифровывается как European Telecommunication Standards Institute). Предлагает текстовую кодировку пакетов, также имеет развернутые возможности, но, на наш взгляд, неэстетичен :). В различных диалектах используется многими провайдерами, точно — Swisscom'ом, вроде как — NWGSM'ом.

    3.3 SMS2000 aka SEMA


    Тяжелый протокол, разрабатывается SEMA Group. Однако, возможности большие. Предлагает на выбор бинарную, шестнадцатиричную и IA5 кодировку пакетов. Используется Vodafone. Оставляет неприятные воспоминания.


    3.4 CIMD


    Тоже протокол... Напоминает EMI... :)


    4 Общий знаменатель.


    Несмотря на такое изобилие, суть работы всех протоколов сводится, что очевидно, к нескольким простым функциям (смотрим со стороны ESME):
    • Организация соединения с SMSC
    • Отправка сообщений в PLMN
    • Прием сообщений из PLMN
    • Прием подтверждений доставки (delivery receipts)


    4.1 Установка связи


    Фактически, порядок работы следующий: соединяемся с SMSC и, поверх сетевого протокола, начинаем слать пакеты (называемые часто «командами» или «операциями») в формате выбранного нами SMS-протокола. Для простоты, будем опираться на самый распространенный случай, связь по TCP/IP, хотя многие модели SMSC поддерживают связь через, например, X.25 или PSTNA, а SMS-протоколы абстрагированы, насколько возможно, от деталей установки соединения.


    4.2 Транзакционный механизм


    Для того, чтобы предоставить гарантию доставки, все SMS-протоколы используют транзакционный механизм, а проще говоря, подтверждения для каждой, испущенной (invoke) любой из сторон, команды. Получив команду, участник обмена (SMSC или ESME) обязан ответить на нее специальным пакетом, называемым в разных протоколах по-разному: response, result или ACK (от acknowledgement). Мы будем называть такие пакеты ACK (опять же, чтобы не путаться в терминах). Различают два типа ACK'ов: собственно ACK — положительный ответ и NACK — отрицательный (negative) ответ. NACK кроме указания на тот факт, что приключилась ошибка, передает еще и ее код, прописанный в спецификации протокола. Вот как это выглядит в графике:
    [​IMG]
    И в обратную сторону:
    [​IMG]

    Каждая транзакция нумеруется иницирующей стороной, принимающая сторона использует переданный ей номер в ACK'е. Правила нумерации обычно свободные, указывается только диапазон допустимых номеров, для каждого протокола он, естественно, разный. Однако открытие двух транзакций с одним номером в рамках одной сессии, как правило, недопустимо. В случае неприхода ACK'а за определенное время (настраиваемое как на SMSC, так и на ESME) команда считается неуспешной и, в зависимости от логики работы, повторяется. Если противоположная сторона продолжает «молчать» в ответ на испущенные команды, соединение обычно разрывается.
    Итоги

    Теперь мы знаем о предмете достаточно, чтобы сформулировать задачи требующие решения для написания ESME клиента. Необходимо:
    1. Иметь возможность установки соединения по TCP/IP с сервис-центром.
    2. Уметь формировать пакеты в формате выбранного нами протокола. (В скобках заметим, что, как правило, выбор протокола определяется не пристрастиями программиста, а жестко закреплен предоставляемым сервисом.)
    3. Уметь «разбирать» (parse) пакеты в формате выбранного протокола.
    Мы здесь не упомянули одну важную «административную» задачу — подписание договора на обслуживание с поставщиком услуг сотовой связи. Однако, решение таких вопросов обычно лежит вне рамок программистской компетенции.

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

    (c) smsinside.blogspot.com​
     
    _________________________
    #1 halkfild, 5 Nov 2007
    Last edited: 5 Nov 2007
    5 people like this.
  2. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313

    Кодировка.


    Часто (точнее -- всегда) недостаточно передавать только латинский текст, да и передача собственно "иностранных" сообщений, содержащих специальные символы требует некоторых дополнительных усилий. Таким образом вполне закономерно теперь поговорить о кодировке текста в сообщениях.

    Видимо не секрет для читателей, уже разбиравшихся с протоколами SMS, что в мобильной сети сообщения большей частью передаются в так называемой кодировке GSM. Это семибитная кодировка -- каждый передаваемый символ предатавляется 7-ю старшими битами октета, младший бит относится уже к следующему символу. В следующем октете "отсекаются" уже два бита, и так далее, до тех пор, пока на 8-м октете символы опять не выровняются на границе. Не Бог весть какое сжатие, но позволяет сэкономить каждый восьмой октет, или, другими словами, впихнуть в 140 октетов пресловутые 160 символов. Приведем таблицу кодировки GSM (в сравнении с IA5):


    [​IMG]

    Кодировка GSM.

    Выбор кодировки осуществляется полем data_coding в submit_sm, о котором писано уже парой статей выше. Таким образом, при выборе кодировки 0x0, (SMSC default alphabet) можно надеятся, что центр воспримет текст сообщения именно в стандартной кодировке GSM.

    Вообще говоря кодировке сообщений посвящен документ GSM 03.38, в котором возможные значания параметра data_coding (DCS -- data coding scheme) рассмотрены весьма подробно. Посмотрим и мы на них, так как этим параметром регулируется еще одна вещь: так называемый класс сообщения.


    Класс сообщения.


    Класс сообщения является своего рода "указанием" для принимающей стороны (SME, или мобильного терминала), как с этим сообщением поступить (в основном это, разумеется, относится к Mobile Terminated -- MT -- "предназначенным для мобильного устройства" сообщениям). Приняв сообщение, устройство может поступить с ним следующим образом:
    • Немедленно отобразить. (Class 0)
    • Записать в память устройства. (Class 1)
    • Записать в память SIM-карты. (Class 2)
    • Передать на терминальное устройство. (Class 3)
    Сообщения класса 3 описаны в GSM TS 07.05 и здесь мы не будем на них останавливаться. С остальными классами, надеюсь, все ясно без комментариев. Можно только добавить, что сообщения 0-го класса называются также "Flash messages" и могут быть потеряны сразу же после прочтения.
     
    _________________________
    1 person likes this.
  3. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    71
    Reputations:
    13
    позновательно, +
     
  4. GALIAFF

    GALIAFF Elder - Старейшина

    Joined:
    28 Sep 2007
    Messages:
    45
    Likes Received:
    28
    Reputations:
    5
    О! отличный материал очень позновательно!

    Поставте за меня плюс так как я немогу.....
     
    #4 GALIAFF, 5 Nov 2007
    Last edited: 5 Nov 2007
  5. S|\/|eliyK()T

    S|\/|eliyK()T Elder - Старейшина

    Joined:
    17 Sep 2006
    Messages:
    138
    Likes Received:
    58
    Reputations:
    11
    молодец! есть много познавательного! Ждём наработок )