-
Notifications
You must be signed in to change notification settings - Fork 0
/
suspicious_ip.go
73 lines (59 loc) · 1.37 KB
/
suspicious_ip.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package validators
import (
"github.com/pkg/errors"
"io/ioutil"
"net/http"
"strings"
"sync"
"time"
)
var (
mux_susp sync.Mutex
cache_susp []string
)
func IsSuspiciousIPv4(ipv4 string) bool {
mux_susp.Lock()
if len(cache_susp) == 0 {
// Backup list file:
// https://raw.githubusercontent.com/zierson/validators/master/data/ipsum.txt
req, err := http.NewRequest("GET", "https://raw.githubusercontent.com/stamparm/ipsum/master/ipsum.txt", nil)
if err != nil {
panic(errors.Wrap(err, "IsSuspiciousIPv4"))
}
resp, err := (&http.Client{
Timeout: 10 * time.Second,
}).Do(req)
if err != nil {
panic(errors.Wrap(err, "IsSuspiciousIPv4"))
}
b, err := ioutil.ReadAll(resp.Body)
if err := resp.Body.Close(); err != nil {
panic(errors.Wrap(err, "IsSuspiciousIPv4"))
}
lines := strings.Split(string(b), "\n")
for _, l := range lines {
if strings.HasPrefix(l, "#") {
continue
}
ip := strings.Split(l, "\t")
if len(ip) != 2 {
continue
}
cache_susp = append(cache_susp, strings.TrimSpace(ip[0]))
}
if len(cache_susp) < 2 {
panic(errors.WithMessage(errors.New("no ip loaded"), "IsDisposableEmail"))
}
}
mux_susp.Unlock()
for _, v := range cache_susp {
if v == ipv4 {
return true
}
}
return false
}
// TODO add IPv6 support
func IsSuspiciousIPv6(ipv6 string) bool {
panic("validate IPv6 is not supported")
}