Как правильно читать лог mgcamd?
Как уже было написано в примере конфига mg_cfg выше - есть 2 способа. Либо заставить mgcamd писать лог файл прямо на самом ресивере, либо заставить mgcamd слать тот же лог по сети, скажем на ваш обычный компьютер.
В первом случае не понадобится никакого дополнительного софта, и для просмотра лога можно просто зайти на ресивер через Telnet или SSH и наблюдать за работой mgcamd в реальном времени, выводя содержимое файла на экран Linux командой
tail -f <имя-лога>. Хотя это кажется самым logичным способом, это не совсем так. Это неудобно, потому как во-первых, нужно коннектиться к ресиверу и работать с командной строкой Linux, а во-вторых, лог будет все время расти (хотя и медленно). Если его своевременно не стирать, то в один день просто забъёт всю флеш-память, а это лишние хлопоты.
Гораздо более удобней просто напросто наблюдать за логом с компьютера, который находится в локальной сети с ресивером, без каких либо логинов в сам ресивер. Для этого нужно просто установить параметр L: { 01 } как показано выше в примере mg_cfg и запустить на вашем компьютере бесплатную программку (просмотрщик сообщений syslog), которая будет принимать сообщения от mgcamd и выводить их в виде лога на экране компьютера.
Бесплатных программ для этой цели есть по крайней мере 2. На большинстве сайтов рекомендуют древнюю программу 3CSyslog, которую можно взять
здесь. Архив весит чуть меньше мегабайта и всё работает, в принципе ок. Хотя слишком уж эта программа древняя, без минимальных дополнительных функций. А самый главный её минус в том, что она показывает все сообщения "задом наперед", то есть самые новые сообщения всегда в самой верхней строке. Обычно это удобно, но вот в случае с mgcamd это как раз совсем неудобно (по крайней мере для тех, кто привык смотреть в обычный лог mgcamd). mgcamd выплёвывает в лог по нескольку сообщений на каждую смену CW/DW и этот "блок" сообщений отображается "задом наперед", что может затруднить понимание происходящего.
Рекомендую попробовать другую софтину, написанную нашим человеком, chewbacca c форума sat-expert.com. Для работы, правда, требуется библиотека .net 3.5 sp1, но работает гораздо лучше и совершенно бесплатно. Попробуйте, он проще и делает всё что нужно!
http://traysyslog.blogspot.com/
Принцип действия этого типа логирования очень простой. mgcamd посылает текстовые сообщения (используя протокол UDP) на IP адрес и порт 514 (стандартный порт для протокола Syslog), который вы установили в параметре L: { 01 } в файле /var/keys/mg_cfg. Программка на вашем компьютере принимает сообщения с этого порта и выводит на экран. Если программка на компьютере не запущена, сообщения просто будут "растворяться" вникуда без побочных эффектов для ресивера или вашего компьютера (это свойство протокола UDP). Так что такую настройку можно сделать постоянной и просто включать на компьютере Tray Syslog, если понадобится посмотреть отчего там вдруг не работает (или насколько правильно работает) шара.
Если вы только поменяли свой mg_cfg и прописали туда IP своего компьютера для отсылки лога, нужно перезапустить mgcamd. Это можно сделать перезагрузив ресивер или из панели NLB (зелёная кнопка, опция Restart EMU). Из командной строки Linux можно рестартануть mgcamd, запустив скрипт
/var/etc/start_cam
Что можно увидеть из лога?
Увидеть можно очень много! Для начала, собственно, старт mgcamd. В этом примере мы сделаем вид, что у нас прописано два разных сервера шары в newcamd.list. Первый сервер называется server1.com и у него порт 1234, второй - server2.com с портом 5678. Для логина на оба сервера используется имя username (пароль в логе не отображается). Итак, пример лога:
Код:
tuxbox mgcamd v1.31 by mixvt (compiled Oct 27 2008 23:09:59)
[mg] Net:1:7:2:2s Show ecm:1, emm:0 Up:0 Au:0 Dir:0 Osd:no:80:0 Cache:7 Log:1:192.168.1.1:514 Reread:0
[mg] Ecm cache time: 36000
Box type: ipbox9000
Conax.Key error 2: No such file or directory
Keys readed
[config] newcamd route = username:server1.com:1234
[config] newcamd route = username:server2.com:5678
newcamd keep alive: 300, incoming port: 12000
[mgcam] emm thread started
[mgcamd] tps update started.
/var/keys/tps.bin error 2: No such file or directory
[newcamd] Connecting to server1.com:1234...
[newcamd] Connecting to server2.com:5678...
[newcamd] Login to server1.com:1234 as username accepted (19ms)
[newcamd] Card data from server1.com:1234 (35ms):
Userid 72 caid 90F providers 1
Idents: 000000
[newcamd] Login to server2.com:5678 as username accepted (21ms)
[newcamd] Card data from server2.com:5678 (71ms):
Userid 189 caid 500 providers 5
Idents: 020910 025100 023b00 024400 021700
Отсюда уже сразу видно много интересного. Во-первых, видны карты, которые шарятся (число сразу за "caid"). Вот список наиболее часто используемых кодировок:
01xx=Seca
05xx=Viaccess
06xx=Irdeto
09xx=NDS/Videoguard
0Bxx=Conax
0Dxx=CryptoWorks
17xx=BetaCrypt
18xx=NagraVision
26xx=BISS
4Axx=DreCrypt (который mgcamd обзывает как @Sky в своих логах)
Из примера выше видно, что мы подключились к двум серверам. Первый шарит карточку с кодировкой NDS/Videoguard (потому что CAID начинается с 9), а второй сервер шарит карту в кодировке Viaccess (CAID начинается с 5). При чём, второй сервер шарит даже не одну, а "пять карточек" - это становится ясно из поля Idents. Посмотреть на все возможные CAID:Idents можно в ваших настройках в биллинге.
Получается, что при включении кодированного канала, у него должен совпасть CAID и IDENT с теми, что прислал сервер при подключении к нему.
Только в этом случае на сервер пойдет запрос. mgcamd отошлёт на сервер так называемую последовательность Entitlement Control Message или ECM. Если на сервере всё впорядке, то он должен ответить на такой запрос последовательностью, которая называется Control Word или CW. Если вы получаете правильный код CW, то канал открывается. В зависимости от системы кодирования интервал смены ECM (живучесть ключа) может быть от 2-3 секунд до целой минуты.
Посмотрим как это выглядит в логе (важные цифры выделены):
Код:
[mg0] stoping camd..
[mg0] service 18A6 index 0 pmt pid 0 (65)
ECM: CaID: 0x090F -> CaPID: 0x18AF ProvID: 000000
[mg0] -> ECM to server1.com:1234
[mg0] <- CW from server1.com:1234 (230ms)
[mg0] 23 msec -- Sat Jan 31 15:09:42 2009
===== NDS ECM on CaID 0x090F, pid 0x18af ======
prov: 000000
cw0:0 09 8E E9 80 5E 2B 14 9D
cw1:0 CE 0A 98 70 66 C0 E9 0F
Пояснение к происходящему: первые две строки - это стандартное сообщение при переключении канала. Дальше имеем строку, начинающуюся с ECM. В ней информация о текущем канале. Из этого видно, что канал, который мы только что включили кодированный и открывается только одной картой, которая имеет пару CaID:ProvID = 090F:000000. Это как раз подходит по параметрам к тому, что нам ответил сервер server1.com при подключении к нему. По этому следующая строка - это посылка ECM-запроса на сервер server1.com. Далее виден ответ от сервера с кодом CW. Ответ пришел за 230мс, на что стоит обратить внимание (но об этом ниже, когда речь пойдёт о проблемах с шарингом). Последние 4 строки - подтверждение проделанной работы по запросу на сервер. Показаны кодировка, которая окрылась (NDS), идентификатор карты (CaID), идентификатор канала (PID), идентификатор провайдера (ProvID) и, наконец, сама последовательность CW0+CW1, то есть "ключик" к каналу, полученный от сервера. Дальше всё повторяется снова и снова, каждый раз когда меняется ECM.
Естеcтвенно, это всё лог "в идеале", то есть, когда всё правильно настроено, хорошо работает Интернет и на сервере шары тоже всё ок. Проблемные ситуации рассмотрены ниже, а сейчас, поскольку вы умеете теперь читать лог, речь пойдет о настройке файлов priority.list и ignore.list.