Irgendwie ist mir diese Liste immer noch zu lang.
Ich würde gerne unterscheiden zwischen geblockten und ungeblockten Domains. Ich hatte gesehen, dass in der RAW-Liste u.a. auch noch "#53" steht. Mittels "grep (-v) "#53" könnte man das machen. Dummerweise werden nicht geblockte Domains dieser IP, die vorher schon mal von einem anderen Gerät aufgerufen worden sind, ohne "#53" abgelegt, da sie noch im Cache waren.
Hat jemand eine Idee wie ich das besser angehen könnte?
Das Endergebnis sollen zwei Listen einer IP sein, einmal die ungeblockten, einmal die geblockten Domains.
Auch frage ich mich, was die einzelnen Angaben bei der Ausgabe sein sollten.
Beispiel:
Die Telnet-API liefert (fast) ausschließlich nur Antworten aus Pi-holes Arbeitsspeicher, also aus den letzten 24 Stunden.
Für gezielte Recherchen, zumal wenn nicht nur die letzen 24 Stunden untersucht werden sollen, ist eine SQL-Abfrage der Query-Datenbank besser geeignet.
Mit folgendem Kommando listest Du z.B. auf, wie oft eine Domäne von der IP-Adresse 192.168.0.1 seit dem ersten März (2021-03-01) angefragt und von Pi-hole blockiert (status NOT IN) wurde, sortiert nach Häufigkeit:
sqlite3 /etc/pihole/pihole-FTL.db "SELECT count(domain), domain FROM queries \
WHERE client = '192.168.0.1' AND status NOT IN(0,2,3) \
AND timestamp > strftime('%s','2021-03-01') \
GROUP BY domain ORDER BY count(domain) DESC;"
Da Pi-hole die Daten aus dem Arbeitsspeicher standardmässig jede Minute in die Datenbank schreibt, sind aktuelle Daten entsprechend nach dieser Minute verfügbar.
Die Datenbank lässt sich außerdem auch über Pi-holes Weboberfläche unter Long-term data abfragen.
Mit der Datenbank komme ich leider nicht klar. Um es besser zu verstehen, hatte ich mir den DB Browser Sqlite besorgt um die Spalten und Zeilen zu sehen. Aber die Abfrage habe ich nicht mal im Ansatz hinbekommen.
Ich habe daher erstmal mit der API weitergearbeitet und folgendes mir erarbeitet:
Ich würde hier hartnäckig nach wie vor SQL empfehlen.
Die Telnet API wird vermutlich mit einer der nächsten Pi-hole-Versionen eingestellt und verschwinden.
Die von Dir jetzt angestrebte Lösung würde dann nicht mehr funktionieren.
Für die SQL-Anweisung zu geblockten Domänen habe ich Dir bereits ein Beispiel geliefert. Für erlaubte Domänen müsstest Du die Selektion einfach umkehren (von status NOT IN in status IN).
sqlite3 /etc/pihole/pihole-FTL.db "SELECT count(domain), domain FROM queries \
WHERE client = '10.0.1.5' AND status NOT IN(0,2,3) \
AND timestamp > strftime('%s','now','-30 day') \
GROUP BY domain ORDER BY count(domain) DESC;"