Eigene Blockliste - Domainnamamen auf Existenz prüfen

Hallo Leute

Ich habe eine Frage. Wie macht Ihr das? Wie prüft Ihr ob eure selbst erstellten Blocklisten-Einträge noch aktuell sind? Bzw. ob die Domainnamen noch existieren?

Ich bin totaler Laie auf dem Gebiet. Habe aber trotzdem versucht mir ein Werkzeug zu basteln, welches mittels nslookup einen Domainnamen bei mehreren DNS-Servern abfrägt. Da ich kein Programmierer bin habe ich das Tool als Windows-Batch Datei umgesetzt. Es kann aber nur jeweils eine einzige Domainabfrage bearbeiten :pensive:

Sollte es irgend jemanden interessieren... hier meine Batch-Datei. Aber bitte nicht auslachen :slight_smile:

ECHO OFF
Title ---- DNS Multi-Test (V1.0.2) ----
CHCP 1252
setlocal enabledelayedexpansion
ECHO ***********************************************************************************
ECHO *** Domainnamen mittels nslookup bei mehreren DNS-Servern abfragen.
ECHO *** getestet unter Windows 10 (1903)
ECHO *** 
ECHO *** Erstellt von:    Speedy70
ECHO *** Erstellt am:     18.07.2019
ECHO *** Letzte Änderung: 31.07.2019
ECHO ***********************************************************************************
CLS

:START
:: Variablendefinition
SET max=15

:: Eingabevariable
SET domainname=

:: Escape-Zeichen für Farben (mit Note++ erstellt. Tastenkombination: left ALT+027)
SET ESC=e

::Formatierungen
SET RESET=%ESC%[0m
SET BOLD=%ESC%[1m
SET UNDERLINE=%ESC%[4m
SET INVERSE=%ESC%[7m

::Farben Allgemein
SET GRAU=%ESC%[90m
SET HELLROT=%ESC%[91m
SET GRUEN=%ESC%[92m
SET GELB=%ESC%[93m
SET BLAU=%ESC%[94m
SET MAGENTA=%ESC%[95m
SET CYAN=%ESC%[96m
SET WEISS=%ESC%[97m

::Farben für OK und FEHLER und BLOCK
SET OK=%GRUEN%
SET FEHLER=%HELLROT%
SET BLOCK=%CYAN%

:: DNS-Server 1 (lokaler DNS)
SET DNSLOKAL=%CYAN%
SET dns1name=Pi-hole
FOR /F "tokens=2 delims=:" %%i in ('ipconfig /all ^| FIND /i "DNS-Server"') DO SET dns1=%%i
SET dns1=%dns1:~1%
SET erg1=true

:: DNS-Server 2
SET dns2name=Google
SET dns2=8.8.8.8
SET erg2=true

:: DNS-Server 3
SET dns3name=OpenDNS
SET dns3=208.67.222.222
SET erg3=true

:: DNS-Server 4
SET dns4name=DynDNS
SET dns4=216.146.35.35
SET erg4=true

:: DNS-Server 5
SET dns5name=Cloudflare
SET dns5=1.1.1.1
SET erg5=true

:: DNS-Server 6
SET dns6name=Comodo Secure DNS
SET dns6=8.26.56.26
SET erg6=true

:: DNS-Server 7
SET dns7name=AdGuard DNS
SET dns7=176.103.130.130
SET erg7=true

:: DNS-Server 8
SET dns8name=OneDNS
SET dns8=117.50.11.11
SET erg8=true

:: DNS-Server 9
SET dns9name=Level3
SET dns9=209.244.0.3
SET erg9=true

:: DNS-Server 10
SET dns10name=DNSWatch
SET dns10=84.200.69.80
SET erg10=true

:: DNS-Server 11
SET dns11name=SafeDNS
SET dns11=195.46.39.39
SET erg11=true

:: DNS-Server 12
SET dns12name=Quad9
SET dns12=9.9.9.9
SET erg12=true

:: DNS-Server 13
SET dns13name=FreeDNS
SET dns13=37.235.1.174
SET erg13=true

:: DNS-Server 14
SET dns14name=Verisign
SET dns14=64.6.64.6
SET erg14=true

:: DNS-Server 15
SET dns15name=A1-Net
SET dns15=10.156.0.33
SET erg15=true

:: ANFANG =============================================================================
ECHO.
SET /p domainname=hier einen Domainnamen eingeben: 
IF '%domainname%' == '' GOTO ENDE
CLS
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns1% ^| FIND /V "Aliases"') DO SET my_dns_result=%%a
CLS && ECHO. && ECHO Vorgang 1 von %max% (%dns1name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns2% ^| FIND /V "Aliases"') DO SET dns2_result=%%a
CLS && ECHO. && ECHO Vorgang 2 von %max% (%dns2name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns3% ^| FIND /V "Aliases"') DO SET dns3_result=%%a
CLS && ECHO. && ECHO Vorgang 3 von %max% (%dns3name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns4% ^| FIND /V "Aliases"') DO SET dns4_result=%%a
CLS && ECHO. && ECHO Vorgang 4 von %max% (%dns4name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns5% ^| FIND /V "Aliases"') DO SET dns5_result=%%a
CLS && ECHO. && ECHO Vorgang 5 von %max% (%dns5name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns6% ^| FIND /V "Aliases"') DO SET dns6_result=%%a
CLS && ECHO. && ECHO Vorgang 6 von %max% (%dns6name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns7% ^| FIND /V "Aliases"') DO SET dns7_result=%%a
CLS && ECHO. && ECHO Vorgang 7 von %max% (%dns7name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns8% ^| FIND /V "Aliases"') DO SET dns8_result=%%a
CLS && ECHO. && ECHO Vorgang 8 von %max% (%dns8name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns9% ^| FIND /V "Aliases"') DO SET dns9_result=%%a
CLS && ECHO. && ECHO Vorgang 9 von %max% (%dns9name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns10% ^| FIND /V "Aliases"') DO SET dns10_result=%%a
CLS && ECHO. && ECHO Vorgang 10 von %max% (%dns10name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns11% ^| FIND /V "Aliases"') DO SET dns11_result=%%a
CLS && ECHO. && ECHO Vorgang 11 von %max% (%dns11name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns12% ^| FIND /V "Aliases"') DO SET dns12_result=%%a
CLS && ECHO. && ECHO Vorgang 12 von %max% (%dns12name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns13% ^| FIND /V "Aliases"') DO SET dns13_result=%%a
CLS && ECHO. && ECHO Vorgang 13 von %max% (%dns13name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns14% ^| FIND /V "Aliases"') DO SET dns14_result=%%a
CLS && ECHO. && ECHO Vorgang 14 von %max% (%dns14name%)
ECHO.
FOR /F "skip=1 tokens=2 delims=: " %%a in ('nslookup %domainname% %dns15% ^| FIND /V "Aliases"') DO SET dns15_result=%%a
CLS && ECHO. && ECHO Vorgang 15 von %max% (%dns15name%)
CLS
ECHO =======================================================================================================
ECHO Domain: %domainname%
ECHO =======================================================================================================
ECHO DNS-Server                           :       Ergebnis:
ECHO =======================================================================================================

REM 192.168.178.23 .............. Pi-hole: (DNS 1)
REM 8.8.8.8 ...................... Google: (DNS 2)
REM 208.67.222.222 .............. OpenDNS: (DNS 3)
REM 216.146.35.35 ................ DynDNS: (DNS 4)
REM 1.1.1.1 .................. Cloudflare: (DNS 5)
REM 8.26.56.26 ........ Comodo Secure DNS: (DNS 6)
REM 176.103.130.130 ......... AdGuard DNS: (DNS 7)
REM 117.50.11.11 ................. OneDNS: (DNS 8)
REM 209.244.0.3 .................. Level3: (DNS 9)
REM 84.200.69.80 ............... DNSWatch: (DNS 10)
REM 195.46.39.39 ................ SafeDNS: (DNS 11)
REM 9.9.9.9 ....................... Quad9: (DNS 12)
REM 37.235.1.174 ................ FreeDNS: (DNS 13)
REM 64.6.64.6 .................. Verisign: (DNS 14)
REM 10.156.0.33 .................. A1-Net: (DNS 15)


IF %my_dns_result%==%dns1% SET erg1=false
IF %my_dns_result%==was SET erg1=false
IF %my_dns_result%==0.0.0.0 SET erg1=block
IF %erg1%==true GOTO :OK1
IF %erg1%==false GOTO :FEHL1
IF %erg1%==block GOTO :BLOCK1
:OK1
ECHO %DNSLOKAL%%dns1%%RESET% .............. %DNSLOKAL%%dns1name%%RESET%:       %GRUEN%%my_dns_result%%RESET%
GOTO :Q1
:FEHL1
ECHO %DNSLOKAL%%dns1%%RESET% .............. %DNSLOKAL%%dns1name%%RESET%:       %FEHLER%nicht gefunden%RESET%        
GOTO :Q1
:BLOCK1
ECHO %DNSLOKAL%%dns1%%RESET% .............. %DNSLOKAL%%dns1name%%RESET%:       %BLOCK%geblockt%RESET%
GOTO :Q1
:Q1

IF %dns2_result%==%dns2% SET erg2=false
IF %dns2_result%==was SET erg2=false
IF %erg2%==true GOTO :OK2
IF %erg2%==false GOTO :FEHL2
:OK2
ECHO %dns2% ...................... %dns2name%:       %OK%%dns2_result%%RESET%
GOTO :Q2
:FEHL2
ECHO %dns2% ...................... %dns2name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q2
:Q2

IF %dns3_result%==%dns3% SET erg3=false
IF %dns3_result%==was SET erg3=false
IF %erg3%==true GOTO :OK3
IF %erg3%==false GOTO :FEHL3
:OK3
ECHO %dns3% .............. %dns3name%:       %OK%%dns3_result%%RESET%
GOTO :Q3
:FEHL3
ECHO %dns3% .............. %dns3name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q3
:Q3

IF %dns4_result%==%dns4% SET erg4=false
IF %dns4_result%==was SET erg4=false
IF %erg4%==true GOTO :OK4
IF %erg4%==false GOTO :FEHL4
:OK4
ECHO %dns4% ................ %dns4name%:       %OK%%dns4_result%%RESET%
GOTO :Q4
:FEHL4
ECHO %dns4% ................ %dns4name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q4
:Q4

IF %dns5_result%==%dns5% SET erg5=false
IF %dns5_result%==was SET erg5=false
IF %erg5%==true GOTO :OK5
IF %erg5%==false GOTO :FEHL5
:OK5
ECHO %dns5% .................. %dns5name%:       %OK%%dns5_result%%RESET%
GOTO :Q5
:FEHL5
ECHO %dns5% .................. %dns5name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q5
:Q5

IF %dns6_result%==%dns6% SET erg6=false
IF %dns6_result%==was SET erg6=false
IF %erg6%==true GOTO :OK6
IF %erg6%==false GOTO :FEHL6
:OK6
ECHO %dns6% ........ %dns6name%:       %OK%%dns6_result%%RESET%
GOTO :Q6
:FEHL6
ECHO %dns6% ........ %dns6name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q6
:Q6

IF %dns7_result%==%dns7% SET erg7=false
IF %dns7_result%==was SET erg7=false
IF %erg7%==true GOTO :OK7
IF %erg7%==false GOTO :FEHL7
:OK7
ECHO %dns7% ......... %dns7name%:       %OK%%dns7_result%%RESET%
GOTO :Q7
:FEHL7
ECHO %dns7% ......... %dns7name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q7
:Q7

IF %dns8_result%==%dns8% SET erg8=false
IF %dns8_result%==was SET erg8=false
IF %erg8%==true GOTO :OK8
IF %erg8%==false GOTO :FEHL8
:OK8
ECHO %dns8% ................. %dns8name%:       %OK%%dns8_result%%RESET%
GOTO :Q8
:FEHL8
ECHO %dns8% ................. %dns8name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q8
:Q8

IF %dns9_result%==%dns9% SET erg9=false
IF %dns9_result%==was SET erg9=false
IF %erg9%==true GOTO :OK9
IF %erg9%==false GOTO :FEHL9
:OK9
ECHO %dns9% .................. %dns9name%:       %OK%%dns9_result%%RESET%
GOTO :Q9
:FEHL9
ECHO %dns9% .................. %dns9name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q9
:Q9

IF %dns10_result%==%dns10% SET erg10=false
IF %dns10_result%==was SET erg10=false
IF %erg10%==true GOTO :OK10
IF %erg10%==false GOTO :FEHL10
:OK10
ECHO %dns10% ............... %dns10name%:       %OK%%dns10_result%%RESET%
GOTO :Q10
:FEHL10
ECHO %dns10% ............... %dns10name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q10
:Q10

IF %dns11_result%==%dns11% SET erg11=false
IF %dns11_result%==was SET erg11=false
IF %erg11%==true GOTO :OK11
IF %erg11%==false GOTO :FEHL11
:OK11
ECHO %dns11% ................ %dns11name%:       %OK%%dns11_result%%RESET%
GOTO :Q11
:FEHL11
ECHO %dns11% ................ %dns11name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q11
:Q11

IF %dns12_result%==%dns12% SET erg12=false
IF %dns12_result%==was SET erg12=false
IF %erg12%==true GOTO :OK12
IF %erg12%==false GOTO :FEHL12
:OK12
ECHO %dns12% ....................... %dns12name%:       %OK%%dns12_result%%RESET%
GOTO :Q12
:FEHL12
ECHO %dns12% ....................... %dns12name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q12
:Q12

IF %dns13_result%==%dns13% SET erg13=false
IF %dns13_result%==was SET erg13=false
IF %erg13%==true GOTO :OK13
IF %erg13%==false GOTO :FEHL13
:OK13
ECHO %dns13% ................ %dns13name%:       %OK%%dns13_result%%RESET%
GOTO :Q13
:FEHL13
ECHO %dns13% ................ %dns13name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q13
:Q13

IF %dns14_result%==%dns14% SET erg14=false
IF %dns14_result%==was SET erg14=false
IF %erg14%==true GOTO :OK14
IF %erg14%==false GOTO :FEHL14
:OK14
ECHO %dns14% .................. %dns14name%:       %OK%%dns14_result%%RESET%
GOTO :Q14
:FEHL14
ECHO %dns14% .................. %dns14name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q14
:Q14

IF %dns15_result%==%dns15% SET erg15=false
IF %dns15_result%==was SET erg15=false
IF %erg15%==true GOTO :OK15
IF %erg15%==false GOTO :FEHL15
:OK15
ECHO %dns15% .................. %dns15name%:       %OK%%dns15_result%%RESET%
GOTO :Q15
:FEHL15
ECHO %dns15% .................. %dns15name%:       %FEHLER%nicht gefunden%RESET%
GOTO :Q15
:Q15

ECHO -------------------------------------------------------------------------------------------------------
ECHO.
ECHO ...fertig
ECHO.
ECHO eine weitere Domain abfragen? (J/N)
SET /P eingabe=
IF '%eingabe%' == 'N' GOTO ENDE
IF '%eingabe%' == 'n' GOTO ENDE
IF '%eingabe%' == 'J' GOTO START
IF '%eingabe%' == 'j' GOTO START
ECHO.
:ENDE
ECHO.
Pause

Edit: verbesserte Version meiner Batch-Datei eingefügt

Hallo,

Gar nicht :slight_smile:

Warum sollte man das prüfen? Solch ein Eintrag, der eine nicht mehr existierende Domain blockt, stört doch nicht.

Hallöchen

hmmm... stimmt eigentlich... :thinking:
dachte nur zwecks Sauberkeit der Liste und damit die Listen nicht unnötig Groß werden!

:slight_smile:

PS: Danke für's umformatieren meines Beitrags! Bin hier noch nicht ganz Sattelfest :slight_smile:

Man "arbeitet" ja nicht mit den Listen; sie sind da und werden automatisch und im Hintergrund verwendet.
Ist Ge­schmacks­sa­che, ich persönlich sehe keine Notwendigkeit sie zu bereinigen. Ich füge neue Einträge hinzu, entferne jedoch so gut wie nie welche.

Warte einfach mal, vielleicht pflegt hier jemand seine Listen und kann dir einen Tipp oder ein Script geben.

OK
Alles Klar!
Thaaaanxxxxxx :+1:

Ich sehe das auch so wie @mibere. Ob in gravity.list einige oder auch viele Einträge mehr drin sind oder nicht, spielt für die Performance von Pi-hole keine Rolle.

Du solltest dir eher Gedanken machen, ob du den Ansatz von @mmotti umsetzt - siehe mmotti · GitHub.

Und zwar nicht, um die Zahl der Einträge in der gravity.list zu reduzieren, sondern um sicher zu stellen, dass von den wichtigen Adservern/Trackern auch alle Sub-Domains geblockt werden, was bei den hosts-Dateien bzw. der gravity.list nur dann der Fall ist, wenn sie auch alle jede einzeln vollständig darin enthalten sind. @mmotti löst dieses Problem, indem er die die Blocking-Fähigkeiten von dnsmasq verwendet, womit garantiert alle Sub-Domains einer erfassten Domain blockiert werden.

Um den Ansatz zu optimieren, solltest du alle Skripte verwenden, also fetchFilterLIsts.sh, generateGravityWildCards.sh und gravityOptimise.sh. Und jeweils - wie auf den Seiten beschrieben - Cron-Jobs anlegen, damit das Ganze künftig automatisiert jede Nacht durchläuft.

Lies dir das mal in Ruhe durch. Wenn das erstmal eingerichtet ist, läuft es problemlos.