gopkg/safe/ip.go
2021-07-25 19:05:59 +08:00

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)
}