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, а не глобально.
Practical checklist for smooth viewing
Even the best CCCam or OSCam line needs two or three simple preparations. Update your receiver firmware, reset the ECM cache once a week and keep 15–20% free space on the USB stick or internal flash so that the reader can store keys without delays.
When tuning a dish, aim for MER/BER reserve: a two‑degree offset or a loose F‑connector often causes the “freezing” that users blame on cardsharing. Keep a short patch cord to test alternative routers, and save two profiles in OSCam — one for TCP, one for UDP — so you can switch instantly if your ISP starts filtering a protocol.
Utgard.tv monitors each hub 24/7, but you can speed up diagnostics by keeping a short log of your receiver actions. Note the time when you changed the channel, which CAID was active and whether you used Wi‑Fi or Ethernet. This tiny “journal” helps engineers reproduce your environment in the lab and return with a solution in minutes instead of hours.
- Keep two line slots enabled: if the first server hits a maintenance window, the second one instantly takes over without re-entering credentials.
- Run a monthly speed and latency test. Stable 1–2 Mbps with ping <80 ms is enough for SD/HD, but if jitter exceeds 20 ms, switch the router to wired mode.
- Save the Utgard.tv status page and Telegram bot @utgard_tv_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.