ja, und da würde ich den obersten nehmen, der filtert bösartige Domains raus und überprüft dir Echtheit von Domains via DNSSEC.
Pi Hole?
-
-
Seinen kompletten Netzwerktraffic durch Tor zu jagen, ist keine gute Idee. Deine Anonymität wird dadurch sehr schnell aufgehoben: Meldest Du Dich bei Facebook oder sonstwo an, ist Dein Account der Tor-Session zuzuordnen. Wenn Du also nur an einer Stelle im Traffic einen Hinweis auf Deine Identität hinterlässt, ist Dir die ganze Session zuzuordnen. Tor ist nur dann wirksam, wenn man es nur dann/dort einsetzt, wenn man wirklich anonym bleiben möchte.
[...]
Tor ist auch dann wirksam, wenn man Dienste nutzen kann, die man ohne Tor nicht nutzen könnte. Das ist ebenfalls ein valider Einsatzzweck.
-
Tor ist auch dann wirksam, wenn man Dienste nutzen kann, die man ohne Tor nicht nutzen könnte. Das ist ebenfalls ein valider Einsatzzweck.
Du meinst Dark Net/.onion-Adressen oder in diversen Ländern geblockte Inhalte? Jo. Nur üblicherweise will man bei denen anonym bleiben, und damit gilt wieder mein voriges Posting
-
Du bist für deine Unterdrücker im eigenen Land ja auch anonym. Die exit node sieht halt was du machst. Die sollte nicht neben dir stehen.
-
Mir geht es nicht um kompromittierte Exit Nodes. Die würden a) nur bei unverschlüsseltem Traffic etwas mitlesen können, und b) würde Tor Dir eh wieder keine Wirkung entfalten, wenn sie "neben Dir" stünden, denn dann wären sie ja wieder im blockierten Netzabschnitt.
Mir geht's darum, dass über Trafficanalysen des Netzwerks "vor Tor" und "hinter Tor" Sessions identifiert werden können. Mit dieser Information kann dann an auskunftsfreudige Unternehmen, bspw. Facebook und co herangegangen werden und die Identifizierung eingefordert werden - zack, ist die ganze Session deanonymisiert.
Das wird wohl nur relevant sein für Geheimdienstrelevante Aktivitäten, Dissidenten etc... Aber gerade um die ging es Dir ja. Gerade DIE sollten Tor exakt nur dann einsetzen, wenn sie ihre "verbotenen" Aktivitäten ausführen, damit es auf keinen Fall einen Identitätsleak gibt.Auch Torproject selbst rät ganz klar von transparenten Tor-Proxys ab: https://trac.torproject.org/projects/tor/w…ransparentProxy
-
Ist gut.
-
Soda, ich habe mein hosts-Generator Skript jetzt von UNIX auf Windows portiert, und maßgeblich verbessert sowie fehlerbereinigt. Sofern das halt noch irgendjemand über die hosts Datei versuchen möchte.
Blacklistquellen sind in etc\hosts-blacklistsources einzutragen, Server die auf die Whitelist sollen in etc\hosts-whitelist. Falls man in seiner hosts Datei noch andere spezielle Einträge außer die localhost-Zeile braucht, so sind diese in etc\hosts-header einzutragen, jeweils mit einem einfachen Texteditor.
Das Skript ist jedoch groootttenlangsam, weil die Batch nicht gut mit großen Arrays umgehen kann. Es empfiehlt sich, das Ding über Nacht laufen zu lassen. Ich denke es rennt um Faktor 10-20 lahmer als die UNIX Version.
Benötigte Zusatztools aus der UNIX/Linux Welt liegen bei.
Wird wahrscheinlich auch noch Bugs haben. Die Ausgabedatei heißt derweilen einfach "hosts-addendum". Gedacht ist das so, daß man damit die originale hosts Datei einfach überschreiben können sollte.
Ein Wort der Warnung: Die angehängte Datei hat zwar eine .zip Endung, damit ich sie hier habe hochladen können, es handelt sich aber in Wahrheit um eine moderne .7z Datei. Es sei also 7-zip zu nutzen, um das Ding zu öffnen. (Mit ZIP bin ich nicht unter die geforderten 3.1MB gekommen, auch mit LZMA nicht).
Quellcode:
Code
Display More@ECHO OFF REM ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: REM :: :: REM :: A generator, that downloads online DNS blacklists, strips them of :: REM :: unnecessary information, removes duplicates and generates a final :: REM :: "hosts" file for use in %WINDIR%\system32\drivers\etc\ or /etc/. :: REM :: :: REM :: This script is © 2019 GrandAdmiralThrawn aka Michael Lackner and is :: REM :: licensed under the GNU General Public License 3.0. :: REM :: :: REM :: Things for the user to add/change: :: REM :: ================================= :: REM :: 1. The blacklist source servers : etc/hosts-blacklist :: REM :: Add blacklist URLs to this file to include them in the hosts :: REM :: file. :: REM :: 2. The host whitelist : etc/hosts-whitelist :: REM :: Add domains to exclude from blocking. :: REM :: 3. The hosts file header : etc/hosts-header :: REM :: If you need specific hosts in your hosts file in addition to :: REM :: localhost, add them here. :: REM :: :: REM :: Licensing: :: REM :: ========= :: REM :: • The CygWin companion libraries ('cygffi6.dll', 'cyggcc_s-1.dll', :: REM :: 'cyggmp-10.dll', 'cyggnutls-28.dll', 'cyghogweed-2.dll', :: REM :: 'cygiconv-2.dll', 'cygidn-11.dll', 'cygintl-8.dll', :: REM :: 'cygnettle-4.dll', 'cygp11-kit-0.dll', 'cygpcre-1.dll', :: REM :: 'cygpsl-5.dll', 'cygtasn1-6.dll', 'cygunistring-2.dll', :: REM :: 'cyguuid-1.dll', 'cygwin1.dll' & 'cygz.dll' are licensed under :: REM :: the GNU General Public License 3.0. :: REM :: Project: https://cygwin.org :: REM :: Sources: git://sourceware.org/git/newlib-cygwin.git (current) :: REM :: :: REM :: • bg is © carlos and is not licensed under any specific license. :: REM :: Sources: https://code.google.com/p/bg-tool :: REM :: :: REM :: • GetTitle is © Rob van der Woude and is not licensed under any :: REM :: specific license. :: REM :: Project: :: REM :: https://www.robvanderwoude.com/csharpexamples.php#GetTitle :: REM :: Sources: :: REM :: https://www.robvanderwoude.com/sourcecode.php?src=gettitle_cs :: REM :: :: REM :: • The GNU tools sed & wget as well as the coreutils sort & uniq are :: REM :: licensed under the GNU General Public License 3.0. :: REM :: Projects: https://www.gnu.org/software/coreutils/ :: REM :: https://www.gnu.org/software/sed/ :: REM :: https://www.gnu.org/software/wget/ :: REM :: Sources : https://ftp.gnu.org/gnu/coreutils/ :: REM :: http://ftp.gnu.org/gnu/sed/ :: REM :: https://ftp.gnu.org/gnu/wget/ :: REM :: :: REM :: • unix2dos is © 1994-1995 Benjamin Lin as well as © 2009-2015 Erwin :: REM :: Waterlander and is licensed under the 2-Clause BSD License. :: REM :: Project: http://dos2unix.sourceforge.net/ :: REM :: Sources: git://git.code.sf.net/p/dos2unix/dos2unix (Current) :: REM :: :: REM :: License texts can be found in the subfolder "licensing\". :: REM :: :: REM ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: SETLOCAL EnableDelayedExpansion EnableExtensions REM : File to write the hosts list to SET "targetFile=hosts-addendum" REM : File containing the hosts file header (usually just the localhost line) SET "headerFile=etc\hosts-header" REM : File containing the blacklist source servers SET "blacklistFile=etc\hosts-blacklistsources REM : File containing whitelisted hosts SET "whitelistFile=etc\hosts-whitelist REM :: Define wget program and environment SET "wgetPrg=bin\wget.exe" SET "SYSTEM_WGETRC=%~dp0\etc\wgetrc" SET "syswgetrc=%~dp0\etc\wgetrc" REM : Define stream processor program SET "sedPrg=bin\sed.exe" REM : Define EOL converter program SET "eolPrg=bin\unix2dos.exe" REM : Define sorting program SET "sortPrg=bin\sort.exe" REM : Define deduplication program SET "dedupPrg=bin\uniq.exe" REM : Define GetTitle program SET "getTitlePrg=bin\GetTitle.exe" REM : Define file content pattern matching program SET "matchFPrg=%WINDIR%\system32\findstr.exe" REM : Define regular pattern matching program SET "matchPrg=%WINDIR%\system32\find.exe" REM : Define a nifty tool that allows us to print a single newline character SET "nLPrg=bin\bg.exe" REM : Initialize list of hosts SET "hostList[0]=" REM : Generate a carriage return character (we'll need that later to do REM : online status updates) FOR /F %%G IN ('COPY /Z "%~dpf0" NUL') DO SET "cR=%%G" REM :: Get current window title in a cross-language portable way FOR /F "tokens=1 delims=-" %%H IN ('%getTitlePrg% /NC /NP') DO SET "cmdTitle=%%H" SET "cmdTitle=%cmdTitle:~0,-1%" REM :: Read blacklist sources from file and strip empty lines from it first REM :: (e.g. in cases where there is a linebreak at EoF) "%sedPrg%" -e /^^^^$/d -i ".\%blacklistFile%" SET "CNT0=0" FOR /F "usebackq tokens=*" %%J IN (.\%blacklistFile%) DO ( SET "serverList[!CNT0!]=%%J" SET /A "CNT0+=1" ) REM :: Read whitelisted servers from file. These are hosts which appear on REM :: certain blacklists, but are very likely to cause false positives. REM :: Sites added to whitelistHosts[] will not be blocked. Also, strip empty REM :: lines from it first (e.g. in cases where there is a linebreak at EoF). "%sedPrg%" -e /^^^^$/d -i ".\%whitelistFile%" SET "CNT1=0" FOR /F "usebackq tokens=*" %%J IN (.\%whitelistFile%) DO ( SET "whitelistHosts[!CNT1!]=%%J" SET /A "CNT1+=1" ) REM :: Remove target hosts file if present (don't report useless errors, just REM :: because the file isn't already there) DEL /F /Q "%targetFile%" 2>NUL REM :: Walk through all online blacklists, fetch & process them, and then generate REM :: a final output hosts file (we're using a stupid GoTo loop, because it's hard REM :: to handle a loop over an array of undefined length in Batch) SET /A "CNT0-=1" & REM : Reduce counter as it's overshot by one SET /A "CNT1-=1" & REM : Reduce counter as it's overshot by one FOR /L %%K IN (0,1,%CNT0%) DO ( "%wgetPrg%" --no-check-certificate "!serverList[%%K]!" --output-document ".\%%K.txt" REM :: Process and modify list format where necessary TITLE Formatting blacklist #%%K/!CNT0! ECHO Formatting blacklist #%%K/!CNT0! ^(This takes some time...^) REM : Strip 0.0.0.0 ECHO. 1. Stripping "0.0.0.0" strings... "%sedPrg%" -e s/0\.0\.0\.0//g -i ".\%%K.txt" REM : Strip 127.0.0.1 ECHO. 2. Stripping "127.0.0.1" strings... "%sedPrg%" -e s/127\.0\.0\.1//g -i ".\%%K.txt" REM : Strip comments ECHO. 3. Stripping comments... "%sedPrg%" -e s/\#.*//g -i ".\%%K.txt" REM : Strip all whitespaces ECHO. 4. Stripping all kinds of whitespaces... "%sedPrg%" -e s/[[:space:]]//g -i ".\%%K.txt" REM : Strip empty lines ECHO. 5. Stripping empty lines... "%sedPrg%" -e /^^^^$/d -i ".\%%K.txt" REM :: Strip localhost lines (and other known useless ones) ECHO. 6. Stripping localhost lines... "%sedPrg%" -e /.*localhost.*/d -i ".\%%K.txt" ECHO. 7. Stripping other unnecessary lines... "%sedPrg%" -e /.*MalvertisinglistbyDisconnect.*/d -i ".\%%K.txt" REM : Strip all lines containing IPv6 addresses ECHO. 8. Stripping all IPv6 addresses... "%sedPrg%" -e /.*:.*/d -i ".\%%K.txt" REM :: Strip whitelisted servers (again, with a GoTo loop, because we don't REM :: the lists' size) ECHO. 9. Stripping whitelisted servers so they won't be blocked... & ECHO. FOR /L %%L IN (0,1,!CNT1!) DO ( "%sedPrg%" -e /.*!whitelistHosts[%%L]!.*/d -i ".\%%K.txt" ) REM :: Convert line breaks from UNIX (\n) to Windows (\r\n) format for further REM :: processing "%eolPrg%" ".\%%K.txt" REM :: Read host names into array for current blacklist SET "CNT4=0" TITLE Counting line numbers of blacklist #%%K/!CNT0! ECHO. & ECHO Counting line numbers of blacklist #%%K/!CNT0! ^(This takes a few seconds^) REM : Counting line numbers is exceptionally fast when using findstr.exe + find.exe FOR /F "tokens=* usebackq" %%X IN (`%matchFPrg% /R /N "^" ".\%%K.txt" ^| %matchPrg% /C ":"`) DO SET "count=%%X" TITLE Reading blacklist #%%K/!CNT0! into array ECHO. & ECHO Reading blacklist #%%K/!CNT0! into array ^(This takes some time...^) & ECHO. FOR /F "usebackq tokens=*" %%M IN (.\%%K.txt) DO ( SET "hostList[!CNT4!]=%%M" SET /A "CNT4+=1" <NUL SET /P"=Reading line !CNT4!/!count!!cR!" ) "%nLPrg%" Print \n REM :: Loop over host list and append the hosts to the target file in the REM :: proper output format TITLE Appending blacklist #%%K/!CNT0! to target file ECHO. & ECHO Appending blacklist #%%K/!CNT0! to target file ^(This takes some time...^) & ECHO. FOR /L %%N IN (0,1,!CNT4!) DO ( IF NOT "!hostList[%%N]!"=="" ECHO 0.0.0.0 !hostList[%%N]!>>"%targetFile%" <NUL SET /P"=Appending line %%N/!count!!cR!" ) "%nLPrg%" Print \n ECHO. ) REM :: Remove duplicates from list in a temporary copy TITLE Removing duplicates from target file ECHO. & ECHO Removing duplicates from target file. & ECHO. MOVE /Y "%targetFile%" "%targetFile%.dedup" REM : Write header (usually just the localhost line) to target file TYPE "%headerFile%">"%targetFile%" & ECHO.>>"%targetFile%" REM : Create deduplicated host list and write to target file TYPE "%targetFile%.dedup" | "%sortPrg%" | "%dedupPrg%" >>"%targetFile%" REM :: Let's clean up our trash DEL /F /Q "%targetFile%.dedup" DEL /F /Q "*.txt" REM : Reset cmd window title to what it was in the beginning TITLE %cmdTitle% ENDLOCAL EXIT /B 0
Edit: Grade gesehen, die Inline-Kommentare machen Probleme (also die "& REM ..." Teile). Die müssen noch raus bevor das funktioniert. Mache ich dann später noch.
Edit 2: Werde noch einen Counter einbauen, damit man auf der Shell sieht, wie er die Zeilen der aktuellen Blacklist verarbeitet. Nicht daß man nur auf eine Shell schaut die scheinbar nichts tut und meint sie wäre "steckengeblieben".
Edit 3: Wichtigste Bugs behoben, Fortschrittsanzeige für besseres Feedback zum Nutzer eingebaut...
-
Es gab ein neues Update - FTL Version. Habe es eben installiert, Pi neugestartet und nix ging mehr
Habe das Teil dann vom Router genommen und extern an einen Monitor angeschlossen, da konnte ich sehen dass das Teil im Boot immer hängen geblieben ist. Fragt mich nicht warum
Habe im Netz nach ner Lösung gesucht, auch was gefunden aber das hat mich nicht weiter gebracht.
Jetzt habe ich nochmal alles neu gemacht, gut ne Stunde bei drauf gegangen. Naja, jetzt läuft wieder alles, über QUAD9 und an ein paar Listen von LoB habe ich mich auch bedient. Sind jetzt 660.000 Domains die geblockt werden.
Zwischendurch musste ich wieder über Standard DNS ins Netz und dabei ist mir der Unterschied extrem aufgefallen - PiHole wird in meinem privaten Netzwerk immer ein Bestandteil sein. Ich kann es echt nur empfehlen
-
Ich werde jedenfalls weiter an einer hosts-Datei basierten Alternative basteln, einfach weil ich keinen RPi habe (und zu faul bin mir einen hinzubasteln). Bin jedoch zu dem Schluß gekommen, daß mein Skript oben der pure Scheißdreck ist, weil es für ~800k Hosts fast einen Tag braucht, um die verflixte Liste zu bauen und zu deduplizieren. Habe heute Zeit mit einer Restrukturierung des Quellcodes verbracht, und jetzt läuft er ca. 50-100 Mal so schnell (da sieht man Mal wieder, wieviel Schaden ein scheissiger Programmierer anrichten kann mit seinem Müll
), jetzt sind's ein paar Minuten statt vieler Stunden.
Ist aber noch nicht fertig... Vielleicht morgen.
Soll ich das überhaupt noch hier reinposten? Das Interesse scheint sich ja gut um den Gefrierpunkt zu bewegen. -
Ich bin ehrlich - wenn ich das Gerät nicht zufällig hier liegen gehabt hätte, dann hätte ich auch versucht über Software zu blocken. Einfach aus Faulheit!
Aber jetzt kann ich dir sagen es lohnt sich so ein Gerät anzuschaffen
Also ich habe mir dein Skript schon geladen
, einfach um anderen Leuten (die keinen PiHole haben) zuzeigen wie der Unterschied so ist. Bin aber aus Faulheit auch noch nicht zum testen gekommen
-
Solltest auch nicht testen! Denn das Ding ist nicht nur lahm, sondern broken!
Auch wenn's nur aus Neugierde ist, bitte warten bis ich fertig bin. Das da oben ist defekter (und stellenweise schlecht durchdachter) Schrott...
-
Ich glaube zwar, dass dir das klar ist, GAT, aber du kannst PiHole theoretisch überall installieren
Wenn du irgendwo z.B. ne Debian-VM hast, kannst du das Install-Script einfach starten und ab geht's.
Ich sag's nur, wegen deiner Aussage "einfach weil ich keinen RPi habe".
Edit: Das FTL-Update habe ich auch gemacht, ich hatte aber keine Probleme. Läuft nach wie vor alles.
-
Leider bin ich jetzt davon besessen, dieses Batch Skript perfektionieren zu müssen. Nice wäre, wenn man PiHole direkt auf Windows laufen lassen könnte. Eine Linux VM nur für DNS ist mir zuviel Ballast, auch wenn man's schlank hält. Hm, ich könnte ja meinen Transmeta Thinclient zum PiHole machen, aber das vielleicht irgendwann später Mal.
-
Ich habe gerade mal aus Neugierde geschaut was die günstigste Form ist, ein PiHole zu betreiben.
https://www.friendlyarm.com/index.php?rout…&product_id=132
Da könnt man tatsächlich überlegen, nochmal downzugraden und den poptenten RasPi für was sinnvolleres zu nutzen, wie zB RetroPi
-
Ich werde jedenfalls weiter an einer hosts-Datei basierten Alternative basteln, einfach weil ich keinen RPi habe (und zu faul bin mir einen hinzubasteln).
Ich behaupte, Du hast jetzt schon mehr Zeit in Deine eigene Lösung gesteckt als das Aufsetzen des Pihole gekostet hätte.
Das was pi-hole.net da in seiner Titelteile hat:
curl -sSL https://install.pi-hole.net | bash
...ist tatsächlich die vollständige Installationsanweisung.
Avenger: Das FTL-Update habe ich auch bekommen, hatte bei mir Gott sei dank keine negativen Auswirkungen. -
Hmm, du wirst ziemlich sicher Recht haben. Nur muß ich einen RPi auch erst Mal kaufen, auf den warten, dann aufsetzen, ich brauch noch eine Netzwerkdose (Ich glaub mein Switch ist voll mittlerweile), ich muß meinen DHCPd rekonfigurieren, alles Tasks die zwar nicht so aufwendig und kostenintensiv sind, aber...
...sie interessieren mich einfach nicht!
Das perverse, masochistische Kämpfen gegen die vollends entstellte Shellsprache namens WinBatch hingegen hat für mich einen ganz eigenen Reiz.
-
... und das ist am Ende die Hauptsache: Dass man etwas macht, was einen interessiert und einem Spaß macht
-
Hehe ich kann GAT voll verstehen - hauptsache man hat eine Nuß zu knacken.
Selbst als PiHole monatelang bei meinem alten Anschluss (Telekom Hybrid) nicht wirklich sauber lief, habe ich das Projekt nie fallen lassen und hab' getestet und gebastelt, ob ich es doch noch zum Laufen bekomme.
Auch so Geschichten wie "PiHole über VPN erreichen" nutze ich im Alltag ehrlich gesagt nie - aber es einzurichten, und dabei auch noch n bisschen Debian zu lernen, macht einfach nur tierisch Spaß
Und siehe da: inzwischen habe ich auch auf Arbeit etwas mit Linux am Hut, und schon kommen mir die "PiHole-Experimente" auch im Job zu Gute.
Ich seh's schon, es dauert nicht mehr lange und GAT veröffentlicht auf Github sein "Win2000Hole"
-
Bei mir ist es aktuell Pihole DNS-over-Tor. Ich hab schon drei erfolglose Anläufe (bzw. halb-erfolgreiche), aber ich geb nicht auf. VERMUTLICH werde ich das am Ende nicht mal einsetzen, weil mir der Performance-Impact zu nervig sein wird, aber ich wills zumindest mal getestet haben.
-
Sodalla, endlich ist der Mist halbwegs betriebsbereit und besser getestet. Nicht mehr so "Release before testing".
Das hosts-Generator Skript läuft übrigens auf Windows 7 einen Tick schneller als auf Windows XP, obwohl die Bremse hauptsächlich sed.exe sein müßte. Aber is einfach so.
Leider ist die Datei nun knapp zu groß, um sie direkt bei VA hochzuladen, daher hier ein Link dazu: [Poor Man's PiHole for Windows].
Habe GNU sort herausgenommen, da Microsoft so ein Tool selbst mit Windows mitliefert, ausreichend fähig für das was ich brauche. Zusätzlich dazu wurde wget durch curl ersetzt, weil das eine bessere Fehlerbehandlung ermöglicht (wenn z.B. der Server beim Laden einer Blacklist ein 404 o.ä. zurückgibt).
Die wahnwitzigen Pseudoarrays sind jetzt gestorben, die waren sowieso völlig unnötig - das war ein Denkfehler auf meiner Seite.
Quellcode vom Skript selber:
Code
Display More@ECHO OFF REM ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: REM :: :: REM :: A generator, that downloads online DNS blacklists, strips them of :: REM :: unnecessary information, removes duplicates and generates a final :: REM :: "hosts" file for use in %WINDIR%\system32\drivers\etc\ or /etc/. :: REM :: :: REM :: This script is © 2019 GrandAdmiralThrawn aka Michael Lackner and is :: REM :: licensed under the GNU General Public License 3.0. :: REM :: :: REM :: Things for the user to add/change: :: REM :: ================================= :: REM :: 1. The blacklist source servers : etc/hosts-blacklist :: REM :: Add blacklist URLs to this file to include them in the hosts :: REM :: file. :: REM :: 2. The host whitelist : etc/hosts-whitelist :: REM :: Add domains to exclude from blocking. :: REM :: 3. The hosts file header : etc/hosts-header :: REM :: If you need specific hosts in your hosts file in addition to :: REM :: localhost, add them here. :: REM :: :: REM :: Licensing: :: REM :: ========= :: REM :: • The CygWin companion libraries ('cygffi6.dll', 'cyggcc_s-1.dll', :: REM :: 'cyggmp-10.dll', 'cyggnutls-28.dll', 'cyghogweed-2.dll', :: REM :: 'cygiconv-2.dll', 'cygidn-11.dll', 'cygintl-8.dll', :: REM :: 'cygnettle-4.dll', 'cygp11-kit-0.dll', 'cygpcre-1.dll', :: REM :: 'cygpsl-5.dll', 'cygtasn1-6.dll', 'cygunistring-2.dll', :: REM :: 'cyguuid-1.dll', 'cygwin1.dll' & 'cygz.dll' are licensed under :: REM :: the GNU General Public License 3.0. :: REM :: Project: https://cygwin.org :: REM :: Sources: git://sourceware.org/git/newlib-cygwin.git :: REM :: :: REM :: • bg is © 2010-2014 Carlos Montiers Aguilera and is licensed under :: REM :: the 2-Clause BSD License. :: REM :: Sources: https://code.google.com/p/bg-tool :: REM :: :: REM :: • ConSetBuffer from the ConUtils is © 2001 Frank P. Westlake and is :: REM :: licensed under the ConUtils Freeware License. :: REM :: Project: http://ss64.net/westlake/nt/index.html :: REM :: :: REM :: • GetTitle is © Rob van der Woude and is not licensed under any :: REM :: specific license. :: REM :: Project: :: REM :: https://www.robvanderwoude.com/csharpexamples.php#GetTitle :: REM :: Sources: :: REM :: https://www.robvanderwoude.com/sourcecode.php?src=gettitle_cs :: REM :: :: REM :: • The GNU tools sed & wget as well as the coreutil uniq are :: REM :: licensed under the GNU General Public License 3.0. :: REM :: Projects: https://www.gnu.org/software/coreutils/ :: REM :: https://www.gnu.org/software/sed/ :: REM :: https://www.gnu.org/software/wget/ :: REM :: Sources : https://ftp.gnu.org/gnu/coreutils/ :: REM :: http://ftp.gnu.org/gnu/sed/ :: REM :: https://ftp.gnu.org/gnu/wget/ :: REM :: :: REM :: • unix2dos is © 1994-1995 Benjamin Lin as well as © 2009-2015 Erwin :: REM :: Waterlander and is licensed under the 2-Clause BSD License. :: REM :: Project: http://dos2unix.sourceforge.net/ :: REM :: Sources: git://git.code.sf.net/p/dos2unix/dos2unix :: REM :: :: REM :: License texts can be found in the subfolder "licensing\". :: REM :: :: REM ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: SETLOCAL EnableDelayedExpansion EnableExtensions REM :: File to write the hosts list to SET "targetFile=hosts" REM :: File containing the hosts file header (usually just the localhost line) SET "headerFile=etc\hosts-header" REM :: File containing the blacklist source servers SET "blacklistFile=etc\hosts-blacklistsources" REM :: File containing whitelisted hosts SET "whitelistFile=etc\hosts-whitelist" REM :: Define downloader program SET "dlPrg=bin\curl.exe" REM :: Define stream processor program SET "sedPrg=bin\sed.exe" REM :: Define EOL converter program SET "eolPrg=bin\unix2dos.exe" REM :: Define sorting program SET "sortPrg=sort.exe" REM :: Define deduplication program SET "dedupPrg=bin\uniq.exe" REM :: Define GetTitle program SET "getTitlePrg=bin\GetTitle.exe" REM :: Define file content pattern matching program SET "matchFPrg=%WINDIR%\system32\findstr.exe" REM :: Define regular pattern matching program SET "matchPrg=%WINDIR%\system32\find.exe" REM :: Define a nifty tool that allows us to print a single newline character SET "nLPrg=bin\bg.exe" REM :: Define terminal configuration program SET "modeConPrg=bin\ConSetBuffer.exe" REM :: Define the screen buffer size in number of lines for scrollback SET "screenBuffer=2500" REM :: Generate a carriage return character (we'll need that later to do REM :: online status updates in-line) FOR /F %%I IN ('COPY /Z "%~dpf0" NUL') DO SET "cR=%%I" REM :: Define a warning variable SET "warn=0" REM :: Set the screen buffer to a large value for extended scrollback capabilities "%modeConPrg%" /Y=%screenBuffer% REM :: Get current window title in a cross-locale portable way FOR /F "tokens=1 delims=-" %%J IN ('%getTitlePrg% /NC /NP') DO SET "cmdTitle=%%J" SET "cmdTitle=%cmdTitle:~0,-1%" REM :: Read blacklist sources from file and strip empty lines from it first REM :: (e.g. in cases where there is a linebreak at EoF) FOR /F "tokens=* usebackq" %%K IN (`%matchFPrg% /R /N "^" ".\%blacklistFile%" ^| %matchPrg% /C ":"`) DO SET "countB=%%K" TITLE Reading blacklist ECHO. & ECHO Reading blacklist ^(%countB% lines / sources^) "%sedPrg%" -e /^^^$/d -i ".\%blacklistFile%" SET "CNT0=0" FOR /F "usebackq tokens=*" %%L IN (.\%blacklistFile%) DO ( SET "serverList[!CNT0!]=%%L" SET /A "CNT0+=1" <NUL SET /P"=Reading line !CNT0!/!countB!!cR!" ) "%nLPrg%" Print \n REM :: Read whitelisted servers from file. These are hosts which appear on REM :: certain blacklists, but are very likely to cause false positives. REM :: Sites added to whitelistHosts[] will not be blocked. Also, strip empty REM :: lines from it first (e.g. in cases where there is a linebreak at EoF). FOR /F "tokens=* usebackq" %%M IN (`%matchFPrg% /R /N "^" ".\%whitelistFile%" ^| %matchPrg% /C ":"`) DO SET "countW=%%M" TITLE Reading whitelist ECHO. & ECHO Reading whitelist ^(%countW% lines / hosts^) "%sedPrg%" -e /^^^$/d -i ".\%whitelistFile%" SET "CNT1=0" FOR /F "usebackq tokens=*" %%N IN (.\%whitelistFile%) DO ( SET "whitelistHosts[!CNT1!]=%%N" SET /A "CNT1+=1" <NUL SET /P"=Reading line !CNT1!/!countW!!cR!" ) "%nLPrg%" Print \n\n REM :: Remove target hosts file if present (don't report useless errors, just REM :: because the file isn't already there) DEL /F /Q "%targetFile%" 2>NUL REM :: Walk through all online blacklists, fetch & process them, and then generate REM :: a final output hosts file (we're using a stupid GoTo loop, because it's hard REM :: to handle a loop over an array of undefined length in Batch) SET /A "CNT0-=1" & REM :: Reduce counter as it's overshot by one SET /A "CNT1-=1" & REM :: Reduce counter as it's overshot by one ECHO Starting process (%countB% sources / blacklists to walk through) & ECHO. FOR /L %%O IN (0,1,%CNT0%) DO ( TITLE Fetching blacklist #%%O/!CNT0! ECHO Fetching blacklist #%%O/!CNT0! & ECHO. "%dlPrg%" -f -k -o "%%O.txt" "!serverList[%%O]!" REM :: Dealing with download errors IF !ERRORLEVEL! NEQ 0 ( ECHO. & ECHO ^^!^^!^^! WARNING ^^!^^!^^! ECHO Download of blacklist #%%O/!CNT0! failed^^! This list cannot be used. Failed URL: ECHO "!serverList[%%O]!" & ECHO. SET "warn=1" DEL /F /Q "%%O.txt" 1>NUL 2>&1 ) REM :: Process and modify list format where necessary REM :: Some downloads may fail, so we'll start processing only if the current REM :: blacklist file has been downloaded successfully. IF EXIST ".\%%O.txt" ( REM :: Counting line numbers is exceptionally fast when using findstr.exe + find.exe. TITLE Counting line numbers of blacklist #%%O/!CNT0! ECHO. & ECHO Counting line numbers of blacklist #%%O/!CNT0! ^(This takes a few seconds^) & ECHO. FOR /F "tokens=* usebackq" %%P IN (`%matchFPrg% /R /N "^" ".\%%O.txt" ^| %matchPrg% /C ":"`) DO SET "count=%%P" TITLE Formatting blacklist #%%O/!CNT0! IF !count! GEQ 10000 ( ECHO Formatting blacklist #%%O/!CNT0! ^(!count! lines, this takes some time...^) ) ELSE ( ECHO Formatting blacklist #%%O/!CNT0! ^(!count! lines, just a moment...^) ) REM :: Strip 0.0.0.0 ECHO. 01. Stripping "0.0.0.0" strings... "%sedPrg%" -e s/0\.0\.0\.0//g -i ".\%%O.txt" REM :: Strip 127.0.0.1 ECHO. 02. Stripping "127.0.0.1" strings... "%sedPrg%" -e s/127\.0\.0\.1//g -i ".\%%O.txt" REM :: Strip comments ECHO. 03. Stripping comments... "%sedPrg%" -e s/\#.*//g -i ".\%%O.txt" REM :: Strip all whitespaces ECHO. 04. Stripping all kinds of whitespaces... "%sedPrg%" -e s/[[:space:]]//g -i ".\%%O.txt" REM :: Strip empty lines ECHO. 05. Stripping empty lines... "%sedPrg%" -e /^^^$/d -i ".\%%O.txt" REM :: Strip localhost lines (and other known useless ones) ECHO. 06. Stripping localhost lines... "%sedPrg%" -e /.*localhost.*/d -i ".\%%O.txt" ECHO. 07. Stripping other unnecessary lines... "%sedPrg%" -e /.*MalvertisinglistbyDisconnect.*/d -i ".\%%O.txt" REM :: Strip all lines containing IPv6 addresses ECHO. 08. Stripping all IPv6 addresses... "%sedPrg%" -e /.*:.*/d -i ".\%%O.txt" REM :: Strip whitelisted servers (again, with a GoTo loop, because we don't REM :: the lists' size) ECHO. 09. Stripping whitelisted servers so they won't be blocked... FOR /L %%Q IN (0,1,!CNT1!) DO ( <NUL SET /P"= Stripping whitelisted host %%Q/!CNT1!!cR!" "%sedPrg%" -e /.*!whitelistHosts[%%Q]!.*/d -i ".\%%O.txt" ) "%nLPrg%" Print \n REM :: Prepend every line with "0.0.0.0 " ECHO. 10. Prepending all lines with "0.0.0.0 "... & ECHO. "%sedPrg%" -e 's/^^^/0.0.0.0 /g' -i ".\%%O.txt" REM :: Convert line breaks from UNIX (\n) to Windows (\r\n) format for further REM :: processing "%eolPrg%" ".\%%O.txt" REM :: Append the processed blacklist to the target file TITLE Appending blacklist #%%O/!CNT0! to target file ECHO. & ECHO Appending blacklist #%%O/!CNT0! to target file... & ECHO. TYPE ".\%%O.txt">>"%targetFile%" && ECHO.>>"%targetFile%" ) ) REM :: Remove duplicates from list in a temporary copy TITLE Removing duplicates from target file ECHO Removing duplicates from target file ^(This takes some time...^) & ECHO. MOVE /Y "%targetFile%" "%targetFile%.dedup" 1>NUL REM :: Write header (usually just the localhost line) to target file TYPE "%headerFile%">"%targetFile%" & ECHO.>>"%targetFile%" REM :: Create deduplicated host list and write to target file "%sortPrg%" < "%targetFile%.dedup" "/+17" /T ".\var\" | "%dedupPrg%" >>"%targetFile%" REM :: Convert final target file to DOS linebreaks once more REM :: to get rid of the UNIX linebreaks introduced by e.g. uniq.exe "%eolPrg%" ".\%targetFile%" REM :: Let's clean up our trash (comment those lines out for debugging) DEL /F /Q "%targetFile%.dedup" DEL /F /Q "*.txt" ECHO. & ECHO All done, your new hosts file is "%~dp0%targetFile%"^^! ECHO Please double-check its contents before actually overwriting your existing ECHO hosts file with it^^! REM :: Print a final warning if we encountered any smaller problems during processing IF %warn% NEQ 0 ( ECHO. & ECHO Some non-critical warnings were generated during the process of host file ECHO generation. You may wish to check the terminal output for error messages. This ECHO is usually caused by one or more unreachable blacklist source servers or files. ) REM :: Reset cmd window title to what it was in the beginning TITLE %cmdTitle% ECHO. & PAUSE ENDLOCAL EXIT /B 0
Ein Wort der Warnung: Dieses Ding funktioniert aufgrund einer Inkompatibilität zu den GNU Tools nicht mit der Comodo Internet Security Suite 10 & 11, zumindest nicht auf 32-bit Systemen (auf 64-bit Systemen scheint's ok zu sein, warum auch immer).
Edit: Kein Win2000hole.
Windows 2000 wird nicht unterstützt, Minimum ist XP. Auf dem 2000er Server brauch ich's eh nicht, auf dem wird nicht rumgesurfed. Womit auch? IE6? FF3?
-