Протокол CS378: настройка шаринга в OScam и CCcam
Если вы занимаетесь настройкой кардшаринга больше недели, то наверняка уже встречали строки вида CWS = host 378 user pass 0102030405060708091011121314 и задавались вопросом — что такое этот CS378 протокол шаринга и чем он отличается от обычного newcamd. Отвечаю сразу: ничем. Но давайте по порядку.
Что такое протокол CS378 и его связь с newcamd
CS378 протокол шаринга — это не отдельный стандарт. Это просто устоявшееся сленговое название для подключения по протоколу newcamd (точнее, newcamd525) через порт 378. Когда-то давно большинство серверов слушали именно этот порт, название прилипло, и теперь "CS378" используется как синоним newcamd-подключения.
Путаница возникает потому, что некоторые сайты подают CS378 как самостоятельный протокол с отдельной спецификацией. Это неправда. Под капотом — всё тот же newcamd525 с 3DES-шифрованием.
CS378 как разновидность newcamd 525
Newcamd525 — это версия протокола newcamd, разработанная для обмена CW (Control Words) между клиентом и сервером. Протокол работает поверх TCP, шифрует трафик трёхключевым DES, и именно эта версия стала стандартом де-факто для большинства шаринг-систем: OScam, CCcam, MgCamd все умеют с ним работать.
Почему 378 — это номер порта, а не отдельный стандарт
378 — просто TCP-порт. Исторически сложилось, что первые публичные newcamd-серверы запускали именно на нём. Сегодня реальный порт может быть любым — 12000, 15000, 28000, что угодно. Название "CS378" осталось, а вот порт нужно смотреть в данных, которые вам выдал провайдер.
Так что когда кто-то говорит "у меня CS378-подключение на порту 15000" — это звучит немного оксюморонно, но все понимают, о чём речь.
Структура строки подключения CS378
Строка состоит из пяти полей. В MgCamd и некоторых других клиентах она выглядит так:
CWS = host port username password deskey
Пример с обезличенными данными:
CWS = myserver.example.com 378 myuser mypassword 0102030405060708091011121314
DES-ключ — это 14 байт, записанных в hex: ровно 28 символов, без пробелов, без переносов строк. Он должен быть одинаковым на сервере и на клиенте. Если хотя бы один символ отличается — соединение не поднимется.
Структура пакета и порты CS378
Понимать внутреннее устройство протокола полезно не для академического интереса, а для нормальной отладки. Когда знаешь, что происходит на уровне пакетов, намного проще читать логи.
Рукопожатие и обмен DES-ключом
Соединение начинается стандартно: клиент открывает TCP-сокет на нужный порт. После установки TCP-сессии клиент отправляет login-пакет, зашифрованный 3DES с заранее известным ключом. Сервер отвечает MSG_CLIENT_2_SERVER_LOGIN_ACK — это подтверждение успешной аутентификации.
Следом сервер присылает CARD_DATA — пакет с информацией о карте: CAID (идентификатор системы условного доступа) и провайдер. Если CARD_DATA пришёл — значит карта на месте и сервер готов обрабатывать ECM-запросы.
Формат ECM/EMM-пакетов в newcamd
ECM (Entitlement Control Message) — это запрос на расшифровку текущего CW. Клиент шлёт ECM серверу, сервер обращается к карте, карта возвращает CW, сервер отправляет его обратно клиенту. Весь этот обмен зашифрован 3DES. EMM (Entitlement Management Message) — управляющие сообщения, обновляющие права карты; для обычного декодирования они менее важны.
В логах OScam ECM-обмен виден как строки с временем ответа — то самое "ecm time", которое показывает, сколько миллисекунд ушло от запроса до получения CW.
Порт 378 и нестандартные порты
Протокол никак не привязан к порту 378. Это конвенция, а не требование спецификации. Реальный порт указывается в конфигурационной строке и должен совпадать с тем, на котором слушает сервер. Не угадывайте порт — берите его из учётных данных, которые дал провайдер.
Часто вижу ошибку: человек получает данные с портом 15000, а в конфиге прописывает 378 "потому что CS378". Ридер не поднимается, начинается поиск проблем там, где их нет.
Настройка CS378-ридера в OScam
OScam — наиболее распространённый клиент для работы с newcamd. Конфигурация ридера находится в файле oscam.server. Путь зависит от прошивки и сборки:
/etc/tuxbox/config/oscam.server— классический Enigma2/var/keys/oscam.server— некоторые сборки под Dreambox/usr/keys/oscam.server— другие варианты/etc/oscam/oscam.server— Linux-установка через пакетный менеджер
Если не знаете, где у вас конфиги — find / -name oscam.server 2>/dev/null покажет за секунду.
Секция [reader] в oscam.server
Минимально рабочий блок выглядит так:
[reader]
label = mycs378reader
protocol = newcamd
device = myserver.example.com,378
key = 0102030405060708091011121314
user = myuser
password = mypassword
caid = 0500
group = 1
inactivitytimeout = 30
reconnecttimeout = 15
Здесь device — это host и порт через запятую, без пробела. Некоторые забывают про запятую и пишут пробел — OScam это не переварит.
Параметры protocol = newcamd и key
protocol = newcamd — это прямое указание OScam использовать протокол newcamd525. Параметр key принимает 28 hex-символов без пробелов. Если сервер использует стандартный дефолтный ключ, то это 0102030405060708091011121314 — но у нормальных провайдеров ключ уникальный.
inactivitytimeout задаёт, через сколько секунд OScam считает соединение мёртвым при отсутствии активности. reconnecttimeout — пауза между попытками переподключения. Я обычно ставлю 30 и 15 соответственно — работает нормально в большинстве сетей.
Привязка CAID/ident и group
Параметр caid говорит OScam, какие системы условного доступа обслуживает этот ридер. Если сервер отдаёт, скажем, Irdeto и Viaccess — можно указать оба через запятую: caid = 0604,0500. Если не указать — OScam попробует определить сам из CARD_DATA, но это не всегда работает корректно.
Параметр ident уточняет провайдера внутри CAID. Именно расхождение здесь — самая частая причина статуса CONNECTED без декодирования. Про это подробнее ниже.
group должен совпадать с группами в oscam.user, иначе пользователи не увидят этот ридер.
Проверка статуса в веб-интерфейсе
Веб-интерфейс OScam по умолчанию доступен на порту 8888 (или 8080, зависит от конфига в oscam.conf). В разделе "Readers" видно статус каждого ридера: CONNECTED означает, что TCP-соединение установлено. CARD рядом — что карта ответила и CAID/провайдер определены. Колонка ECM Time показывает среднее время ответа в миллисекундах.
Если статус CONNECTED, но колонка ECM Time пустая или ноль — карта есть, но ECM-запросы либо не приходят, либо уходят к другому ридеру, либо не совпадает CAID/ident.
Настройка CS378 в CCcam и MgCamd
Не все используют OScam. CCcam до сих пор живёт на многих ресиверах, а MgCamd имеет свой синтаксис. Путаться в форматах не стоит — они разные, но логика одна.
Строка C: и N: в CCcam.cfg
Файл конфигурации CCcam: /var/etc/CCcam.cfg или /etc/CCcam.cfg в зависимости от прошивки.
Строка C: — это подключение к другому CCcam-серверу (протокол CCcam). Строка N: — подключение по newcamd. Для CS378 протокол шаринга используется именно N::
N: myserver.example.com 378 myuser mypassword 01 02 03 04 05 06 07 08 09 10 11 12 13 14
Обратите внимание: в CCcam.cfg DES-ключ пишется через пробел — каждый байт отдельно. Это отличие от OScam, где ключ идёт сплошной строкой. Перепутать легко, и ошибка будет немой — CCcam просто не поднимет ридер.
Файл newcamd.list для MgCamd
MgCamd использует отдельный файл /var/keys/newcamd.list (путь может отличаться в зависимости от прошивки). Формат:
CWS = myserver.example.com 378 myuser mypassword 0102030405060708091011121314 { 0500:000000 }
Блок в фигурных скобках — необязательный, но полезный: он указывает CAID и ident для фильтрации. В MgCamd конфигурация может также лежать в файле mg_cfg — зависит от версии.
Отличия синтаксиса от OScam
Главное отличие — формат DES-ключа. В OScam: 28 hex-символов без пробелов. В CCcam: 14 пар через пробел. В MgCamd: 28 символов без пробелов, как в OScam. Это самый частый источник копипаст-ошибок, когда данные переносят между клиентами.
И ещё: в CCcam нет тонкой настройки CAID/ident прямо в строке N: — фильтрация делается через другие механизмы конфига, либо сервер сам ограничивает share.
Диагностика и типичные ошибки CS378
Когда ридер не работает, нужна методичная отладка, а не случайное тыкание настроек. Вот реальные сценарии, которые встречаются постоянно.
CONNECTED без ECM: проблема CAID/ident
Статус CONNECTED означает только одно: TCP-рукопожатие прошло, логин принят, карта ответила. Это не значит, что декодирование работает. Если каналы не открываются — смотрите в сторону несовпадения CAID или ident.
Частый случай: CAID в конфиге указан правильно (например, 0500 для Viaccess), но провайдер (ident) другой. ECM уходит на сервер, но сервер не находит нужного share для этого конкретного провайдера и возвращает ошибку. В логах OScam это выглядит как no matching reader или not found рядом с ECM-запросом.
Решение: уточнить у провайдера полный список CAID:ident, которые он отдаёт, и прописать их явно в параметре ident в oscam.server.
Ошибка bad DES key length
OScam прямо пишет в лог: bad DES key length. Причина одна — ключ не равен 28 hex-символам. Самые частые источники:
- Лишний пробел в начале или конце — часто появляется при копировании из письма или веб-формы
- Перенос строки — если ключ скопирован с переносом,
nanoили другой редактор может добавить символ\n - Ключ скопирован в формате CCcam (через пробелы) прямо в поле OScam
Проверяйте длину: echo -n "0102030405060708091011121314" | wc -c — должно быть 28.
Постоянные реконнекты и timeout
Если ридер постоянно переподключается — смотрите в две стороны. Первая: сервер разрывает соединение из-за лимита сессий. Большинство провайдеров разрешают одно одновременное подключение на аккаунт. Если вы запустили OScam и CCcam с одними и теми же данными — сервер будет кикать одно из соединений.
Вторая: фаервол или роутер режет TCP keepalive. Newcamd — долгоживущее TCP-соединение. Если между клиентом и сервером стоит NAT с агрессивным таймаутом (часто 30-60 секунд на дешёвых роутерах), соединение рвётся на уровне сети, а OScam об этом узнаёт только через inactivitytimeout. Решение — уменьшить inactivitytimeout до 15-20 секунд или включить TCP keepalive на уровне ОС.
Чтение логов OScam (loghistory, debug 255)
Нормально отлаживать CS378 без логов невозможно. Запустить OScam с максимальным дебагом:
oscam -b -d 65535 -l /tmp/oscam_debug.log
Или через веб-интерфейс: раздел Config → Debug, установить Debug Level в 255 или 65535. Лог пишется в /var/log/oscam/oscam.log или по пути из oscam.conf → параметр logfile.
Что искать в логе:
grep -E "login|ECM|CAID|reader|DES" /var/log/oscam.log | tail -50
Строки с login покажут успех или отказ авторизации. Строки с ECM покажут, приходят ли запросы и что с ними происходит. no matching reader — CAID/ident не совпадает. timeout — сетевая проблема или сервер не отвечает.
Как выбрать сервер CS378: критерии без рекламы
Когда нужно оценить качество подключения — не верьте никаким обещаниям на сайтах. Всё проверяется только практикой, и инструменты для этого уже встроены в OScam.
Стабильность и uptime соединения
Хороший сервер держит TCP-соединение без обрывов. Если ридер реконнектится чаще одного раза в несколько часов — это тревожный знак. В веб-интерфейсе OScam в разделе Readers видна статистика реконнектов. Нормальный показатель — ноль или единицы за сутки.
Тестовый период важен именно для этого. Один день — мало, смотрите поведение минимум 48-72 часа в разное время суток, включая прайм-тайм вечером.
Среднее ECM time и расстояние до сервера
ECM time — главный практический показатель. До 200 мс — отлично, переключение каналов мгновенное. 200-400 мс — приемлемо, небольшая задержка иногда заметна. Выше 500 мс — начинаются проблемы: зависания при переключении, иногда потеря кадров.
На ECM time влияет физическое расстояние до сервера, загрузка сервера и качество маршрутизации. Сервер в соседней стране обычно даёт меньше задержек, чем сервер на другом континенте. Но это не правило — маршрутизация интернета нелинейна.
Смотреть ECM time в OScam: веб-интерфейс → Readers → колонка Avg. ECM Time. Или в разделе Services для каждого конкретного канала.
Поддержка нужных CAID и локального экранирования
Перед тем как платить — убедитесь, что сервер реально отдаёт нужные вам CAID и ident. Уточните список у провайдера и сопоставьте с тем, что вам нужно декодировать. Несовпадение CAID — это не проблема настройки, это проблема выбора сервера.
Также стоит проверить, нет ли у провайдера ограничений по количеству одновременных подключений или по конкретным каналам. Это напрямую влияет на то, можно ли смотреть несколько каналов одновременно на разных ресиверах с одним аккаунтом.
CS378 — это отдельный протокол или newcamd?
Это подключение по протоколу newcamd525 на исторически закрепившемся порту 378. Самостоятельным стандартом CS378 не является — это просто устоявшееся название в сообществе. Под капотом всегда newcamd с 3DES-шифрованием.
Какой длины должен быть DES-ключ для CS378?
14 байт — это 28 шестнадцатеричных символов. Записывается без пробелов единой строкой. Ключ должен быть идентичным на сервере и клиенте. Пример правильного формата для OScam и MgCamd: 0102030405060708091011121314.
Ридер в статусе CONNECTED, но каналы не открываются — почему?
Чаще всего это несовпадение CAID или ident между тем, что запрашивает клиент, и тем, что реально есть на сервере. Также возможен лимит одновременных соединений — если аккаунт уже используется где-то ещё. Смотрите ECM time в веб-интерфейсе и grep по логам на no matching reader.
Можно ли использовать порт, отличный от 378?
Да, 378 — просто историческая конвенция. В параметре device в oscam.server или в строке подключения указывается фактический порт сервера. Это может быть 12000, 15000, 28000 или любой другой. Смотрите в данных доступа, которые выдал провайдер.
Где в OScam прописывается CS378-подключение?
В файле oscam.server, в секции [reader]. Параметры: protocol = newcamd, device = host,port, key = ваш DES-ключ. Путь к файлу зависит от прошивки: /etc/tuxbox/config/oscam.server, /var/keys/oscam.server или /etc/oscam/oscam.server.
Почему OScam пишет bad DES key length?
Ключ не равен ровно 28 hex-символам. Самая частая причина — лишний пробел или перенос строки при копировании. Проверьте: echo -n "ваш_ключ" | wc -c — результат должен быть 28. Также убедитесь, что ключ не в формате CCcam (14 пар через пробел) — в OScam такой формат не работает.