# Pi-hole API | Anzeige der Aufrufe einer IP | Filterung | getallqueries

**URL:** <https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801>\
**Category:** Deutschsprachige Hilfe\
**Created:** [March 28, 2021, 8:44pm UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801 "2021-03-28T20:44:34Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![bernd123](https://discourse-cdn.pi-hole.net/user_avatar/discourse.pi-hole.net/bernd123/32/8135_2.png) [@bernd123](https://discourse.pi-hole.net/u/bernd123)\
**Post date:** [March 28, 2021, 8:44pm UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801/1 "2021-03-28T20:44:34Z")

</div>

Hallo!

Ich wollte mir die aufgerufenen Domains einer IP aus dem Netzwerk anzeigen und zur Übersichtlichkeit filtern und sortieren lassen.

Angefangen habe ich mit:

```auto
echo ">getallqueries (1000) >quit" | nc 127.0.0.1 4711

```

Nun habe ich mittels grep und dem Hostnamen der IP aussortiert:

```auto
echo ">getallqueries (1000) >quit" | nc 127.0.0.1 4711 | grep "hostname"

```

Nun habe ich mittels awk die aufgerufene Domain herausgepickt:

```auto
echo ">getallqueries (1000) >quit" | nc 127.0.0.1 4711 | grep "hostname" | awk '{print $3}'

```

Dann noch sortiert und doppelte Einträge aussortiert:

```auto
echo ">getallqueries (1000) >quit" | nc 127.0.0.1 4711 | grep "hostname" | awk '{print $3}' | sort | uniq

```

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:

```auto
1616963753 A DOMAIN hostname.router 2 0 4 149 N/A -1 84.200.70.40#53

```

Was sind das für Werte hinter dem Hostnamen?  
" **2 0 4 149 N/A -1**"

Viele Grüße  
Bernd

---

<div class="post-metadata">

**Author:** ![Bucking\_Horn](https://discourse-cdn.pi-hole.net/user_avatar/discourse.pi-hole.net/bucking_horn/32/18719_2.png) [@Bucking\_Horn](https://discourse.pi-hole.net/u/Bucking_Horn)\
**Post date:** [March 28, 2021, 9:44pm UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801/2 "2021-03-28T21:44:50Z")

</div>

Die [Telnet-API](https://docs.pi-hole.net/ftldns/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](https://docs.pi-hole.net/database/ftl/) 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:

```auto
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](https://docs.pi-hole.net/ftldns/configfile/#dbinterval) 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](http://pi.hole/admin/db_queries.php) abfragen.

---

<div class="post-metadata">

**Author:** ![bernd123](https://discourse-cdn.pi-hole.net/user_avatar/discourse.pi-hole.net/bernd123/32/8135_2.png) [@bernd123](https://discourse.pi-hole.net/u/bernd123)\
**Post date:** [March 29, 2021, 11:41am UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801/3 "2021-03-29T11:41:09Z")

</div>

Danke für dein Feedback.

> [@Bucking\_Horn](#):
>
> SQL-Abfrage der [Query-Datenbank](https://docs.pi-hole.net/database/ftl/) besser geeignet

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.

> [@Bucking\_Horn](#):
>
> Telnet-API

Ich habe daher erstmal mit der API weitergearbeitet und folgendes mir erarbeitet:

Geblockte Domains:

```auto
echo ">getallqueries (50000) >quit" | nc 127.0.0.1 4711 | awk '{print $2 " " $3 " " $4 " " $5}' | grep '^A ' | grep "Hostname" | grep '[1,4,5,6,7,8,9,10,11]$' | awk '{print $2}' | grep -v --file=domainlist.txt | sort | uniq

```

Erlaubte Domains:

```auto
echo ">getallqueries (50000) >quit" | nc 127.0.0.1 4711 | awk '{print $2 " " $3 " " $4 " " $5}' | grep '^A ' | grep "Hostname" | grep '[2,3,12,13,14]$' | awk '{print $2}' | grep -v --file=domainlist.txt | sort | uniq

```

Kurze Erklärung in der Reihenfolge der Befehle:

- awk+print = Hiermit stelle ich die Reihenfolge um (Type nach vorne)
- grep '^A ' = (Rauswurf von allem außer Type A)
- grep "Hostname" = (Rauswurf von allem außer vom Hostnamen)
- grep [Zahlen] = Rauswurf nach Status (erlaubt/geblockt)
- awk print $2 = Rauswurf aller Daten außer Domain
- grep -v domainlist.txt = Rauswurf aller Domains in der Liste (üblichen Domains, die man nicht sehen will)
- sort = Liste sortieren
- uniq = doppelte Einträge löschen

> [@Bucking\_Horn](#):
>
> nur Antworten aus Pi-holes Arbeitsspeicher, also aus den letzten 24 Stunden

Gibt es eine Möglichkeit dies in Pi-hole zu vergrößern?  
Bei mir läuft Pi-Hole auf einem Raspberry Pi4 mit 4GB RAM, der sowieso kaum belegt ist.

---

<div class="post-metadata">

**Author:** ![Bucking\_Horn](https://discourse-cdn.pi-hole.net/user_avatar/discourse.pi-hole.net/bucking_horn/32/18719_2.png) [@Bucking\_Horn](https://discourse.pi-hole.net/u/Bucking_Horn)\
**Post date:** [March 30, 2021, 5:30am UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801/4 "2021-03-30T05:30:45Z")

</div>

> [@bernd123](#):
>
> Gibt es eine Möglichkeit dies in Pi-hole zu vergrößern?

Nein.

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](https://discourse.pi-hole.net/t/stats-over-unix-or-tcp-socket/41890/3).

Die von Dir jetzt angestrebte Lösung würde dann nicht mehr funktionieren.

> [@bernd123](#):
>
> Ich würde gerne unterscheiden zwischen geblockten und ungeblockten Domains.

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`).

---

<div class="post-metadata">

**Author:** ![bernd123](https://discourse-cdn.pi-hole.net/user_avatar/discourse.pi-hole.net/bernd123/32/8135_2.png) [@bernd123](https://discourse.pi-hole.net/u/bernd123)\
**Post date:** [March 30, 2021, 11:50am UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801/5 "2021-03-30T11:50:08Z")

</div>

> [@Bucking\_Horn](#):
>
> SQL empfehlen

Ok, sehe ich ein, ich versuch es.

> [@Bucking\_Horn](#):
>
> einfach umkehren

Das habe ich jetzt hinbekommen. 🙂

In deinem Befehl steht ein festes Datum (1.3.). Geht das auch mit einer Angabe von Tagen, sprich z.B. die letzten x Tage?

---

<div class="post-metadata">

**Author:** ![yubiuser](https://discourse-cdn.pi-hole.net/user_avatar/discourse.pi-hole.net/yubiuser/32/12100_2.png) [@yubiuser](https://discourse.pi-hole.net/u/yubiuser)\
**Post date:** [March 30, 2021, 4:22pm UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801/6 "2021-03-30T16:22:59Z")

</div>

> [@bernd123](#):
>
> eht das auch mit einer Angabe von Tagen, sprich z.B. die letzten x Tage?

Sollte gehen mit

```auto
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;"

```

---

<div class="post-metadata">

**Author:** ![system](https://discourse.pi-hole.net/uploads/default/original/3X/7/c/7c8792f649eeb921c5d2b4c41564ffa873d9a2b8.png) [@system](https://discourse.pi-hole.net/u/system)\
**Post date:** [April 20, 2021, 4:23pm UTC](https://discourse.pi-hole.net/t/pi-hole-api-anzeige-der-aufrufe-einer-ip-filterung-getallqueries/45801/7 "2021-04-20T16:23:02Z")

</div>

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.
