badguardhome/dnsfilter
Eugene Bujak 2449075bca Revert "Cache DNS lookups when resolving safebrowsing or parental servers, also cache replacement hostnames as well."
This reverts commit a5d1053520.

This cache had unintended side effects.
2018-11-02 12:15:30 +03:00
..
README.md Rename from 'Adguard DNS' to 'AdGuard Home'. 2018-10-15 16:02:19 +03:00
dnsfilter.go Revert "Cache DNS lookups when resolving safebrowsing or parental servers, also cache replacement hostnames as well." 2018-11-02 12:15:30 +03:00
dnsfilter_test.go Add ErrAlreadyExists 2018-10-29 16:17:18 +03:00
helpers.go Moved hosts-syntax matching to DnsFilter 2018-10-29 15:46:58 +03:00
reason_string.go Initial commit 2018-08-30 17:25:33 +03:00
rule_to_regexp.go dnsfilter -- avoid using regexps when simple suffix match is enough. 2018-10-04 13:19:43 +03:00
safesearch.go Initial commit 2018-08-30 17:25:33 +03:00

README.md

AdGuard Home's DNS filtering go library

Example use:

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

Create file filter.go

package main

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

func main() {
    filter := dnsfilter.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 '%s': %s", host, err)
    }
    if res.IsFiltered {
        log.Printf("Host %s is filtered, reason - '%s', matched rule: '%s'", host, res.Reason, res.Rule)
    } else {
        log.Printf("Host %s is not filtered, reason - '%s'", 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/dnsfilter"
    "log"
)

func main() {
    filter := dnsfilter.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 '%s': %s", host, err)
    }
    if res.IsFiltered {
        log.Printf("Host %s is filtered, reason - '%s', matched rule: '%s'", host, res.Reason, res.Rule)
    } else {
        log.Printf("Host %s is not filtered, reason - '%s'", host, res.Reason)
    }
}