OScam-icam: настройка и компиляция для DVB-карт
Если вы уже работали с обычным OScam и вдруг часть каналов перестала открываться — скорее всего, дело в том, что ваша сборка не поддерживает icam-режим. Форк oscam icam существует именно для таких случаев: когда CAS использует переменную длину control word или ускоренную ротацию ключей, стандартный OScam просто выбрасывает такие ECM. Ниже — конкретная инструкция: от сборки из исходников до диагностики по логам.
Что такое OScam-icam и чем он отличается от обычного OScam
OScam — это опенсорсный softcam с поддержкой десятков протоколов и ридеров. Но его стандартная сборка рассчитана на классические CAS вроде Viaccess, Conax, Irdeto с фиксированной длиной CW (8 байт) и стандартной CRC. Как только появляются системы с нестандартной обработкой ключей — начинаются проблемы.
Назначение режима icam
Icam (Instant Conditional Access Module) — это расширение протокола, позволяющее работать с CAS, где control word может иметь переменную длину или нестандартную CRC. Такие системы встречаются у ряда европейских и ближневосточных операторов, где ротация ключей происходит каждые несколько секунд вместо стандартных 10.
Форк oscam icam добавляет в кодовую базу специфические обработчики ECM для таких систем — в частности, правильный парсинг ответов сервера и пересчёт CRC при необходимости.
Отличия в обработке ECM и константной длине CW
В стандартном OScam при получении CW с неверной CRC пакет отбрасывается с записью в лог типа CW checksum error. Это поведение жёстко зашито в cscrypt/des.c. В форке icam эта проверка становится опциональной через параметр disablecrccws.
Кроме того, icam-форк правильно обрабатывает ситуацию, когда сервер возвращает CW с дополнительными байтами метаданных — стандартный парсер в таких случаях либо обрезает данные, либо выдаёт ecm response error.
Когда стандартного OScam недостаточно
Проверить просто: если в логах вы видите строки ECM rejected или no matching reader при том, что ридер показывает статус CONNECTED и правильный CAID — вам нужен oscam icam. Другой симптом — каналы открываются, но фризят каждые 3–5 секунд именно в момент смены ключа.
Сборка и компиляция OScam-icam из исходников
Большинство ресурсов дают только готовые бинарники. Это работает до тех пор, пока архитектура вашей приставки совпадает. Если у вас MIPS-процессор старой Dreambox или ARM в Amlogic-боксе — нужна кросс-компиляция из исходников.
Установка зависимостей (libssl-dev, libusb, pcsc-lite)
На хост-машине (Debian/Ubuntu) устанавливаем всё необходимое:
apt-get install build-essential libssl-dev libusb-1.0-0-dev \
pcscd libpcsclite-dev git cmake
Для кросс-компиляции дополнительно понадобится тулчейн — о нём ниже. Без libssl-dev флаг USE_LIBCRYPTO=1 не сработает, и сборка упадёт с ошибкой cannot find -lcrypto.
Получение исходников и выбор toolchain
Исходники форка берём с GitHub (репозиторий oscam-patched или oscam-svn-mirror с icam-патчами — ищите по тегу icam). Стандартный SVN OScam icam-режим не содержит.
git clone https://github.com/oscam-emu/oscam-patched.git
cd oscam-patched
Для Dreambox DM800 (MIPS 4Kc) подходит тулчейн mipsel-unknown-linux-gnu из пакета crosstool-ng. Для Amlogic S905 (ARM Cortex-A53) — aarch64-linux-gnu-gcc из репозитория дистрибутива. Старые тулчейны под MIPS (до версии GCC 4.9) часто не могут слинковать современную OpenSSL — получите undefined reference to EVP_MD_CTX_new. Берите GCC 7.x или новее.
Флаги конфигурации: USE_LIBCRYPTO, MODULE_NEWCAMD, READER_*
Сначала — меню конфигурации:
./config.sh -g
Здесь включаем нужные модули. Минимальный набор для работы через newcamd:
MODULE_NEWCAMD— протокол клиентских подключенийMODULE_CCCAM— если используете CCcam-линииREADER_CARDREADER— для физических смарткартCS_ANTICASC— защита от злоупотреблений (опционально)
Затем сборка:
make USE_LIBCRYPTO=1 CONF_DIR=/etc/tuxbox/config
Готовый бинарник копируем:
cp oscam /usr/bin/oscam
chmod +x /usr/bin/oscam
Кросс-компиляция под ARM/MIPS приставки
Для кросс-компиляции передаём тулчейн через переменную:
make USE_LIBCRYPTO=1 \
CONF_DIR=/etc/tuxbox/config \
CC=mipsel-unknown-linux-gnu-gcc \
STRIP=mipsel-unknown-linux-gnu-strip
Скомпилированный файл переносим на приставку через SCP или TFTP. Проверяем архитектуру перед запуском:
file oscam
# должно быть: ELF 32-bit LSB executable, MIPS...
Если видите ELF 64-bit x86-64 — вы собрали нативную версию, а не кросс. Тулчейн не сработал.
Конфигурация: oscam.conf, oscam.server и oscam.user
Конфиги лежат в CONF_DIR, который вы указали при сборке — обычно /etc/tuxbox/config/ или /etc/oscam/. Три основных файла: oscam.conf, oscam.server, oscam.user.
Глобальная секция [global] и [cs357x]/[newcamd]
Минимальный oscam.conf:
[global]
logfile = /var/log/oscam.log
maxlogsize = 512
preferlocalcards = 1
saveinithistory = 1
[webif]
httpport = 8888
httpuser = admin
httppwd = changeme
httprefresh = 10
[newcamd]
port = 15050@1830:000000
Строка в секции [newcamd] задаёт порт и CAID с ident-фильтром. Если порт 8888 занят другим процессом — webif просто не запустится без ошибки в логе OScam (проверяйте через netstat -tlnp | grep 8888).
Настройка ридера с protocol = newcamd и cccam
Пример ридера в oscam.server для подключения через newcamd:
[reader]
label = myreader
protocol = newcamd
device = server.example.com,15050
key = 0102030405060708091011121314
user = myuser
password = mypassword
caid = 1830
ident = 1830:000000
group = 1
reconnecttimeout = 30
disablecrccws = 1
Параметр key — это 14-байтный DES-ключ newcamd. Если сервер использует стандартный ключ — он будет 0102030405060708091011121314. Используйте тот, что выдал вам источник линии.
Для CCcam-ридера протокол меняем:
[reader]
label = cccam_line
protocol = cccam
device = server.example.com,12000
user = myccuser
password = myccpass
group = 1
cccversion = 2.3.0
ccckeepalive = 1
Параметры icam: disablecrccws, ecmwhitelist, caid/ident
disablecrccws = 1 — отключает проверку CRC у control word. Для обычных CAS это лишнее, но для систем, где oscam icam-обработка критична, это может быть единственным способом заставить каналы открыться.
ecmwhitelist задаёт список разрешённых длин ECM-ответа:
ecmwhitelist = 1830:=16,32
Это говорит OScam принимать для CAID 0x1830 ответы длиной 16 или 32 байта. Без этого нестандартные длины будут отброшены.
Важный момент с ident: если CAID прописан, а ident не указан — ридер будет виден в webif как CONNECTED, но каналы не откроются. OScam не будет слать на него ECM, потому что фильтр по ident не совпадает. Прописывайте явно: ident = 1830:000000,003411.
Права доступа и oscam.user (group, au, betatunnel)
Пример записи в oscam.user:
[account]
user = client1
pwd = clientpass
group = 1
au = myreader
betatunnel = 1702:000000:1830:000000
maxconnections = 1
betatunnel нужен, когда канал транслируется в одном CAID, но ваша карта/линия работает с другим. Например, оператор транслирует в Betacrypt (0x1702), а линия декодирует как Nagravision (0x1830). Без betatunnel OScam не перенаправит ECM.
maxconnections = 1 — важный параметр. Если один клиент с одним логином подключается с двух приставок, второй получит отказ. Именно из-за этого канал может работать на одной приставке и фризить на другой при общей линии.
Порты, протоколы и проверка соединения
Порт newcamd (обычно 1xxxx) и формат строки
Стандартный диапазон портов newcamd — 10000–19999. Типичная строка подключения выглядит так:
N: server.example.com 15050 myuser mypassword 01 02 03 04 05 06 07 08 09 10 11 12 13 14
Последние 14 чисел — DES-ключ в десятичном формате (в OScam он задаётся в hex). Если ключ неверный — соединение установится, но ни одна ECM не расшифруется. В логе увидите authentication failed или просто вечный CONNECTED без ответов на ECM.
Веб-интерфейс на 8888 и мониторинг статуса ридера
Открываем http://адрес-приставки:8888 — там видим статус каждого ридера. Нормальная картина: статус CONNECTED, столбец ECM time показывает значение в миллисекундах, счётчик OK растёт.
Если webif не открывается — проверяем, не занят ли порт: netstat -tlnp | grep 8888. Часто его перехватывает встроенный веб-сервер Enigma2 или другой процесс. Меняем httpport на 8080 или 9999.
Проверка ECM time и hops в логах
Нормальный ECM time для прямого подключения — до 400 мс. Значения 600–900 мс говорят о перегрузке сервера или высоком пинге. Выше 1000 мс — будут фризы.
Параметр hops в CCcam-цепочке — количество промежуточных серверов. При hops > 3 ECM time резко растёт, и плюс периодические дисконнекты становятся нормой: каждый промежуточный сервер имеет свой лимит подключений и может обрывать соединение. В логе это выглядит как чередование CONNECTED → RECONNECTING с интервалом 1–2 минуты.
Открытие портов в firewall/iptables
Если OScam работает как сервер — открываем нужный порт:
iptables -A INPUT -p tcp --dport 15050 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
На Enigma2-приставках firewall обычно отключён по умолчанию. На Linux-серверах — проверьте ufw status или iptables -L -n.
Устранение типичных ошибок OScam-icam
Диагностика начинается с логов. Запускаем с максимальным уровнем отладки:
oscam -b -d 255 -c /etc/tuxbox/config -l /var/log/oscam.log
Флаг -d 255 включает все уровни debug. Лог сразу становится подробным — ищем нужные строки через grep -i "ecm\|rejected\|error\|reader" /var/log/oscam.log.
Ошибка 'ecm response error' и rejected ECM
Строка ECM rejected означает, что ридер ответил, но ответ не прошёл проверку. В форке oscam icam первым делом проверяем:
- Установлен ли
disablecrccws = 1в секции ридера - Совпадает ли длина ECM-ответа с
ecmwhitelist - Правильно ли указан CAID и ident
Если после ECM rejected в логе идёт CW checksum failed — это точно случай для disablecrccws.
Фриз каналов при корректном статусе ридера
Это самая коварная ситуация. Ридер CONNECTED, ECM time в норме — а каналы фризят каждые несколько секунд. Три основные причины:
- Ротация ключей быстрее, чем ECM time. Если смена CW происходит каждые 2 секунды, а ECM time 1800 мс — новый ключ приходит, когда старый ещё не применился.
- Неверный
ident— OScam декодирует не тот поток. - Лимит соединений на сервере. Один логин = одно активное соединение. Если вы подключились с двух устройств — второй получает CW с задержкой или не получает совсем.
Проблемы с caid/ident и фильтром ecmwhitelist
Частая ошибка: CAID указан как десятичное число вместо шестнадцатеричного. В конфиге OScam CAID всегда в hex. Nagravision — 1830, не 6192. Viaccess — 0500. Если перепутать — ридер не будет получать ECM вообще, и в логе увидите no matching reader found.
С ecmwhitelist аналогично: если длина ответа не попадает в список — ECM отклоняется молча. Временно уберите ecmwhitelist совсем, посмотрите в логе реальную длину ответов, и уже потом пропишите правильные значения.
Логи: уровень debug и анализ oscam.log
В webif на порту 8888 есть вкладка Oscam Log — там можно менять уровень отладки без перезапуска. Установите CM debug в значение 255.
Полезные паттерны для grep:
# Все ошибки ECM
grep -i "ecm\|rejected\|error" /var/log/oscam.log | tail -50
# Статусы ридеров
grep "reader\|CONNECTED\|DISCONN" /var/log/oscam.log | tail -20
# CRC ошибки
grep "checksum\|CRC\|CW" /var/log/oscam.log
Как выбрать источник линии для OScam-icam
Выбор источника — чисто техническая задача. Вот что реально важно, когда вы тестируете новую линию.
Технические критерии стабильного источника
Первое — поддержка нужного CAID. Не все источники работают со всеми системами условного доступа. Перед подключением уточняйте список поддерживаемых CAID и ident.
Второе — uptime. Нормальный показатель — выше 99% за месяц. Если сервер уходит в оффлайн несколько раз в неделю — это не вариант для постоянного использования.
Третье — количество hops в CCcam-цепочке. Чем больше промежуточных серверов, тем выше ECM time и нестабильнее соединение.
Параметры, которые стоит проверять (ECM time, uptime)
ECM time до 300 мс — хорошо. 300–500 мс — приемлемо. Выше 600 мс при стабильном интернете — сервер перегружен или далеко географически.
Следите за счётчиком ECM Rej в webif. Если он растёт — что-то не так с фильтрацией или сервером. Нормальный показатель — ноль или единицы за час работы.
Проверяйте maxconnections у провайдера. Если у вас несколько приставок на одной линии — нужно несколько логинов или провайдер с поддержкой multi-conn.
Юридические и технические риски
Cardsharing находится в серой или явно незаконной зоне в большинстве юрисдикций — это стоит учитывать. В ряде стран ЕС за использование чужих смарткарт предусмотрена уголовная ответственность. Технический риск тоже есть: операторы активно используют систему CAS-трапов — поддельных каналов, которые выявляют несанкционированный шаринг и блокируют CAID/ident в реальном времени.
Частые вопросы
Чем OScam-icam отличается от обычного OScam?
Форк oscam icam добавляет поддержку CAS с переменной длиной control word и ускоренной ротацией ключей. Стандартный OScam отбрасывает такие ECM с ошибкой CRC или ecm response error. Ключевые отличия — параметр disablecrccws, расширенный парсинг ECM-ответов и поддержка ecmwhitelist для нестандартных длин.
Какие флаги нужны при компиляции OScam-icam?
Обязательно: USE_LIBCRYPTO=1, MODULE_NEWCAMD, MODULE_CCCAM. Для физических карт добавьте нужные READER_*. Конфигурация через ./config.sh -g, сборка командой make USE_LIBCRYPTO=1 CONF_DIR=/etc/tuxbox/config. Под MIPS/ARM обязательно указывайте CC= и STRIP= с путём к кросс-компилятору.
Что делать, если каналы фризят при статусе ридера CONNECTED?
Проверьте ECM time в webif — должен быть ниже 400 мс. Добавьте disablecrccws = 1 в секцию ридера в oscam.server. Сверьте CAID и ident — оба должны совпадать с тем, что даёт линия. Проверьте в логе наличие строк ECM rejected и CW checksum. Если используете несколько приставок на одном логине — это лимит соединений.
Какой порт использовать для newcamd в OScam-icam?
Порт задаётся в строке ридера — обычно пятизначное число в диапазоне 10000–19999, например 15050. Webif по умолчанию работает на порту 8888. Оба порта нужно открыть в firewall: iptables -A INPUT -p tcp --dport 15050 -j ACCEPT. Порт webif можно сменить через httpport в oscam.conf, если 8888 занят.
Где находятся конфигурационные файлы OScam?
По умолчанию — в директории, указанной при сборке через CONF_DIR. Обычно это /etc/tuxbox/config/ или /etc/oscam/. Три основных файла: oscam.conf (глобальные настройки), oscam.server (ридеры), oscam.user (клиенты). Логи пишутся в /var/log/oscam.log, путь задаётся параметром logfile в секции [global].
Зачем нужен параметр disablecrccws?
Он отключает проверку CRC у control word. В стандартных CAS CRC предсказуема и OScam использует её для верификации. В режиме oscam icam некоторые системы отдают CW с нестандартной CRC — без disablecrccws = 1 такие CW отбрасываются, и канал не открывается. Параметр прописывается в секции нужного ридера в oscam.server, а не глобально.
Практические советы для стабильного просмотра
Даже самая стабильная линия CCCam или OSCam требует пары простых подготовительных шагов. Обновляйте прошивку ресивера, раз в неделю очищайте ECM‑кеш и держите 15–20% свободного места на USB‑накопителе или во встроенной памяти, чтобы кардридер записывал ключи без задержек.
При настройке антенны оставляйте запас по MER/BER: смещение на два градуса или ослабленный F‑коннектор чаще становится причиной “фризов”, чем сам кардшаринг. Держите под рукой короткий патч‑корд для проверки другого роутера и сохраните два профиля в OSCam — под TCP и под UDP — чтобы мгновенно переключиться, если провайдер начнёт фильтровать протокол.
Utgard.tv следит за каждым хабом 24/7, однако вы можете ускорить диагностику, если будете вести небольшой журнал действий. Записывайте время переключения канала, активный CAID и то, использовали ли вы Wi‑Fi или Ethernet. Такой мини‑отчёт позволит инженерам воспроизвести вашу конфигурацию в лаборатории и предложить решение не за часы, а за минуты.
- Держите активными две линии: если первый сервер уходит на обслуживание, второй тут же подхватывает поток без повторного ввода логина.
- Раз в месяц делайте замер скорости и задержек. Стабильных 1–2 Мбит/с при пинге до 80 мс достаточно для SD/HD, но если джиттер превышает 20 мс — переведите роутер на провод.
- Сохраните в закладки страницу статуса Utgard.tv и Telegram‑бота @utgard_tv_bot — там появляются уведомления о работах раньше, чем успеют среагировать SEMrush или внешние мониторы.