OTAMan Документация
1. Обзор
OTAMan — Progressive Web App (PWA) для построения APDU-команд, сборки защищённых пакетов SCP80, просмотра меню SIM Toolkit (STK) и симуляции реальной сетевой среды для тестирования SIM/USIM/UICC-карт через PC/SC-ридер.
Приложение — один статический файл index.html. Все вычисления выполняются в браузере; доступ к карте — через локальный HTTP-сервер (pysim-otaman-server), оборачивающий библиотеку pySim.
Браузер (OTAMan PWA) → HTTP :8080 → pysim-otaman-server → pySim → PC/SC → ридер → UICC/SIM
Стандарты, на которые опирается приложение:
- ETSI TS 102 221 — интерфейс UICC-терминал (CLA 00, файлы USIM)
- ETSI TS 102 222 — административные команды
- ETSI TS 102 223 — Card Application Toolkit (CAT, проактивные команды)
- ETSI TS 102 225 — структура защищённых пакетов для (U)SIM toolkit
- ETSI TS 102 226 — структура удалённых APDU для UICC-приложений
- ETSI TS 151 011 — интерфейс SIM-ME (CLA A0)
- 3GPP TS 131 111 — USIM Application Toolkit (USAT)
- 3GPP TS 31.102 — характеристики приложения USIM
- 3GPP TS 23.038 — алфавит GSM 7-bit и DCS
- 3GPP TS 24.008 / 24.301 / 24.501 — коды причин NAS
- GlobalPlatform Card Specification v2.3.1
- ISO/IEC 7816-4 — команды обмена
- ISO/IEC 9797-1 — алгоритмы MAC
2. Вкладка C-APDU
Построение командных APDU (C-APDU). Шесть подвкладок охватывают разные поколения карт и наборы команд: SIM RFM, USIM RFM, Expanded Script, RAM/GP, HTTP OTA и C-APDU Parser.
2.1 SIM RFM
CLA = A0 (GSM 11.11 / TS 151 011, ISO 7816-4). Удалённое управление файлами классических SIM-карт.
Команды собираются в виде цепочки: нажмите кнопку + Command, чтобы добавить строку, заполните её поля — предпросмотр цепочки (над кнопкой упаковки) обновится автоматически. Добавьте строку GET RESPONSE, чтобы получить данные после SELECT. Кнопка Pack into Secured packet упаковывает всю цепочку в пакет SCP80.
| Команда | INS | Описание |
|---|---|---|
| SELECT | A4 | Выбор EF/DF по FID, пути, AID или цепочке |
| UPDATE RECORD | DC | Обновление записи |
| UPDATE BINARY | D6 | Обновление бинарных данных |
| READ RECORD | B2 | Чтение записи |
| READ BINARY | B0 | Чтение бинарных данных |
| ERASE BINARY | 0E | Стирание бинарных данных |
| ACTIVATE FILE | 44 | Активация файла |
| DEACTIVATE FILE | 04 | Деактивация файла |
| VERIFY PIN | 20 | Проверка PIN1 или PIN2 |
| CHANGE PIN | 24 | Смена PIN1 или PIN2 |
| DISABLE PIN | 26 | Отключение PIN |
| ENABLE PIN | 28 | Включение PIN |
| UNBLOCK PIN | 2C | Разблокировка PIN с помощью PUK |
| GET RESPONSE | C0 | Получение данных, на которые указывает предшествующий 61XX/9FXX |
Методы SELECT
| Метод | P1 | P2 | Ввод |
|---|---|---|---|
| По FID | 00 | 00 | FID (4 hex) |
| По полному пути от MF | 08 | 00 | Полный путь от MF |
| По DF name / AID | 04 | 00 | AID |
| Цепочка | 00 | 00 | FID через запятую; токен C0 (или C0:NN) вставляет GET RESPONSE |
Для record-команд режим P2: Absolute (04), Next (02) или Previous (03). Если за Case 4 командой сразу следует строка GET RESPONSE, сборщик цепочки автоматически убирает её байт Le (ETSI TS 102 226 §5.1.1). В правой колонке — панель конвертации (IMSI, MSISDN, ICCID, SPN, PLMN, nibble swap). См. §2.5.
2.2 USIM RFM
CLA = 00 (ETSI TS 102 221). Тот же сборщик цепочки и набор команд, что и SIM. Отличия:
- SELECT по умолчанию запрашивает FCP (P2=
04) и добавляет Le=00; флажок Silent (P2=0C) выбирает файл без запроса FCP (без Le, без данных ответа). - По пути предлагает выбор from MF (P1=
08) или from current DF (P1=09). - Каждый переход SELECT в цепочке запрашивает FCP, если не отмечен как silent.
2.3 Expanded Script
Построение формата Expanded Remote Application data по ETSI TS 102 226 §5.2.1.
Формат
- Definite (AA):
AA+ длина + Command TLV - Indefinite (AE):
AE+80+ Command TLV +00 00
Command TLV
| Тип | Тег | Описание |
|---|---|---|
| C-APDU | 22 | APDU |
| Immediate Action | 81 | Проактивная команда или action indicator |
| Error Action | 82 | Условное восстановление при ошибках с action indicator или проактивной командой |
| Script Chaining | 83 | Многопакетное выполнение скрипта с флагами First/Intermediary/Last |
| Response Type | - | Индикатор типа ответа: expanded/compact/none |
Сборщик Immediate Action предлагает action indicator (81/82), структурированный сборщик проактивных команд (REFRESH, DISPLAY TEXT, PLAY TONE с авто-генерацией COMPREHENSION-TLV), или ручной hex-ввод.
Error Action TLV (Tag 82)
Восстановление при ошибках по TS 102 226 §5.2.1.3 — одна из трёх форм:
- Проактивная команда: набор COMPREHENSION-TLV с DISPLAY TEXT или PLAY TONE (в Error Action допустимы только эти две, TS 102 226 Table 5.9)
- Без действия:
82 00 - Ссылка на запись EFRMA:
82 01 <ref>с номером записи01–7F - Произвольный hex: произвольное значение TLV
Script Chaining TLV (Tag 83)
Многопакетное выполнение скрипта с сохранением контекста:
- Флаги цепочки:
01первый скрипт (удалять инфо о цепочке при сбросе),11первый скрипт (сохранять инфо о цепочке при сбросе, только RFM),02последующий скрипт (будут ещё),03последующий скрипт (последний) - Идентификатор скрипта: Корреляционный идентификатор между пакетами (1-4 байта hex, авто-инкремент подсказки)
- Дополнительные данные: Расширенная информация цепочки (опционально hex)
- Сохранение контекста: UICC сохраняет состояние безопасности/транзакции между пакетами
Expanded Remote Response (TS 102 226 §5.2.2)
Результаты по каждой команде с деталями ошибок и контекстом цепочки:
- Номер команды, статус слова, данные ответа для каждой команды
- Код ошибки и информация о ней для неудачных команд (подсвечено красным)
- Идентификатор скрипта и позиция для корреляции цепочки (ID, FIRST, LAST)
- Индикатор типа ответа: 'expanded' vs 'compact' vs 'none'
2.4 RAM/GP
CLA = 80 (GlobalPlatform Card Specification v2.3.1). Команды удалённого управления приложениями. Строятся тем же сборщиком цепочки, что и SIM/USIM.
| Команда | INS | P1 | Описание |
|---|---|---|---|
| INSTALL [for load] | E6 | 02 | Регистрация загружаемого файла |
| INSTALL [for install] | E6 | 0C | Установка приложения или SD |
| INSTALL [make selectable] | E6 | 08 | Сделать приложение выбираемым |
| INSTALL [registry update] | E6 | 40 | Обновление реестра |
| INSTALL [extradition] | E6 | 10 | Перемещение между SD |
| LOAD | E8 | 80 | Загрузка блока кода (P1=80 последний блок, номер блока в P2) |
| DELETE | E4 | 00 | Удаление приложения или SD (P2=00 только AID / 80 AID + связанные объекты) |
| GET STATUS | F2 | 80/40/20/10 | Статус карты |
| GET DATA | CA | tag | Чтение объектов данных |
| STORE DATA | E2 | 00/40/80/C0/E0 | Запись данных |
| SET STATUS | F0 | 80/40/60 | Управление жизненным циклом |
| EXTERNAL AUTHENTICATE | 82 | 00 | Аутентификация SCP |
| INTERNAL AUTHENTICATE | 88 | 00 | Challenge-response |
| GET RESPONSE | C0 | 00 | Получение данных после 61XX (Le настраивается) |
Привилегии (INSTALL [for install])
Три байта привилегий (таблицы 11-7/8/9 спецификации GP), кодируются как length-value поле внутри данных INSTALL:
| Бит | Байт 1 | Байт 2 | Байт 3 |
|---|---|---|---|
| b8 | Security Domain | Trusted Path | Receipt Generation |
| b7 | DAP Verification | Authorized Management | |
| b6 | Delegated Management | Token Verification | |
| b5 | Card Lock | Global Delete | |
| b4 | Card Terminate | Global Lock | |
| b3 | Card Reset | Global Registry | |
| b2 | CVM Management | Final Application | |
| b1 | Mandated DAP Verification |
MSL (Minimum Security Level) — байт SPI1 по TS 102 225
| Значение | Описание |
|---|---|
| 00 | Нет проверки |
| 11 | RC/CC/DS |
| 12 | RC/DS/CC |
| 15 | RC/DS/CC + MAC |
| 16 | RC/DS/CC + MAC + Cipher |
| 19 | RC/DS/CC + MAC + Cipher + DS |
Полные таблицы GET STATUS P1/P2, тегов GET DATA, DELETE P1, STORE DATA P1 и SET STATUS см. в GlobalPlatform v2.3.1 и ETSI TS 102 226 §8.2.1.3.2.
2.5 Конвертация (боковые панели SIM/USIM)
- IMSI → EF.IMSI — 15-значный IMSI в 9-байтный формат (TS 31.102 §4.2.3).
- MSISDN → BCD — удалить
+, дополнить нечётную длину символомf, поменять полубайты. - ICCID → hex — поменять полубайты строки ICCID.
- Provider Name → SPN — GSM 7-bit packed, UCS2 non-BMP или UCS2 BMP (TS 31.102 §4.2.5, TS 23.038).
- PLMN → EF_PLMNsel / PLMNwAcT — 3-байтный BCD + опциональный селектор технологии доступа.
- Nibble swap — поменять пары полубайтов hex-строки чётной длины.
2.6 C-APDU Parser
Вставка raw APDU hex и отображение сворачиваемого дерева. Автоматически определяет контейнер: Expanded Script (начало AA или AE80, декодируется по ETSI TS 102 226 §5.2.1) или Compact C-APDU chain (последовательность C-APDU ISO 7816). Каждый узел показывает метку, hex и краткое описание; родительские узлы раскрываются в подэлементы.
2.7 HTTP OTA
Сборка payload’ов Remote Application Management over HTTP по GlobalPlatform GPC v2.2 Amendment B v1.1 (§4.7). Два режима:
- Trigger (Push SMS) — параметры запуска административной сессии (
81 > 83 > 84/[85]/[86]/89, таблица 4-3). Сообщение, которое просит Security Domain карты исходящим запросом начать HTTP-сессию. - Store (SD admin params) — записывает те же параметры как данные карты (параметры Security Domain) командой STORE DATA в TLV-режиме (
80 E2 90 00, P1=90 = последний блок + BER-TLV по GP v2.2 Amendment B v1.1.3), обёрнутые в тег85(илиA5) по таблице 4-4.
Разделы соответствуют таблицам спецификации:
| Раздел | Tag | Содержимое |
|---|---|---|
| Параметры соединения | 84 | Любые COMPREHENSION-TLV для открытия TCP-соединения (OPEN CHANNEL по TS 102 223): Device Identities 02, Alpha 80, Bearer 01, вендорские TLV. Редактор строк + пресеты, редактируемый hex. |
| Параметры безопасности | 85 | Таблица 4-6: LV PSK Identity (текст), LV Key version/KID. Идентифицирует ключ PSK TLS (RFC 4279). |
| Политика повтора | 86 | Таблица 4-7: счётчик повторов (2 байта, напр. B000), задержка повторной попытки как timer TLV из TS 102 223 (25 03 HH MM SS), опциональный вендорский TLV отчёта о сбое. |
| HTTP POST | 89 | Таблицы 4-8/9/10: Host-заголовок (8A), X-Admin-From agent ID (8B), URI (8C) — текст преобразуется в октеты. |
Command Scripting template (флажок) оборачивает всю команду 81 в формат Expanded Remote Application data с определённой длиной (AA, ETSI TS 102 226 §5.2.1) для TAR-ов, обрабатывающих расширенный формат (RAM-over-HTTP §4.7).
Pack into Secured packet отправляет готовый payload на вкладку SCP80 для заполнения SPI/счётчика — там укажите TAR, который слушает SD (обычно TAR OTASD).
3. Вкладка SCP80
Верхнеуровневая вкладка SCP80 объединяет разделы, связанные с SCP80. Переключение — тремя переключателями: Secured Packet, Cards и RAM. Собирает защищённые пакеты SCP80 по ETSI TS 102 225.
3.1 Secured Packet
Собирает защищённые пакеты SCP80 по ETSI TS 102 225.
Структура пакета
| Поле | Размер | Описание |
|---|---|---|
| CPI | 1 | Command Packet Identifier (02) |
| CPL | 1 | Command Packet Length |
| CHI | 1 | Command Header Identifier (01) |
| CHL | 1 | Command Header Length |
| SPI | 2 | Security Parameter Indicator |
| KIc | 1 | Key Identifier для шифрования |
| KID | 1 | Key Identifier для MAC |
| TAR | 3 | Toolkit Application Reference |
| CNTR | 5 | Счётчик повторов |
| PCNTR | 1 | Padding counter |
| RC/CC/DS | 8 | Контрольная сумма / MAC |
| Secured Data | пер. | APDU (с шифрованием при необходимости) |
Крипто
- 3DES-CBC шифрование (нулевой ICV), ключи 8/16/24 байта — устарело с Rel-18, но поддерживается для обратной совместимости
- AES-CBC шифрование (нулевой ICV, дополнение нулями до 16), ключи 16/24/32 байта (TS 102 225 §5.1.2, KIc
x2) - Retail MAC (ISO 9797-1, MAC algorithm 3) для контрольной суммы DES/3DES
- AES-CMAC (NIST SP 800-38B, усечённый до 8 октетов) для контрольной суммы AES (TS 102 225 §5.1.3.1, KID
x2) - AES требует счётчик с защитой от повтора: биты SPI1 b5 b4 должны быть
10(счётчик больше) или11(счётчик +1) согласно TS 102 225 §5.1.2/§5.1.3.1 - Байт паддинга настраивается (
00по умолчанию илиFF)
Кнопка «Verify vs pySim» сверяет собранный пакет с эталонной реализацией OtaDialectSms.encode_cmd. Кнопка «Send to Card» доставляет пакет через ENVELOPE SMS-PP-DOWNLOAD (при подключении к серверу).
3.2 Cards
Хранит предустановки карт локально в браузере (localStorage), чтобы представление Secured Packet могло автоматически подставлять ключи и параметры.
| Поле | Описание |
|---|---|
| Name | Понятная метка |
| ICCID | Опциональный идентификатор карты |
| KIc / KID | Индикаторы ключа и алгоритма (например, 15 = индекс 1, 3DES-CBC2; x2 = AES) |
| SPI1 / SPI2 | Security Parameter Indicators |
| TAR | Toolkit Application Reference |
| Counter | Счётчик повторов (5 байт) |
| KIc key / KID key | 16/24/32 hex-символа (ключи 8/16/24 байта 3DES) или 32/48/64 hex-символа (ключи 16/24/32 байта AES) |
Export as JSON / Import JSON from clipboard для обмена предустановками. Выбранная предустановка автоматически заполняет форму Secured Packet.
3.3 RAM
Выполняет операции удалённого управления приложениями (Remote Application Management) как защищённые пакеты SCP80 через SMS-PP-DOWNLOAD ENVELOPE. Карта должна поддерживать SCP03 (AES или 3DES). Предустановка карты из подвкладки Cards обеспечивает SPI, ключи, TAR и счётчик.
Операции
| Операция | Описание |
|---|---|
| Explore Card (all GP data) | Запрос GET STATUS для ISD, приложений, ELF и модулей ELF, а также GET DATA FF21 для информации о памяти. Результаты отображаются в обзоре с кнопками Delete для каждого элемента. |
| Install Package (.cap file) | Отправка .cap файла на карту через сервер: INSTALL[for load] → LOAD ×N → INSTALL[for install (+make selectable)]. |
Обзор карты (Explorer View)
После выполнения «Explore Card» отображается:
- ISD — AID, жизненный цикл, привилегии (без удаления; ISD нельзя удалить)
- Приложения — AID, жизненный цикл, привилегии, связанный ELF/SD. Каждое имеет кнопку Delete (GP
DELETEпо AID). - Executable Load Files — AID, жизненный цикл, версии, AID модулей. Каждый имеет Delete (только ELF) и Delete All (каскадное: ELF + модули + установленные приложения, P2=
0x80).
Удаление подтверждается через диалог браузера перед отправкой команды GP DELETE через SCP80. Обзор автоматически обновляется после успешного удаления.
4. Вкладка Response parser
Декодирует raw-ответ команды: выберите отправленную команду, введите SW (например, 9000) и hex данных ответа, затем нажмите Decode.
- Команда — группа SIM/USIM (SELECT, STATUS, READ/UPDATE, PIN-операции, CAT-команды типа TERMINAL PROFILE/ENVELOPE/FETCH/TERMINAL RESPONSE, MANAGE CHANNEL, …) или группа RAM/GP (INSTALL, LOAD, DELETE, GET/STORE DATA, auth, SCP-команды).
- Декодирование SW — статусные слова разрешаются по generic-, UICC- (TS 102 221) и GlobalPlatform-таблицам, контекст определяется автоматически.
- Декодирование привилегий — ответы GET DATA / INSTALL декодируют байты привилегий в читаемые флаги.
- Данные ответа — raw hex отображается и интерпретируется согласно команде (например, FCP-шаблоны SELECT).
5. Вкладка Card reader (pySim)
Подключение к локальному pysim-otaman-server для работы с картой. Подвкладки: File manager, Custom files, Profiler, pySim command line, Raw APDU и Proactive UICC.
5.1 File manager
- Read — чтение файла (автоопределение transparent/record)
- Edit — изменить hex-данные, Save для записи
- Raw / Decoded — переключение между hex-дампом и декодированным JSON
5.2 Custom files
Добавление файлов, не покрытых моделью pySim. Сохраняется в localStorage; экспорт/импорт JSON.
5.3 pySim command line
Выполнение любых команд pySim-shell с подсказками (300 мс) и автодополнением.
5.4 Raw APDU
Отправка произвольного APDU и просмотр ответа.
5.5 Proactive UICC
Работа с сессией Card Application Toolkit: меню STK, подписанные события, журнал проактивных команд, словарь данных PROVIDE LOCAL INFORMATION и опрос STATUS.
5.5.1 Меню STK
Если карта выдала команду SET UP MENU, вверху этого представления появляется блок «STK menu» с изумрудной кнопкой STK: <название>, открывающей оверлей меню (браузер STK-меню карты). Если карта не задала меню, вместо кнопки показывается «No menu set by the card». Состояние меню обновляется при каждом открытии представления.
5.5.2 Подписанные события (SET UP EVENT LIST)
События, которые отслеживает карта. У каждого события есть кнопка Send, открывающая форму, специфичную для типа события:
- События без данных (User Activity, Idle Screen, Data Available, …) — уведомление в один клик
- Location Status — выпадающий список: Normal / Limited / No service (тег
9B) - Access Technology Change — 13 типов RAT (тег
BF) - Network Rejection — полная адаптивная форма: тип регистрации (LU / GPRS / EPS / 5GS), поля местоположения (MCC, MNC, LAC, RAC, TAC), технология доступа и единый выпадающий список из 53 кодов причин (EMM, GMM, 5GMM и LU)
Отправка события использует ENVELOPE(Event Download) по TS 102 223 / TS 131 111.
5.5.3 Журнал проактивных команд
Хронологический список извлечённых проактивных команд. Каждая строка показывает время, код типа, имя и декодированный квалификатор (для команд, у которых он есть). Для команд с данными ответа показывается строка Response: с байтами TERMINAL RESPONSE (без служебных TLV); ответы PROVIDE LOCAL INFORMATION декодируются через словарь данных PLI.
5.5.4 Словарь данных PROVIDE LOCAL INFORMATION
Редактируемые hex-значения для всех 22 квалификаторов PLI (TS 102 223 §8.6 + TS 131 111). У десяти квалификаторов есть встроенные формы декодирования/кодирования:
- 00 Location Info (MCC, MNC, LAC/TAC, Cell ID)
- 01 IMEI · 03 Дата/время/TZ · 04 Язык · 05 Timing Advance
- 06 Access Technology · 08 IMEISV · 09 Search Mode
- 0A Battery · 0E Multiple Access Technologies
Значения хранятся на сервере до перезапуска. Когда карта выдаёт PLI, сервер вставляет значения словаря в TERMINAL RESPONSE.
5.5.5 Опрос STATUS
Кнопка Send STATUS отправляет STATUS (F2) вручную. Переключатель Polling включает фоновый опрос: после настраиваемого интервала бездействия (аргумент сервера --poll-interval, 1–255 с, по умолчанию 30 с) сервер отправляет STATUS и обрабатывает любую ожидающую проактивную команду. При извлечении карты опрос останавливается, а состояние карты сбрасывается.
5.6 Profiler
Проверяет соответствие карты именованному профилю — упорядоченному набору правил, описывающих ожидаемую файловую систему и (опционально) содержимое файлов. Профили хранятся в localStorage.
Список профилей
- New profile — создаёт пустой набор правил, запросив имя.
- Profile from card — сканирует подключённую карту и создаёт по одному правилу на каждый существующий файл (см. ниже), затем открывает редактор.
- Import profile — загружает набор правил из JSON-файла (имя хранится внутри JSON).
- В каждой строке профиля показаны имя и время создания, а также действия Edit, Check, Export (скачать JSON) и Delete.
Правила файловой системы
Правила выполняются последовательно. Правило файловой системы задаётся:
- Путь — начинается с
MF(например,MF/7F10/6F3A) или с AID ADF (например,A0000000871002/6F07). - Проверка FCP/FCI — какая часть информации об управлении файлом проверяется: Filetype only (FCP) (существование + тип файла), Filetype + size (FCP) (добавляются размер файла либо длина/число записей для record-файлов) или Exact FCI (добавляется побайтовое сравнение сырого ответа SELECT — шаблона FCP
'62'— выявляет изменения FID/AID, жизненного цикла, атрибутов безопасности и проприетарных параметров). - Атрибуты файла — тип файла, размер, длина записи и число записей из FCP-шаблона (любой можно оставить незаданным).
- Содержимое (опционально) — Exact (точное совпадение hex) или Mask, где
?— шаблон на один полубайт (маска без?— совпадение префикса, например0891для MCC/MNC из IMSI). Для record-файлов хранится список по записям.
Check выполняет каждое правило на подключённой карте и показывает строку прогресса и отчёт прохождения (существование, каждый атрибут FCP и совпадение содержимого).
Опции сканирования «Profile from card»
Диалог сканирования запрашивает имя профиля и предлагает селектор «FCP/FCI check» (те же три режима, по умолчанию Filetype + size), применяемый ко всем создаваемым правилам, а также список «Ignore contents of» (все отмечены по умолчанию) часто перезаписываемых файлов, содержимое которых пропускается: EF.LOCI, EF.PSLOCI, EF.EPSLOCI, EF.5GS3GPPLOCI, EF.Keys, EF.KeysPS, EF.SMS, EF.Kc, EF.KcGPRS, EF.LOCIGPRS, EF.CBMID, EF.SMSS. Строка прогресса показывает N / всего файлов (%) во время сканирования. Правила создаются только для файлов, которые реально существуют на карте (возвращён FCP-шаблон); отсутствующие файлы пропускаются. Пользовательские файлы из подвкладки Custom files включаются с той же проверкой существования.
5.7 Сценарии использования
Сценарий A — Работа с файлами, не входящими в модель pySim (Custom files)
- Получите FID целевого файла (документация вендора или анализ ATR/файловой системы; такие файлы часто отсутствуют в открытых спецификациях).
- Откройте вкладку Card reader → подвкладку Custom files.
- Введите полный путь (например,
3F00/7F20/6F46) и псевдоним (например,EF.SPN). - Нажмите Add — файл появится в дереве курсивом (непроверенный).
- Кликните по файлу для проверки существования; при успехе (
9000) он работает как обычный файл. - Читайте, редактируйте и сохраняйте hex-данные; переключайте Raw/Decoded.
- Экспортируйте список пользовательских файлов в JSON для переноса на другие машины.
Сценарий B — Симуляция реальной сетевой среды для тестирования SIM
B.1 Ответы на PROVIDE LOCAL INFORMATION (PLI)
- Откройте Proactive UICC → PROVIDE LOCAL INFORMATION response data.
- Используйте формы декодирования/кодирования для IMEI (
01), Location Info (00), Access Technology (06) и т.д. - Нажмите Save — значения сохранятся на сервере.
- Включите Polling (интервал 30 с), чтобы карта периодически выдавала PLI.
- Сервер вставляет значения словаря в каждый TERMINAL RESPONSE.
- Проверьте в журнале проактивных команд: запись PLI покажет декодированный ответ.
B.2 Симуляция сетевых действий через ENVELOPE (event download)
- Проверьте список подписанных событий (из SET UP EVENT LIST).
- Нажмите Send на событии (например, Location Status) и заполните форму; будет отправлен
ENVELOPE(Event Download). - Для Network Rejection выберите тип регистрации → поля местоположения → технологию доступа → причину отклонения.
- Карта может ответить проактивной командой, которую обработчик цепочки зарегистрирует и обработает автоматически.
B.3 Проверка симулированной среды
- Журнал проактивных команд показывает полный цикл (команда + байты TERMINAL RESPONSE).
- Кнопка STATUS / автопросмотр поддерживают сессию CAT (цикл дренажа).
6. Установка сервера
Для работы с картой (вкладка Card reader, Proactive UICC, доставка OTA) нужен локальный pysim-otaman-server — встроенный в OTAMan HTTP-сервер, оборачивающий pySim, работающий с ридером через PC/SC или serial и раздающий сам PWA (откройте http://127.0.0.1:8080).
6.1 Требования
- Python 3.8+ с
pip - Git
- Смарт-картридер (PC/SC или serial/FTDI). Предпочтителен PC/SC; на Linux требуются
pcsc-lite+ccid - Только Windows — используйте Python 3.10–3.13 (рекомендуется 3.13):
pyscard(обёртка драйвера PC/SC) поставляет готовые wheels для этих версий. На Python 3.9 / 3.14 pip собираетpyscardиз исходников, для чего требуются Microsoft C++ Build Tools («Desktop development with C++»). Мост SMPP (smpp.twisted3) на Windows намеренно не устанавливается, поэтому для Python 3.10–3.13 C++ Build Tools не нужны.
6.2 Быстрый старт — Linux / macOS
git clone https://github.com/anttro/otaman.git cd otaman chmod +x setup.sh start.sh ./setup.sh # создаёт .venv, устанавливает pysim + сервер (однократно) ./start.sh # запускает сервер (PWA + API, автоопределение ридера)
6.3 Быстрый старт — Windows
git clone https://github.com/anttro/otaman.git cd otaman setup.bat # создаёт .venv, устанавливает pysim + сервер (однократно) start.bat # запускает сервер (PWA + API)
6.4 Вспомогательные скрипты
| Скрипт | Назначение |
|---|---|
| setup.sh / setup.bat | Создаёт .venv/, устанавливает pySim и сервер. Запускается один раз после клонирования. |
| start.sh / start.bat | Запускает сервер из venv (при отсутствии — из глобальной установки). |
6.5 Автоопределение ридера (start.sh)
- PC/SC (Linux) — если запущен демон
pcscd, передаёт-p 0 - Serial (Linux) — если существует
/dev/ttyUSB0, передаёт-d /dev/ttyUSB0 - PC/SC (Windows) — всегда использует
-p 0(PC/SC встроен в Windows)
Если ридер не обнаружен, сервер запускается без аргументов и показывает «Reader: none». Карту можно инициализировать позже кнопкой Equip на вкладке Card reader.
6.6 Ручная установка
# Создать и активировать venv python3 -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows # Установить pysim pip install git+https://github.com/osmocom/pysim.git # Установить pysim-otaman-server (editable — раздаёт встроенный PWA) pip install -e . # Запустить сервер (PWA + API) pysim-otaman-server --http-port 8080
Подключите PC/SC-ридер с SIM-картой и откройте http://127.0.0.1:8080 — PWA и API на одном origin, поэтому CORS не требуется.
Если PWA раздаётся с публичного HTTPS-хоста (например, https://otaman.example.com), для доступа к локальному серверу карт нужны два условия: (1) сервер отвечает на preflight заголовком Access-Control-Allow-Private-Network: true (pysim-otaman-server ≥ 1.6.1 делает это автоматически), и (2) браузеру должно быть разрешено обращаться к локальной сети — в Chrome/Edge/Vivaldi: Настройки сайта → Доступ к локальной сети → разрешить сайт (или подтвердить запрос). Без разрешения браузера запрос к 127.0.0.1 блокируется ещё до отправки preflight.
7. Совместимость версий
| PWA (OTAMan) | Сервер | Статус |
|---|---|---|
| 1.x.x | 1.x.x | ✅ Совместимы |
| 1.x.x | 0.x.x | ❌ Устарел — обновите сервер |
| 1.x.x | 2.x.x+ | ⚠️ Сервер новее — обновите PWA |
PWA проверяет версию сервера при подключении через GET /api/version и предупреждает о несовместимости.