/
inchina.go
54 lines (46 loc) · 1.16 KB
/
inchina.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package domain
import (
"bufio"
"io"
"os"
"regexp"
"time"
"github.com/missdeer/avege/common"
"github.com/missdeer/avege/common/ds"
"github.com/missdeer/avege/common/netutil"
)
const dnChinaURL = "https://yii.li/dnchina"
var (
//dnChina = ds.NewItemTree("china-domain.lst", true)
dnChina = ds.NewItemMapWithCap("china-domain.lst", true, 30000)
)
func InChina(dn string) bool {
return dnChina.Hit(dn[:len(dn)-1])
}
func LoadDomainNameInChina() {
if dnChina.Load() == false {
dnChina.Clear()
go UpdateDomainNameInChina()
}
}
func UpdateDomainNameInChina() {
var content io.ReadCloser
for err := os.ErrNotExist; err != nil; time.Sleep(5 * time.Second) {
common.Warning("try to download content from", dnChinaURL)
content, err = netutil.DownloadRemoteContent(dnChinaURL)
}
defer content.Close()
regex, _ := regexp.Compile(`server=\/([^\/]+)`)
scanner := bufio.NewScanner(content)
scanner.Split(bufio.ScanLines)
dnChina.Lock()
for scanner.Scan() {
ss := regex.FindStringSubmatch(scanner.Text())
if len(ss) > 1 {
dnChina.AddItem(ss[1])
}
}
dnChina.Unlock()
common.Debugf("domain name in China from %s loaded", dnChinaURL)
dnChina.Save()
}