DLC ist ein kleines Programm zum Komprimieren von Listen von Domänen, die als Sperrlisten (Black lists) für DNS-Server fungieren.
Wer einen eigenen DNS-Server betreibt und Sperrlisten einpflegen will, um Werbung oder Wanzen zu entgehen, begegnet dem Problem, daß die meist automatisiert erzeugten Listen nur mangelhaft gepflegt sind. Es finden sich Doubletten oder überflüssige Third-Level-Domänen, insbesondere bei Quellen im Hosts-Format (die dort aber auch notwendig sind). Wenn der eigene DNS-Server Domänen jedoch inclusive Subdomänen sperren kann, also mit einem Eintrag für die Domäne ad.com auch die Subdomänen trk1.ad.com, trk2.ad.com etc. sperrt, sind viele Einträge unnötig, verschwenden Speicherplatz und kosten CPU-Zeit, was auf einem kleinen Router ärgerlich ist.
Hier setzt DLC an, indem es die Listen von doppelten Domänen und Sub-Domänen bereits erfaßter Domänen bereinigt und nach Top-Level-Domäne sortiert in dlcout.txt ausgibt. Dadurch ist oft eine Kompression auf 10-30% der Ausgangsgröße möglich:
src1.txt: | dlcout.txt: | |
# Tracker Domains trk1.ad.com trk2.ad.com newtrk.ad.com news.ad.com coll.ad.com ad.com trk.legit.com iad.g.legit.com | # dlc list from src1.txt ad.com trk.legit.com iad.g.legit.com |
Das Programm kann als Archiv heruntergeladen werden:
Empfehlenswert ist anschließend die Prüfung auf Virusfreiheit und Authentizität.
Weder Installation noch Deinstallation sind notwendig. Da sich das Programm nicht in Systemdateien einträgt, ist auch ein portabler Betrieb möglich. Das Programm kann in ein Verzeichnis der Wahl oder z. B. auf den Desktop kopiert werden.
Das Programm kann entweder im Explorer aufgerufen werden, indem zu komprimierende Listen markiert und auf dlc.exe gezogen werden, oder auf der Kommandozeile, wie hier nachfolgend am Beispiel mit drei Listen:
c:\data>dlc aa\pre.txt aa\01.txt ag\01.txt aa\pre.txt mit 1007 Domaenen: +1007 (100.00%). aa\01.txt mit 7038 Domaenen: +1404 (19.95%). ag\01.txt mit 577 Domaenen: +292 (50.61%). 8622 auf 2703 Domaenen (31.35%) in 15 ms komprimiert und nach dlcout.txt geschrieben.
DLC gibt für jede Quelldatei aus, wieviele Domänen sie enthält, den Zuwachs an gespeicherten Domänen (kann positiv sein, aber auch negativ für Dateien mit vielen generischen Domänen), die Kompression und eine Bilanz. Der Parameter -? gibt Hilfe:
c:\data>dlc -? Domaenenkompressor dlc v1.0 dlc liest die angegebenen Domaenenlisten ein und schreibt das komprimierte Ergebnis in dlcout.txt. Aufruf: dlc [-Option] Datei1 Datei2 Datei3 ... -? Diese Hilfe -d Ausgabe im DNSMasq-Format -v Ausfuehrlich -v -v Noch ausfuehrlicher
Die Quelldateien müssen im DNS-basiertem Textformat mit je einer Domäne pro Zeile vorliegen, wie es auch Pi-Hole, AdGuard, AdAway, DNS66 etc. verwenden kann. Dateien in anderen Formaten müssen vor Benutzung umformatiert werden, wie z.B:
Hosts: | TPL: | AdGuard-REGEX: |
# Tracker Domains 127.0.0.1 trk1.ad.com 127.0.0.1 trk2.ad.com 127.0.0.1 ad.com 127.0.0.1 trk.legit.com 127.0.0.1 iad.g.legit.com | -d ad.com -d trk.legit.com -d iad.g.legit.com | ! Tracker Domains ||ad.com^ ||trk.legit.com^ ||iad.g.legit.com^ ! Generic URLs *###/track.js |
Da DLC alle Subdomänen für eine gefundene Domäne entfernt, muss Software, die eine DLC-generierte Liste nutzt, jede Domäne samt Subdomänen sperren (z.B. dnsmasq).
Als Basis für eine zukünftige Hosts-Datei eignet sich eine mit DLC komprimierte Liste nicht, da in Hosts-Dateien (s.o.) jede Domäne separat gesperrt werden muß - als Basis für eine mit DLC zu komprimierende Liste (nach Formatkonversion) jedoch schon.
Enthält eine Quelldatei (hier src1.txt genannt) viele Domänen ohne übergeordnete Domäne, obwohl man auch auf diese gut und gerne verzichten könnte, wie z. B. in
# src1.txt
diff.adserver.com
eqx-secure.adserver.com
trk-sgp.tracker.com
diff3.adserver.com
qurt-global.tracker.com
itx4-secure.adserver.com
eqx.adserver.com
ssbsync-geo.tracker.com
ssb-us.tracker.com
empfiehlt sich eine Vorschaltliste (hier pre.txt genannt), deren Basis ebf. mit DLC erzeugt werden kann:
dlc src1.txt
Da DLC nach Top-Level-Domäne sortiert, sind schnell zusammengehörende Domänen gefunden …
diff.adserver.com
diff3.adserver.com
eqx-secure.adserver.com
eqx.adserver.com
itx4-secure.adserver.com
qurt-global.tracker.com
ssb-us.tracker.com
ssbsync-geo.tracker.com
trk-sgp.tracker.com
… werden händisch auf ihre übergeordnete Domänen verkürzt und als pre.txt abgespeichert …
# pre.txt
adserver.com
tracker.com
… und eliminieren im 2. Aufruf von DLC als Vorschaltliste die unnötigen Domänen, was die Ergebnisliste enorm komprimiert:
dlc pre.txt src1.txt src2.txt ...
Um schnell eine Sperrliste für DNSMasq, Version >= 2.8, zu bekommen, reicht:
dlc -d src1.txt
was
address=/adserver.com/
address=/tracker.com/
erzeugt.
In dnsmasq.conf kann dann mit dem Eintrag
conf-file=/path/to/dlcout.txt
die Sperrliste aktiviert werden.
Arbeitet man mit Adblock (adblock.sh) unter DD-WRT oder OpenWRT und hat DNSMasq als DNS-Backend, reicht:
dlc src1.txt
und das Kopieren von dlcout.txt nach /etc/adblock/adblock.blacklist oder das Einfügen des Inhaltes via GUI über die LuCI-Oberfläche (Services | Adblock | Edit Blacklist).