← Все заметки
Мониторинг и безопасность

Инвентаризация КОМПАС-3D, SOLIDWORKS и Siemens NX через KSC 15.1 Open API

Практический кейс: Python, KlAkOAPI и Excel-отчёт по версиям установленного CAD на рабочих станциях.

Статус: актуальноОпубликовано: 2026-10-20Обновлено: 2026-10-20

Проверено на: Kaspersky Security Center 15.1 · Windows Server 2022 · Python 3.12.3 · KlAkOAPI 1.0.0.0

Задача

Нужно получить не каталог программ, а таблицу какие версии КОМПАС-3D, SOLIDWORKS и Siemens NX установлены на каких компьютерах, с указанием Service Pack. Отдельные Viewer, конфигурации, API-компоненты и вспомогательные библиотеки не учитываются как основные CAD-системы.

Вместо удалённого опроса каждого компьютера использовали Kaspersky Security Center 15.1 Open API. Из инвентаризации 104 компьютеров получено 62 установки CAD на 32 рабочих станциях. Ошибок API-запросов — 0.

GitHub: Python-экспортёр CAD и README с инструкцией. Публичный код адаптирован и обезличен; после переработки он ещё не проходил отдельный сквозной прогон на продуктивном KSC.

Архитектура

Kaspersky Security Center 15.1 / Windows Server 2022
  Open API HTTPS:13299
    -> SSH-туннель (пилот) / доверенный HTTPS (production)
    -> Linux / Python 3.12 / KlAkOAPI
       -> HostGroup.FindHosts: список устройств
       -> InventoryApi.GetHostInvProducts: ПО на устройстве
    -> классификация основных CAD
    -> XLSX + CSV

Для подключения создан внутренний пользователь KSC с правами только на чтение базовой функциональности и инвентаризации приложений. В MMC предварительно включили отображение разделов безопасности. Пароль в код не записывался. SSH на Windows-сервере был включён существующей доменной задачей настройки OpenSSH от SYSTEM с ограничением доверенных сетей — для самого API SSH не обязателен.

Python и KlAkOAPI

Архив KlAkOAPI.tar.gz взят из установленного KSC и перенесён с проверкой контрольной суммы. В данной поставке отсутствовали setup.py и pyproject.toml; подключение через PYTHONPATH оказалось проще прямого pip install:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install requests openpyxl
mkdir -p vendor
tar -xzf KlAkOAPI.tar.gz -C vendor --no-same-owner
export PYTHONPATH="$PWD/vendor/KlAkOAPI-1.0.0.0"

Библиотека поставляется Kaspersky и не включена в публичный GitHub-репозиторий.

Диагностика авторизации

Сначала возникла ошибка Authentication failure. Для отдельной внутренней записи важно передать в KlAkAdmServer.Create параметр internal_user=True. После правильной аутентификации сервер отвечал Authenticated user not authorized — понадобились разрешения чтения в MMC KSC. Изменяющие права выдавать не пришлось.

Ещё один нюанс: вызов GetInvProductsList(KlAkParams()) вернул KlAkResponse, но OutPars() был пустым. Инвентаризация находится внутри RetVal(), возвращающего KlAkParams. Массив в проверенной среде назывался GNRL_EA_PARAM_1, а не ожидаемый KLEVP_EA_PARAM_1:

result = response.RetVal()
print(result.GetNames())  # ['GNRL_EA_PARAM_1']
products = result["GNRL_EA_PARAM_1"]

Получено 2884 записи каталога приложений. Однако каталог не связывает программу с конкретным ПК. Для этого использовали HostGroup.FindHosts и GetHostInvProducts(host_id, KlAkParams()); названия и версии брали из DisplayName и DisplayVersion.

Результаты

CAD Версия Установок
SOLIDWORKS 2019 SP03 8
SOLIDWORKS 2019 SP05.1 14
SOLIDWORKS 2023 SP05 5
КОМПАС-3D v16.1 6
КОМПАС-3D v19 19
Siemens NX 12.0.2 9
Siemens NX build 22.06.9220.00005 (релиз не указан) 1
Итого 62

Запись SOLIDWORKS 2020 Document Manager API была в каталоге, но полноценного SOLIDWORKS 2020 в инвентаризации не обнаружено. Учитывать API-компонент как отдельную CAD-установку было бы ошибкой.

Отчёт и ограничения

Экспортёр формирует cad_hosts.xlsx с матрицей компьютеров, детализацией, вкладками по CAD и сводкой версий, а также cad_hosts.csv и cad_errors.csv. Отчёт включает реальные имена рабочих станций, поэтому его не публикуют в GitHub.

Результаты — последние сведения от агентов KSC, а не онлайн-проверка ПО. Отсутствие ошибок API не доказывает свежесть инвентаризации. Для регулярного сбора следует дополнительно проверять время последней связи агента и обеспечить верификацию TLS: отключение проверки допустимо лишь при диагностическом запуске через loopback SSH-туннель.

Пример скрипта и его эксплуатационные ограничения: GitHub — KSC CAD Inventory.