80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
// Package safe...
|
|
//
|
|
// Description : 安全策略之,访问黑名单
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2021-03-07 11:34 下午
|
|
package safe
|
|
|
|
import (
|
|
"git.zhangdeman.cn/zhangdeman/gopkg/easymap"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// IPBlack ip黑名单
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:35 下午 2021/3/7
|
|
var IPBlack *ipBlack
|
|
|
|
// InitIPBlack 初始化ip黑名单
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:36 下午 2021/3/7
|
|
func InitIPBlack(ipList []string) error {
|
|
// 不分片等价于只分一片
|
|
return InitIPBlackWithSeg(1, ipList)
|
|
}
|
|
|
|
// InitIPBlackWithSeg ip黑名单分片存储
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 11:37 下午 2021/3/7
|
|
func InitIPBlackWithSeg(seg int, ipList []string) error {
|
|
var err error
|
|
IPBlack = &ipBlack{}
|
|
if IPBlack.blackIPTable, err = easymap.NewSegment(seg, true); nil != err {
|
|
return errors.New("初始化IP黑名单表失败,失败原因 : " + err.Error())
|
|
}
|
|
for _, ip := range ipList {
|
|
// 将黑名单IP添加到内存表, easymap.EasyMap 是并发安全的
|
|
go IPBlack.blackIPTable.Set(ip, 1)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type ipBlack struct {
|
|
blackIPTable easymap.EasyMap // 黑名单IP列表
|
|
}
|
|
|
|
// Add 添加黑名单IP
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:05 上午 2021/3/8
|
|
func (ib *ipBlack) Add(ip string) {
|
|
ib.blackIPTable.Set(ip, 1)
|
|
}
|
|
|
|
// Del 删除一个黑名单IP ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:06 上午 2021/3/8
|
|
func (ib *ipBlack) Del(ip string) {
|
|
ib.blackIPTable.Del(ip)
|
|
}
|
|
|
|
// IsBlack 判断ip是否存在于和名单之中
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 12:07 上午 2021/3/8
|
|
func (ib *ipBlack) IsBlack(ip string) bool {
|
|
return ib.blackIPTable.Exist(ip)
|
|
}
|