AdGuardHome/internal/filtering
Ainar Garipov 9951d861d1 Pull request: 3972-hostlists-services
Updates #3972.

Squashed commit of the following:

commit 9dc0efe2453cb6c738d97d39b02c86eccb18a42c
Merge: 239550f8 8a935d4f
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Oct 27 14:42:38 2022 +0300

    Merge branch 'master' into 3972-hostlists-services

commit 239550f84228e7c7a6f4ae6b1cadcc47e01f54d5
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Oct 27 14:41:42 2022 +0300

    filtering: upd service list

commit b8bf3a6a4b1333059b886be95a1419612aebac39
Author: Ildar Kamalov <ik@adguard.com>
Date:   Thu Oct 27 13:41:09 2022 +0300

    client: remove todo

commit caa504b482befb804db2a1ca0b6d4834aa4da49a
Author: Ildar Kamalov <ik@adguard.com>
Date:   Thu Oct 27 12:54:45 2022 +0300

    fix build

commit 511797c305d9eef84a20553dab795414e00da51a
Author: Ildar Kamalov <ik@adguard.com>
Date:   Thu Oct 27 12:40:33 2022 +0300

    client: add titles with service names to the clients table

commit 79ed3157a85b489a0b13381cff867a8c73ba60e9
Author: Ildar Kamalov <ik@adguard.com>
Date:   Thu Oct 27 12:36:59 2022 +0300

    client: fix empty icons

commit ab69b95784de87665d5a1a3683f28e3b3df1c210
Author: Ildar Kamalov <ik@adguard.com>
Date:   Thu Oct 27 11:55:48 2022 +0300

    client: use all blocked services

commit 9a4a87665c8463224d8e93f1e162988107f6c7ca
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Oct 25 19:25:20 2022 +0300

    all: fix json response

commit 86eb4493ce305cd5991176bd4cd8f7f5afdea330
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Oct 25 19:09:44 2022 +0300

    all: use hostslists registry for blocked svcs
2022-10-27 15:46:25 +03:00
..
tests Pull request: all: less annoying pkg names 2021-05-21 16:15:47 +03:00
blocked_test.go Pull request: all: imp build tags 2021-06-15 19:42:41 +03:00
blocked.go Pull request: 3972-hostlists-services 2022-10-27 15:46:25 +03:00
dnsrewrite_test.go Pull request: 4871 imp filtering 2022-09-23 13:23:35 +03:00
dnsrewrite.go Pull request: 4865-refactor-dns-handlers 2022-09-02 14:52:19 +03:00
filter_test.go Pull request: 4916 Editing filter 2022-10-21 20:14:43 +03:00
filter.go Pull request: 4916 Editing filter 2022-10-21 20:14:43 +03:00
filtering_test.go Pull request: 4871 imp filtering 2022-09-23 13:23:35 +03:00
filtering.go Pull request: 4916 Editing filter 2022-10-21 20:14:43 +03:00
http_test.go Pull request: 4916 Editing filter 2022-10-21 20:14:43 +03:00
http.go Pull request: 3972-hostlists-services 2022-10-27 15:46:25 +03:00
README.md Pull request: all: less annoying pkg names 2021-05-21 16:15:47 +03:00
rewrites_test.go Pull request: 4871 imp filtering 2022-09-23 13:23:35 +03:00
rewrites.go Pull request: 5035-slices-clone 2022-10-21 20:42:00 +03:00
safebrowsing_test.go Pull request: 4871 imp filtering 2022-09-23 13:23:35 +03:00
safebrowsing.go Pull request: imp-json-resp 2022-10-04 14:35:10 +03:00
safesearch.go Pull request: imp-json-resp 2022-10-04 14:35:10 +03:00
servicelist.go Pull request: 3972-hostlists-services 2022-10-27 15:46:25 +03:00

AdGuard Home's DNS filtering go library

Example use:

[ -z "$GOPATH" ] && export GOPATH=$HOME/go
go get -d github.com/AdguardTeam/AdGuardHome/filtering

Create file filter.go

package main

import (
    "github.com/AdguardTeam/AdGuardHome/filtering"
    "log"
)

func main() {
    filter := filtering.New()
    filter.AddRule("||dou*ck.net^")
    host := "www.doubleclick.net"
    res, err := filter.CheckHost(host)
    if err != nil {
        // temporary failure
        log.Fatalf("Failed to check host %q: %s", host, err)
    }
    if res.IsFiltered {
        log.Printf("Host %s is filtered, reason - %q, matched rule: %q", host, res.Reason, res.Rule)
    } else {
        log.Printf("Host %s is not filtered, reason - %q", host, res.Reason)
    }
}

And then run it:

go run filter.go

You will get:

2000/01/01 00:00:00 Host www.doubleclick.net is filtered, reason - 'FilteredBlackList', matched rule: '||dou*ck.net^'

You can also enable checking against AdGuard's SafeBrowsing:

package main

import (
    "github.com/AdguardTeam/AdGuardHome/filtering"
    "log"
)

func main() {
    filter := filtering.New()
    filter.EnableSafeBrowsing()
    host := "wmconvirus.narod.ru" // hostname for testing safebrowsing
    res, err := filter.CheckHost(host)
    if err != nil {
        // temporary failure
        log.Fatalf("Failed to check host %q: %s", host, err)
    }
    if res.IsFiltered {
        log.Printf("Host %s is filtered, reason - %q, matched rule: %q", host, res.Reason, res.Rule)
    } else {
        log.Printf("Host %s is not filtered, reason - %q", host, res.Reason)
    }
}