2.10.2014

Server Software Engineer

LotusFlare, a stealth company founded in Silicon Valley by alumni of Stanford, Harvard and Univ. of Waterloo from top companies like Facebook and Microsoft, is developing a platform to drive user acquisition, engagement and monetization for app developers through Mobile Operator ecosystem.

We are seeking a Server Software engineer that has strong experience in building and maintaining a secure and scalable platform. If you are interested in joining a team of passionate, talented industry veterans in the mobile space, we look forward to hearing from you soon!

Read More..

iOS and Android Engineers

LotusFlare, a stealth company founded in Silicon Valley by alumni of Stanford, Harvard and Univ. of Waterloo from top companies like Facebook and Microsoft, is developing a platform to drive user acquisition, engagement and monetization for app developers through Mobile Operator ecosystem.

We are seeking full-time iOS and Android Engineers to join our engineering organization to help develop our products. As an iOS and Android Software Engineer, you will specialize in building elegant products on world-class technologies. We are looking for self-starting engineers with strong experience developing sophisticated applications on the iPhone and Android mobile devices using the iOS and Android SDKs. If you are interested in joining a team of passionate, talented industry veterans in the mobile space, we look forward to hearing from you soon!

Read More..

12.24.2013

WPS NACK tweak for reaver

Для специалистов по сетевой безопасности и прочих интересующихся темой нет нужды представлять reaver - утилиту для подбора WPS PIN-кода.

Однако очень часто даже при наличии хорошего уровня сигнала и включенной функции WPS на роутере, взлом не идёт или идёт очень медленно.

Недавно в очередной раз столкнулся с этой проблемой и решил потратить немного времени на её решение.

Проблема: после проверки очередного PIN, reaver отправляет WPS Nack и точка доступа отправляет "deauthentication packet". Последующая аутентификация и ассоциация занимают значительное время, а после N-ой попытки точка вообще отказывается с нами работать:
12:57:04  Sending Authentication Request (Open System) [ACK]
12:57:04  Authentication successful
12:57:04  Sending Association Request [ACK]
12:57:04  Denied (code 12), wrong ESSID or WPA ?

Read More..

3.21.2012

Augmented reality

Дополненная реальность от Qualcomm. Даже не знаю, что тут можно прокомментировать...



Read More..

12.21.2011

Practical SS7, Part 3

В связи с повышенным вниманием к моим довольно старым статьям о практическом применении SS7 (Practical SS7 Part 1 и Practical SS7 Part 2), пришлось обновить материал и написать новую статью.
Вкратце, о чём эта статья. Она о том, как запустить стек SS7 на персональном компьютере с минимумом затрат по времени и нулевыми затратами по деньгам. При этом Вы получите полноценный промышленный стек SS7 от известного вендора - Dialogic (входит в состав компании Intel) с поддержкой Sigtran (M2PA, M3UA, SUA), SCCP, TCAP, MAP, IS41 и INAP (затрудняюсь сказать какой именно).

Кому это может быть интересно:

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


Немного о стеке SS7.
Раньше производитель назывался DataKinetics, потом его купила компания Dialogic, а сейчас это часть Intel (название так и оставили, потому что довольно раскрученное). Dialogic известен в мире голоса своими дорогими, но надёжными голосовыми (TDM) платами и не менее дорогим SDK. На них строят разные IVR-системы. Причём по своему опыту скажу, что треть предлагаемых решений IVR в мировом телеком рынке - это решения на базе Dialogic.

Что для этого понадобится:
Вариант 1. Два отдельных компьютера под управлением MS Windows (начиная с XP), Linux или Solaris.
Вариант 2. Один компьютер с установленным ПО для виртуализации. Я рекомендую Oracle VirtualBox. Гостевая ОС может быть любой из перечисленных в варианте 1. Проще всего Windows XP. Маленький ньюанс - очень желательна поддержка аппаратной виртуализации процессором (Intel, начиная с какого-то из Pentium IV. AMD - не знаю). Иначе скорость работы будет утомлять.
Вариант 3. Один компьютер и 1 виртуальный сервер от Amazon. Amazon предлагает попробовать свои услуги бесплатно в течении года, инструкция по настройке есть на Хабре. Важный момент - Sigtran будет работать только поверх VPN, потому что брендмауэр Амазона не понимает протокол SCTP.

Все дальнейшие инструкции будут относиться в равной степени к Вариантам 1 и 2. В случае Варианта 3 есть незначительные изменения, связанные с использованием адресации VPN-тоннеля.
В дальнейшем я предполагаю, что Вы используете Windows XP в качестве ОС. Отличия от Linux и Solaris незначительные и касаются только процесса установки.

Часть 1. Установка SS7 стека.

Все ссылки для скачивания находятся на этой странице:
http://www.dialogic.com/Products/signaling-and-ss7-components/download/dsi-interface-protocol-stacks.aspx

Надо скачать:
1. DPK for Windows
2. Software Environment Programmer's Manual (пригодится позже. Также содержит инструкцию по установке стека в Linux и Solaris)
3. MAP Test Utility User Guide (это описания тестовых утилит, которые будут генерировать трафик. Интерес представляет как минимум раздел 5 Running the MTU and MTR application)

При установке DSI не надо отмечать драйвера (SS7HD, SPCI, etc) - мы будем работать только с Sigtran, который не требует специального оборудования.
После установки в папке C:\DSI\UPD\RUN будет 2 важные папки - MTU (генерирует сообщения протокола MAP) и MTR (отвечает на сообщения).
MAP это Mobile Application Part, протокол, который отвечает в сети GSM за многое, в т.ч. - регистрацию абонентов и передачу смс. Эти тестовые приложения генерируют несколкьо видов сообщений, но самое показательное - MAP-FORWARD-SHORT-MESSAGE. Простым языком - передача смс.
На этом этап установки закончен.

Часть 2. Описание SS7 стека
Стек работает следующим образом:
1. Во-первых используется модульная система. SS7 это набор протоколов. Так вот, каждый из них реализован в этом стеке отдельным модулем (читай приложением).
Поясню на примере. Если используется SS7 over TDM (через Е1 потоки), то сигнальная плата обрабатывает MTP1 (физика) и MTP2 (канальный уровень). На сервере запускается mtp3.exe (модуль MTP3 - частично сетевой уровень модели OSI), а дальше, в зависимости от назначения системы:
isup.exe (если платформа обрабатывает голосовой трафик);
sccp.exe+tcap.exe+map/inap.exe (для MAP/INAP трафика).


Есть возможность не использовать модули верхних уровней, а вместо этого написать собственное приложение для их обработки. Многие производители ПО для мобильных операторов так и поступают.
2. У каждого модуля есть идентификатор (module_id), который используется для маршрутизации сообщений внутри стека. Это номера от 0 до 254, обычно пишутся в 16-ричном формате.
Часть модулей имеют зарезервированные номера. Об этом можно почитать в Software Environment Manual. Документ сложный для понимания, потому что написан скорее для разработчиков и содержит много программистской специфики.
3. Запуск стека осуществляет утилита gctload. Она читает главный конфигурационный файл system.txt, создаёт в памяти очереди сообщений для всех модулей, запускает все эти модули (прописаны в system.txt) и что-то там ещё (всех деталей я, к сожалению, не знаю).
В файле system.txt прописаны все модули, которые инициализируются при запуске, все приложения (путь к приложению, параметры запуска).
4. Лицензирование. Самый интересный момент :)
Поскольку стек модульный, то лицензии идут к каждому модулю. Плюс, если используется сигнальная карта, то на ней есть место для установки специальной licence button для протокола MTP2 (выглядит как батарейка для материнской платы, но толще). Новые сигнальные карты уже используют программную лицензию.
Самое приятное в лицензировании от Dialogic это возможность использования пробного режима (trial mode). Для его использования нужно при запуске модуля (m3ua.exe, m2pa.exe, sccp.exe) указать ключ -t.
Ещё пару лет тому назад, trial mode разрешал работать 8 часов (чем как-то пришлось пользоваться даже в production системе). Сейчас только 1 час. Модули честно об этом признаются при запуске и по прошествии одного часа просто перестают обрабатывать трафик. Для продолжения работы стек должен быть перезапущен.

Часть 3. Запуск SS7 стека.

1. Если Вы используете Virtual Box, то в настройках надо выбрать Bridged network (Сетевой мост) и скорее всего настроить IP адреса вручную. У меня заработало ещё и через "Виртуальный адаптер хоста". Не уверен, что это единственные опции, но через NAT, который используется по-умолчанию, Sigtran скорее всего работать не будет. Ещё очень важный момент - надо выключить грёбаный защитник Виндовс. Я полчаса не мог понять почему пакеты только в одну сторону ходят :)

2. Перед запуском надо написать правильный system.txt. Благо Dialogic тут помог и в папке C:\DSI\UPD\RUN\MTU\M3UA_CONFIG\ уже есть готовый пример для "отправителя" сообщений (эмуляция SMSC).
Аналогично, в папке C:\DSI\UPD\RUN\MTR\M3UA_CONFIG\ есть пример для "получателя" сообщений.
Одна проблема - пример для Линукс, так что перемещаем system.txt в наш "корень" (C:\DSI\) и исправляем пути во всех FORK_PROCESS (системный вызов ОС, отвечает за создание процесса с новым process id). Дополнительно мне пришлось снять атрибут "Только чтение" с файла. У меня в итоге получилось что-то такое (привожу только окончание файла):
FORK_PROCESS tim.exe
FORK_PROCESS tick.exe
FORK_PROCESS s7_mgt -d
FORK_PROCESS s7_log -fss7.log -tt
*
* SCTP and SCTPD for non-native SCTP
FORK_PROCESS sctp.exe
FORK_PROCESS sctpd.exe
*
* SCTPn for native SCTP
*FORK_PROCESS ../../../../sctpn
*
FORK_PROCESS HSTBIN\m3ua -t
FORK_PROCESS HSTBIN\sccp -t
FORK_PROCESS HSTBIN\tcap -t
FORK_PROCESS HSTBIN\map -t

Важное замечание для тех, кто устанавливает стек на Linux/Solaris. Поскольку это нормальные сетевые ОС (в отличии от Windows), то в них уже есть поддержка SCTP на уровне ядра.
Dialogic настоятельно рекомендует использовать именно реализацию SCTP операционной системы. Для этого вместо sctp и sctpd, надо запустить только sctpn.

3. Проверяем, что конфигурация правильная.
Для этого можно попробовать запустить стек. В первый раз это лучше сделать через консоль (Пуск-выполнить-cmd). Дальше перейти в папку c:\DSI, а в ней выполнить gctload.exe
В моём случае Виндовс ругнулся на отсутствующую библиотеку, поэтому в консоли вызвал
PATH=
Получил текущее значение путей поиска, а дальше
PATH=скопировать текущие пути;C:\DSI\LIB32 (или LIB64, если у Вас 64-битная ОС)

4. gctload при запуске выдаст некоторые сообщения:
(3588)gctload: Verification started.
(3588)gctload: Verification complete.
(3588)gctload: Initialisation complete.

S7_log : mod ID=0xef, options=0xaf0d, max_param_len=320
S7_log : Writing log file ss7.log --- это лог файл. Туда будут писаться разные полезные сообщения. Читать их, правда, иногда трудно

Failed to open s7_mgt configuration file : config.txt --- config.txt мы ещё не написали, так что не обращаем внимания

Cannot open configuration file config.txt
SS7 TCAP started in trial mode.
This binary will terminate after 1 hour. --- а вот и лицензия на 1 час

SS7 MAP started in trial mode.
This binary will terminate after 1 hour.
SS7 SCCP started in trial mode.
This binary will terminate after 1 hour.
SS7 M3UA started in trial mode.
This binary will terminate after 1 hour.

5. Важная информация.
Остановить gctload можно и по Ctrl-C. Но я крайне не рекомендую этого делать. Раньше даже во всей документации этого не рекомендовали. Для правильного останова надо в другой консоли сделать: gctload.exe -x
Иначе есть шанс, что стек оставит в памяти свои служебные очереди сообщений и в следующий раз просто не запустится или будет работать неправильно. Может это уже давно исправили, но лучше не рисковать.

6. В system.txt указан запуск s7_mgt. Это приложения для конфигурации SS7 параметров стека. По-умолчанию использует файл config.txt, пример которого есть в C:\DSI\UPD\RUN\MTU\M3UA_CONFIG\


Этот файл требует более детального исправления.
* Local IP Address Configuration
CNSYS:IPADDR=192.168.0.1; - адрес интерфейса, который будет использоваться для отправки/получения сообщений.
Перед тем, как указывать адрес, убедитесь, что обе ОС находятся в одной сети. Лучше всего сперва проверить с помощью ping что системы "видят" друг-друга, а потом уже настраивать стек. И НЕ ЗАБУДЬТЕ ОТКЛЮЧИТЬ ЗАЩИТНИК ВИНДОВС.

* SCTP Association configuration to Remote IPSP
SNSLI:SNLINK=1,IPADDR=192.168.0.2,SNTYPE=M3UA,SNEND=C; - тут указывается адрес второй ОС. Я надеюсь, понятно, что на втором компьютере адреса меняются местами?

SNEND определяет, кто будет сервером (SNEND=S), а кто клиентом (SNEND=С). Поэтому на одной машине ставим C, на другой S.
Ещё в этой команде можно указать порты (HPORT и PPORT), но по-умолчанию используется 2905.

* Remote Application Server Configuration
SNRAI:RAS=1,DPC=2; - Указываем Destination Point Code удалённой системы. Это адресация уровня MTP3 (M3UA, который мы настраиваем, это реализация MTP3 поверх SCTP).

* Add Remote AS to Association
SNALI:SNAL=1,RAS=1,SNLINK=1; - этот момент надо в документации читать. Но похоже на привязку удалённого Application Server к конкретной ассоциации (ассоциация это аналог signaling link в MTP2).

* SCCP_CONFIG
SCCP_CONFIG 1 0x8 0x0102 0x01

Тут указываем локальный Point Code (одна система будет с 1, вторая с 2), SSF (указатель на протокол, который после MTP3. В данном случае это будет SCCP (0x08).
Опции (0x0102) описаны в документации и их вычисление задача нетривиальная. Надо перевести число в двоичную форму, выбрать нужные биты (сделать их равными 1), потом всё перевести в 16-ричную.
Send UIS - User In Service (0x01). Здесь мои знания расходятся с тем, что написано в документации, поэтому если Вам интересно - читайте Software Environment Manual.

Остальные параметры не трогаем. Сохраняем файл config.txt.

7. Теперь пробуем по-очереди запустить стек на обоих системах.
Если всё было правильно, то в консоли получим что-то такое:
S7_MGT Boot complete --- важная строка. Говорит, что стек запустился
S7L:00:08:48.131 I0000 M3UA Association Status : id=0 UP
S7L:00:08:48.131 I0000 M3UA Indication : ASP UP, Association=0
S7L:00:08:48.131 I0000 M3UA Notify : AS Inactive, Association=0 ASP=0
S7L:00:08:48.131 I0000 M3UA Indication : ASP ACTIVE, Association=0 AS=0
S7L:00:08:48.131 I0000 M3UA Indication : AS ACTIVE, AS=0
S7L:00:08:48.131 I0000 M3UA Notify : AS Active, Association=0 ASP=0 --- Ассоциация доступна

После того, как стек запущен, можно попробовать отправлять смс.
MTR.exe уже должно быть запущено на стороне получателя (приложение в system.txt для MTR прописано).
MTU надо запускать вручную в консоли.
Пример запуска пишется, если ввести параметры неправильно (или совсем без параметров).
Хотя указанные при этом параметры - неправильные. Как вариант, можно попробовать так:
mtu -d0 -p2 -a43020008 -g43010008 -i222331234567890  -s"Test message"

Я очень рекомендую запустить Wireshark в одной из ОС и следить за всеми сообщениями, которые будут передаваться между системами. Можете использовать фильтр "sctp" для начальной настройки, а потом "sccp".

Если есть вопросы - задавайте в коментариях. Постараюсь ответить.

Read More..

9.29.2011

Telecom operating systems (cont)

Спасибо всем, кто откликнулся на мою просьбу и ответил на вопросы анкеты Telecom Operating Systems. Мои самые страшные подозрения подтвердились - продукция от Microsoft таки используется повсеместно :)

Об использовании Windows сообщили 8 из 22 ответивших. 10 человек отметили различные Linux-дистрибутивы.
Естественно, что выборка не репрезентативная, но для понимания трендов этого вполне достаточно.
Ещё раз спасибо ответившим.

Read More..

ITU/ANSI Conversion

От одного из читателей блога поступил интересный вопрос - как происходит конвертация планов нумерации, если необходимо передать сообщение из европейской (ITU) в американскую (ANSI) сеть SS7?


Если Вы не очень хорошо помните о планах нумерации в сетях GSM, то можете почитать мою старую статью здесь. Вопрос читателя относился конкретно к процедуре регистрации абонента одной из американских сетей в европейской. "Европейская" процедура регистрации включает в себя конвертацию IMSI абонента (E.212) в гибридный номерной план - E.214, который легко маршрутизируется по префиксу (аналогично E.164) в сетях транзитных операторов. Конвертация осуществляется на VLR (или MSC?) и состоит в замене MCC на CC и MNC на NDC.
Всё хорошо, пока мы в Европе, где операторам выделены отдельные (не географические) телефонные коды. В Северной Америке ситуация более запутанная - изначально у каждого оператора была масса географических кодов (area codes), которые они используют для нумерации абонентов из разных регионов. Если я не ошибаюсь, то сейчас операторы дополнительно используют не географические коды. В любом случае, простой конвертации MNC в area code осуществить нельзя - кодов слишком много. Вместо этого американский оператор "просит" транслировать MNC в какой-то один свой код.
Если бы не отличия в ANSI/ITU протоколах SS7, достаточно было бы отправить E.214 сообщение в сеть и ожидать ответа. Но в данном случае необходима конвертация между форматами с помощью какого-либо промежуточного узла. Таких узлов много, но каждый конкретный оператор работает только с определёнными узлами. Например, один из крупнейших американских операторов AT&T пользуется услугами 2х узлов - Syniverse и TELEGLOBE (сейчас Tata Communications). В европейской части сети SS7 эти узлы подключены ко многим большим операторским и транзитным сетям, таким как France Telecom, Deutche Telecom, Belgacom, British Telecom и др. В американской части сети они подключены напрямую к GSM операторам.
Следовательно, вся процедура регистрации американского абонента в европейской сети выглядит так:
  1. IMSI абонента транслируется в MGT, используя предварительную информацию от американского оператора;
  2. сообщение в формате E.214 (ITU) с CountryCode=1 маршрутизируется на ITU/ANSI conversion point;
  3. модифицированное в ANSI-формат сообщение отправляется американскому оператору.
  4. американский оператор отвечает через предпочтительный ITU/ANSI conversion point (не обязательно тот, с которого пришёл запрос).

Read More..