6 log "github.com/sirupsen/logrus"
10 defaultBanThreshold = uint32(100)
11 defaultWarnThreshold = uint32(50)
13 LevelMsgIllegal = 0x01
14 levelMsgIllegalPersistent = uint32(20)
15 levelMsgIllegalTransient = uint32(0)
16 LevelConnException = 0x02
17 levelConnExceptionPersistent = uint32(0)
18 levelConnExceptionTransient = uint32(20)
21 type PeersBanScore struct {
22 peers map[string]*DynamicBanScore
26 func NewPeersScore() *PeersBanScore {
27 return &PeersBanScore{
28 peers: make(map[string]*DynamicBanScore),
32 func (ps *PeersBanScore) DelPeer(ip string) {
39 func (ps *PeersBanScore) Increase(ip string, level byte, reason string) bool {
43 var persistent, transient uint32
46 persistent = levelMsgIllegalPersistent
47 transient = levelMsgIllegalTransient
48 case LevelConnException:
49 persistent = levelConnExceptionPersistent
50 transient = levelConnExceptionTransient
54 banScore, ok := ps.peers[ip]
56 banScore = &DynamicBanScore{}
57 ps.peers[ip] = banScore
59 score := banScore.Increase(persistent, transient)
60 if score > defaultBanThreshold {
61 log.WithFields(log.Fields{"module": logModule, "address": ip, "score": score, "reason": reason}).Errorf("banning and disconnecting")
65 if score > defaultWarnThreshold {
66 log.WithFields(log.Fields{"module": logModule, "address": ip, "score": score, "reason": reason}).Warning("ban score increasing")