pySim (форк)
Форк проекта osmocom/pysim — набора утилит для чтения, декодирования и программирования SIM, UICC, USIM, ISIM и eUICC.
Форк добавляет к исходному проекту утилиту pySim-translate.py: она читает карту или файл дампа и отвечает на два вопроса — что на карте записано и почему она не работает. Вывод на русском или английском языке.
Что добавлено по сравнению с upstream
| Компонент | Назначение |
|---|---|
pySim-translate.py |
Утилита командной строки: сводка, диагностика, сравнение карт |
Команда summary |
Та же сводка внутри pySim-shell |
pySim/translate/ |
Модуль разбора дампа, диагностики и вывода |
pySim/translate/data/ |
Таблица MCC/MNC для расшифровки кодов сетей |
tests/unittests/test_translate_*.py |
Юнит-тесты модуля, разложенные по темам |
tests/unittests/data/fsdump-example.json |
Тестовый дамп карты для сквозных проверок |
Makefile, requirements-dev.txt |
Прогон тестов, линтера и проверки типов |
.gitlab-ci.yml |
Автоматическая проверка при каждом push |
Дополнения лежат в отдельных файлах, чтобы слияния с основным проектом оставались простыми. В upstream-файлах изменены только списки установки в setup.py и две строки регистрации команды в pySim-shell.py.
Что умеет
| Задача | Чем решается |
|---|---|
| Понять, что записано на карте | Сводка с расшифровкой всех файлов, имён сетей и служб |
| Понять, почему карта не работает | Диагностика: готовность к 5G и IMS, регистрация, согласованность идентификаторов, обязательные файлы |
| Принять партию карт | Сверка с эталоном, проверка по требованиям, таблица по партии |
| Разобраться с профилем eSIM | Та же сводка и диагностика по файлу профиля — до загрузки на карту |
| Разобрать карту, которой нет на руках | Сводка по записи обмена телефона с картой (SIMtrace2, osmo-qcdiag) |
| Достать данные абонента | Телефонная книга, сообщения (включая удалённые), номер центра сообщений |
| Подготовить отчёт | Markdown или HTML, при необходимости со скрытыми личными данными |
| Отдать данные другой программе | JSON, CSV, заготовка записи абонента для osmo-hlr, Open5GS и pyHSS |
| Понять, что меняется в работе | Наблюдение за картой и замер скорости обмена |
Установка
cd pysim_fork
pip3 install -r requirements.txt
Для разработки дополнительно:
pip3 install -r requirements-dev.txt
Быстрый старт
Посмотреть, что на карте
./pySim-translate.py --lang ru --card -p 0 # карта в считывателе
./pySim-translate.py --lang ru dump.json # ранее снятый дамп
./pySim-translate.py --lang ru профиль.der # профиль eSIM
./pySim-translate.py --lang ru --trace запись.pcapng # запись обмена телефона с картой
./pySim-translate.py --lang ru --verbose --card -p 0 # полный разбор каждого файла
Та же сводка доступна из интерпретатора, без снятия дампа:
pySim-shell (MF)> summary --lang ru
Снять и сохранить
./pySim-translate.py --lang ru --card -p 0 --all-files --save-dump card.json
./pySim-translate.py --lang ru --card -p 0 --no-subscriber # быстрее, без книги и сообщений
Проверить партию
./pySim-translate.py --lang ru --reference образец.json card.json # сверка с эталоном
./pySim-translate.py --lang ru --policy требования.yaml card.json # проверка по требованиям
./pySim-translate.py --lang ru --format markdown dumps/*.json # таблица по партии
./pySim-translate.py --lang ru --compare card_a.json card_b.json # чем отличаются две карты
Расхождение с эталоном или невыполненное требование дают код возврата 3 — проверку можно встроить в приёмку.
Подготовить отчёт и данные для других программ
./pySim-translate.py --lang ru --format html --card -p 0 > card.html
./pySim-translate.py --lang ru --mask-personal --format markdown card.json > card.md
./pySim-translate.py --export-subscriber osmo-hlr --card -p 0
./pySim-translate.py --json card.json | jq .imsi
Разобраться с неисправностью
./pySim-translate.py --lang ru --fix-script --card -p 0 > fix.script # что и как исправить
./pySim-translate.py --lang ru --timing --card -p 0 # скорость обмена
./pySim-translate.py --lang ru --card -p 0 --watch 30 # что меняется в работе
Лицензия
GNU General Public License v2.0 или новее — как и у основного проекта. Полный текст: COPYING.