
If you have been involved in satellite TV for more than five minutes, you have already heard aboutcccam. It is a protocol for sharing conditional access smart cards — roughly speaking, one physical cartridge serves several receivers over the internet. For almost twenty years, it has become the de facto standard in this niche, despite the fact that official development has long ceased.
In this material, we will break everything down properly: how the protocol works at the packet level, what ECM and DCW are, how to set up a server from scratch on Debian, what a real CCcam.cfg looks like with an explanation of each line, and why in 2026 it is worth looking towards OScam.
What is CCcam and how does the protocol work
CCcam stands for simply — it is the name of the emulator and the protocol at the same time. Initially, it referred to software for receivers based on Linux that could read conditional access smart cards and share decryption keys over the network.
The history of CCcam's emergence
The protocol appeared around 2007 as a closed development by a German community of satellite TV enthusiasts. The first versions were almost completely illegal in terms of distributions — the binary was distributed without source code. By 2012, version 2.3.2 was released, which became the de facto last stable version. Development was frozen. But the protocol took root.
The reason is simple: by that time, the entire market of Enigma2 receivers already natively supported CCcam. Dreambox, VU+, Octagon — all of them can read /etc/CCcam.cfg out of the box. No one wanted to change that.
The principle of card sharing through CCcam
The working scheme is as follows. The satellite TV provider encrypts the video stream. Every 7-10 seconds, an ECM appears in the transponder stream — a packet with an encrypted decryption key. Only an authorized smart card with a valid subscription can decrypt this packet.
Without card sharing, your receiver inserts the card into the CI+ slot and does this locally. The CCcam server does the same, but the result — the decrypted DCW key — is sent over TCP to clients on the network. The client uses this key to decode the picture on their receiver.
All this happens in 100-300 milliseconds with a normal connection. Visually indistinguishable from a local card.
Client-server architecture
The server is a Linux machine (or a receiver with Linux) with a physical smart card. It listens for incoming TCP connections on port 12000 by default. The client connects, authenticates with a username/password, and then a persistent connection works: the client sends ECM requests, and the server returns DCW responses.
The protocol is binary, working over regular TCP. There is no encryption in standard CCcam — this should be understood when setting up security.
Differences between CCcam and other protocols (OScam, MGcamd, NewCS)
OScam — open source, active development, supports CCcam as one of the client connection protocols. It is currently being installed on serious servers.
MGcamd — a lightweight client, works well on weak hardware, but functionality is limited. Often used on old receivers with 64MB RAM.
NewCS — historically older than CCcam, support has effectively been dead since 2010. It is found only on very old builds.
CCcam in this lineup is mature, predictable, but closed. It works perfectly for the client side. For the server in 2026, there are better options.
Technical basics: ports, ECM, DCW, and hops
Without understanding these four things, troubleshooting turns into shamanism. Let's break down each element properly.
The standard CCcam port (12000) and why it is changed
Port 12000/TCP is the default that every scanner on the internet knows. Bots continuously search for open CCcam servers, trying to brute-force username/password pairs. If you leave 12000 — be prepared for thousands of connection attempts in the logs daily.
A good practice is to choose a port in the range of 20000-60000 that is not associated with any known service. This does not completely solve the problem, but significantly reduces noise.
What is ECM (Entitlement Control Message)
ECM is a data packet that is buried in the transport stream of the satellite signal. It arrives every 7-10 seconds (depends on the provider and encoding system — Viaccess, Nagra, Irdeto behave differently). It contains the encrypted Control Word — the very key used to decode the video.
Without an authorized card, this packet is just garbage. With a card — the server sends it to the physical chip, receives the decrypted response.
DCW (Decryption Control Word) — the decryption key
DCW is 16 bytes. Exactly what is needed to decode the current 7-10 second segment of the stream. After the period expires, the provider changes the key, and the client must receive a new DCW before the old one becomes outdated.
That is why the delay is critical. If the DCW arrives later than needed — the screen freezes for a second. This is the freeze that everyone is fighting against.
Hops — the depth of the sharing chain
Hop 1 = your client is directly connected to the server with a physical card. This is the ideal case. Time: ECM there + DCW back, only two network hops.
Hop 2 = there is another server between you and the physical card. The time doubles. Hop 3 triples. With good internet, hop 2 usually still works fine, hop 3 is already a gamble, hop 4 and above almost guarantees a freeze on any dynamically changing key provider.
The reason is technical: each server in the chain adds RTT. If your ping to the hop-2 server is 80ms, and its ping to the card is another 80ms — you already have 160ms just for the network, plus processing. With a key change period of 7 seconds, this is still tolerable. But stability drops sharply with any spikes in latency.
Reshare — rules for card resale
Reshare — this is a parameter in the F: line of the configuration file. It defines how many times a client can reshare the received line further. A value of 0 means that the client can only use the line themselves, but cannot share it with their clients. A value of 1 means they can share, but only as hop 2. And so on.
This is a control tool for server operators. If you want to limit the chain — set reshare 0 on all F: lines.
Installing and configuring a CCcam server on Linux
Installing CCcam on a server in 2026 is a bit archaic, to be honest. But if the task is to raise a classic CCcam daemon, here’s how to do it on Debian 11/12 or Ubuntu 22.04.
System requirements and OS preparation
Minimum: 256MB RAM, 1 CPU core, 1Gbit connection (or at least 100Mbit with good ping). Any VPS will do — the cheapest Hetzner CX11 for 4 euros will handle 50+ clients without problems. The main thing is the ping to your clients, not the computing power.
If you plan to connect a physical card via USB — you need a dedicated server or a home machine. VPS does not have USB ports. In this case, you will need a phoenix reader or SMARGO Smartreader+.
apt update && apt upgrade -y
apt install -y wget curl net-tools iptables
Installing the CCcam binary on Debian/Ubuntu
The official source of binaries is the satTV community forums. Version 2.3.2 or 2.3.8 — take 2.3.8 if you find it, it has fewer problems with memory leaks. The process is standard:
wget -O /usr/bin/CCcam https://[ваш-источник]/CCcam_2.3.8_linux_x86_64
chmod +x /usr/bin/CCcam
mkdir -p /var/etc /var/log
Checking that the binary starts:
CCcam --help
# или просто:
CCcam -v
Directory structure: /usr/bin/CCcam, /var/etc/
Standard file layout:
/usr/bin/CCcam— executable file/var/etc/CCcam.cfg— main config/var/log/CCcam.log— log file/var/keys/— SoftCAM keys (if used)
On Enigma2 receivers, the config usually lies in/etc/CCcam.cfg — this should be kept in mind when transferring configs between systems.
Starting as a systemd service
Creating the service file:
cat > /etc/systemd/system/cccam.service<< 'EOF'
systemctl daemon-reload
systemctl enable cccam
systemctl start cccam
systemctl status cccam
Setting up autostart and logging
Logs grow quickly. It's better to set up logrotate right away:
cat > /etc/logrotate.d/cccam << 'EOF'
/var/log/CCcam.log {
daily
rotate 7
compress
missingok
notifempty
postrotate
systemctl restart cccam > /dev/null 2>&1 || true
endscript
}
EOF
View the log in real time:
tail -f /var/log/CCcam.log
CCcam.cfg file: full structure and parameters
This is the heart of the entire system. One file controls everything — who connects to the server, who the server connects to, which cards are used. Let's break it down line by line.
SERVER LISTEN PORT and WEBINFO LISTEN PORT section
# Основные настройки сервера
SERVER LISTEN PORT : 12000
WEBINFO LISTEN PORT : 16001
TELNETINFO LISTEN PORT : 16000
# Лог
LOGFILE : /var/log/CCcam.log
LOGLEVEL : 1
SERVER LISTEN PORT — port for client connections. I recommend changing it to a non-standard one. WEBINFO LISTEN PORT — browser-based monitoring interface. TELNETINFO — text interface via telnet.
Lines C: (client connections) — syntax
Line C: defines the connectionof this server to the upstream server (where the lines come from):
C: hostname.example.com 12000 myusername mypassword
Format:C: [host] [port] [login] [password]
You can add multiple C: lines — the server will try to connect to each one. If the first is unavailable, it will switch to the next (fallback).
Lines F: (line issuance to clients) — username/password/hops/reshare
Lines F: — these are the accounts of your clients:
F: user1 SecurePass123 1 0
F: user2 AnotherPass456 2 1
F: admin AdminPass789 0 2
Format:F: [login] [password] [hops] [reshare]
Let's analyze the example:F: user1 SecurePass123 1 0
user1— client loginSecurePass123— password1— client receives the line as hop 1 (directly)0— client cannot reshare the line further
Second example:F: user2 AnotherPass456 2 1 — the client receives hop 2 and can distribute it to their clients as hop 3. For reseller schemes.
Parameter SERIAL READER and working with a physical card
If a phoenix reader or SMARGO is connected to the machine via USB/Serial:
SERIAL READER : /dev/ttyUSB0 PHOENIX CARDTYPE CLOCK 357
# Для smartreader:
SERIAL READER : /dev/ttyUSB0 SMARGO CARDTYPE CLOCK 357
Identify the device:dmesg | grep tty after connecting the reader. Usually this is/dev/ttyUSB0 or/dev/ttyACM0.
Control via DISABLE EMM, ALLOW TELNETINFO
DISABLE EMM : no
ALLOW TELNETINFO : yes
ALLOW WEBINFO : yes
EMM is Entitlement Management Message, a package for updating the card rights from the provider. If you setDISABLE EMM : yes — the card stops updating the subscription from the transponder. Sometimes this is needed to avoid blacklisting the card, but if the provider regularly updates the subscription keys — the card will lose access. By default, keepno.
ALLOW TELNETINFO : yes opens the telnet interface on port 16000 — convenient for diagnostics.
Configuring the CCcam client on the receiver and Linux
The client part is simpler than the server part. You need to place the config correctly and ensure that the daemon reads it.
Configuration on Enigma2 (Dreambox, Vu+, Octagon)
All Enigma2 boxes look for the config in/etc/CCcam.cfg or/var/etc/CCcam.cfg — depends on the image version. On OpenATV and OpenPLi, it is usually/etc/CCcam.cfg.
Minimum client config:
SERVER LISTEN PORT : 12000
C: your.server.com 12000 yourlogin yourpassword
After saving the file — restart the softcam:
/etc/init.d/softcam restart
# или через плагин Softcam Manager в GUI
Placing CCcam.cfg via FTP
Standard method: connect to the receiver via FTP on port 21, login root, password dreambox (or whatever is set). Copy the file to /etc/. FileZilla, WinSCP — it doesn't matter what to use.
Or via SSH directly:
scp CCcam.cfg [email protected]:/etc/CCcam.cfg
ssh [email protected] '/etc/init.d/softcam restart'
Configuration on OpenATV/OpenPLi
On OpenATV 7.x and OpenPLi 9.x the procedure is the same, but the softcam manager is called differently. Through the GUI: Menu → Plugins → Softcam → CCcam. After changing the config — a complete stop and start is mandatory, not just restart.
Connection via PC client (oscam-to-cccam)
On a Linux PC or server without Enigma2, it is more convenient to use OScam in CCcam client mode. In/etc/oscam/oscam.server:
[reader]
label = cccam_line1
protocol = cccam
device = your.server.com,12000
user = yourlogin
password = yourpassword
cccversion = 2.3.0
cccmaxhops = 2
Checking the SID/CAID of the active card
Via telnet on port 16000 (if ALLOW TELNETINFO is enabled):
telnet localhost 16000
# После подключения введите:
c
Commandc will show all connected cards with their CAID. Common values: 0500 — Viaccess, 0100 / 0102 — Seca/Mediaguard, 1810 / 1830 — Nagravision, 0B00 — Conax, 0D00 — Cryptoworks.
If your provider's CAID is in the list — the card sees the required channels. If not — the problem is not with CCcam, but with the subscription.
Troubleshooting: typical problems and solutions
This is where most articles end with "check the settings." Let's do it properly.
Freeze and stuttering image
The first diagnosis — check pingtime in the logs. Normal: up to 200ms. If you see 300-500ms regularly — the problem is in the network or overloaded server.
grep -i "ping\|delay\|timeout" /var/log/CCcam.log | tail -50
The second diagnosis — check hop. Through WebInfo on port 16001 in the browser, you can see the hop of each line. If it says hop 3 or higher — freeze will occur under any network load.
The third case: the card is local (hop 1), ping is normal, but still freeze. Check how many clients are simultaneously requesting ECM — the server may not keep up. Look:grep "ECM" /var/log/CCcam.log | wc -l
Server does not connect (connection refused)
Step-by-step diagnostics:
# 1. Демон вообще запущен?
pgrep -a CCcam
# 2. Слушает ли нужный порт?
ss -tlnp | grep 12000
# 3. Пробиваемся ли снаружи?
telnet your.server.com 12000
# 4. Проверяем firewall
iptables -L INPUT -n | grep 12000
If the port is listening locally but not reachable from the outside — 99% it's the firewall. Open:
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT
# или через ufw:
ufw allow 12000/tcp
If the server is behind NAT (home router) — port forwarding is needed in the router settings. If the provider uses CGNAT — port 12000 is completely unavailable from the outside, a VPN or SSH tunnel is needed.
Channels open for 5 seconds and then close
Classic symptom: the picture appears, freezes after 5-7 seconds, reappears for 5 seconds. The ECM request goes, DCW returns, but it's incorrect.
Reason 1: the card does not have a subscription for this package of channels. Check CAID and SID via telnet.
Reason 2: the provider updated the keys, the card did not receive EMM. Solution:
# В CCcam.cfg изменить:
DISABLE EMM : no
Restart the service and wait 10-15 minutes — the card should receive the update.
Errors in the logs: bad ECM, no card found
grep -i "error\|bad ecm\|no card\|failed" /var/log/CCcam.log | tail -100
bad ECM — the card received the request but could not process it. Usually, the CAID does not match or the card does not have the required service.no card found — there is neither a physical card in the system nor an upstream connection with the required CAID. Check the C: lines in the config and the upstream status in WebInfo.
High ping and large delay
If the ping to the server is normal (30-80ms), but CCcam shows delays of 400ms+ — the problem is in processing on the server side. Check the load:
top -p $(pgrep CCcam)
Old versions of CCcam (2.1.x) have a memory leak — after a few hours of operation, the process bloats and degrades. Solution: upgrade to 2.3.8 or switch to OScam. Or set up a cron job for a daily restart as a temporary workaround.
CCcam vs OScam: what to choose in 2026
If you are setting up a server from scratch today — use OScam. Period. But let's break down why, because CCcam is still not completely dead.
Advantages of OScam (open source, active development)
OScam is an open-source project that is still being developed today. The latest commits in the repository date back to 2024-2025. Support for readers — dozens of types, including PC/SC, SMARGO, phoenix, internal slots Enigma2.
OScam supports all current encryption systems: Viaccess 3.x, Nagravision 3, BISS, Conax, Cryptoworks, Irdeto — the list is constantly expanding. CCcam 2.3.2, released in 2012, works poorly with some modern systems.
The configuration of OScam is more complex (three separate files: oscam.conf, oscam.server, oscam.user), but more flexible. The WebUI is significantly more informative than that of CCcam.
Why CCcam is still popular
Inertia. Huge. Millions of configs have been written for CCcam. Enigma2 boxes natively run the CCcam daemon. Lines likeC: host port user passare known by everyone who has worked with satellite TV for over a year.
Moreover, CCcam is simpler for the client side. One config file, clear structure. For a user who just wants to connect a line to their receiver — CCcam.cfg is perfect.
Hybrid scheme: OScam server + CCcam protocol
This is the best of both worlds. OScam can accept clients using the CCcam protocol. In oscam.conf:
[cs357x]
port = 12000
[cs378x]
port = 15000
cs357x is the CCcam-compatible port. Clients with regular C: lines in CCcam.cfg connect to it without changes. They don’t even know that OScam is running on the server. And you get all the power of OScam: better logging, WebUI, support for modern readers.
Migration from CCcam to OScam: what to consider
When migrating, save all F: lines — they need to be transferred to oscam.user. The format is different, but the data is the same: login, password, hops, reshare (in OScam it is called reshare and is limited at the user level).
C: lines turn into oscam.server entries with protocol = cccam. The physical card moves to oscam.server with protocol = internal or serial.
After migration, CCcam clients will notice nothing — the protocol is compatible.
CCcam server security: what needs to be configured
Most public materials on CCcam ignore security. This is a mistake. An open server on port 12000 lives without problems for a couple of days, then it starts.
Changing the default port 12000
In /var/etc/CCcam.cfg:
SERVER LISTEN PORT : 43211
Choose a random port in the range of 20000-60000. This is not a panacea against targeted attacks, but it protects against automated scanners by 90%. In iptables, don't forget to open the new port and close 12000.
Complex passwords in F: lines:
NoF: user1 123456 1 0. Minimum 12 characters, mixed case, numbers, special characters. Example of a normal password:Kp9#mNx4$vRt. Generate:
openssl rand -base64 12
IP restriction in iptables
If you know the IP addresses of your clients (static or semi-static) — whitelist:
# Блокируем всё на CCcam-порту
iptables -A INPUT -p tcp --dport 43211 -j DROP
# Разрешаем только конкретные IP
iptables -I INPUT -p tcp --dport 43211 -s 1.2.3.4 -j ACCEPT
iptables -I INPUT -p tcp --dport 43211 -s 5.6.7.8 -j ACCEPT
Save the rules:iptables-save > /etc/iptables/rules.v4
Protection of the WebInfo panel
WebInfo on 16001 shows all your lines, clients, and cards. Do not expose it to the internet without protection. The best option is to completely close 16001 in iptables and create an SSH tunnel for access:
ssh -L 16001:localhost:16001 [email protected]
# Теперь http://localhost:16001 в браузере работает через туннель
Or set up an nginx reverse proxy with basic authentication in front of WebInfo.
Logs and monitoring of suspicious activity
Parse logs for mass connection attempts:
grep "connect" /var/log/CCcam.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -20
If one IP tries to connect hundreds of times — block it:
iptables -A INPUT -s [BAD_IP] -j DROP
For automation, you can use fail2ban with a custom filter for CCcam logs, although that is a separate story.
Frequently asked questions
What is CCcam in simple terms?
It is a network protocol that allows one smart card for conditional access to serve multiple receivers over the internet. The server with the physical card receives encrypted ECM requests from clients, decrypts them using the card, and returns the ready DCW key. The client uses this key to decode the satellite signal. Everything happens in 100-200 milliseconds — imperceptibly for the viewer.
What port does CCcam use by default?
The standard port is 12000 (TCP). WebInfo usually operates on 16001. The telnet interface for diagnostics is on 16000. It is recommended to change all three ports: 12000 is scanned automatically, and 16001 with open WebInfo shows your entire infrastructure to outsiders.
Where is the CCcam.cfg configuration file located?
On Enigma2 receivers (Dreambox, Vu+, Octagon) —/etc/CCcam.cfg or/var/etc/CCcam.cfg depending on the image. On a Linux server —/var/etc/CCcam.cfg or/usr/local/etc/CCcam.cfg. After updating the receiver's firmware, the path may change — this is a common reason why "everything stopped working" after an update.
What does hop mean in CCcam and why is it important?
Hop is the depth of the sharing chain. Hop 1 means your receiver is directly connected to the server with the physical card, resulting in minimal latency. Hop 2 means there is an intermediate server between you and the card, doubling the latency. At hop 3 and above, the risk of freeze increases sharply — each node in the chain adds RTT, and with a key change period of 7-10 seconds, this becomes critical.
How does CCcam differ from OScam?
CCcam is a closed protocol, development stopped around 2012 (the last version is 2.3.8). OScam is open-source with active development to this day. OScam supports more readers, works better with modern encryption systems, and has a powerful WebUI. At the same time, OScam is compatible with CCcam at the protocol level — clients with regular C: lines connect to the OScam server without changes.
Why do channels open and close after 5 seconds?
A classic symptom of an incorrect DCW. The server receives an ECM, returns a key, but the key does not fit — either the card does not have a subscription for this channel package, or the provider updated the EMM and the card did not receive the update. The first step: make sure that in CCcam.cfg it is set toDISABLE EMM : no, restart the server and wait 10-15 minutes. The second step: check the CAID of the required channel via telnet on port 16000.
Can I run a CCcam server on a regular VPS?
Yes, if you are receiving lines from a higher-level server via C: lines — any VPS will do. Minimum requirements: 256MB RAM, Debian 11/12 or Ubuntu 22.04, stable connection. If you plan to connect a physical smart card — a dedicated server with a USB port is needed, VPS is not suitable for this.
How to check if the CCcam line is working?
Three ways. First:telnet localhost 16000, the commandc — will show connected cards and hops. The second: open in the browserhttp://your-server:16001 — WebInfo with the full status of all lines and clients. Third:tail -f /var/log/CCcam.log — ECM requests and DCW responses are visible in real time, which immediately shows whether the key exchange is working.
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_sharing_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.