在各个地方支持IPv6

This commit is contained in:
刘祥超
2021-07-20 10:55:52 +08:00
parent b9e01b7738
commit a241b9a9df
7 changed files with 97 additions and 49 deletions

View File

@@ -9,7 +9,7 @@ import (
"strings"
)
// IP Range类型
// IPRangeType IP Range类型
type IPRangeType = int
const (
@@ -19,7 +19,7 @@ const (
IPRangeTypeWildcard IPRangeType = 4 // 通配符,可以使用*
)
// IP Range
// IPRangeConfig IP Range
type IPRangeConfig struct {
Id string `yaml:"id" json:"id"`
@@ -36,14 +36,14 @@ type IPRangeConfig struct {
reg *regexp.Regexp
}
// 获取新对象
// NewIPRangeConfig 获取新对象
func NewIPRangeConfig() *IPRangeConfig {
return &IPRangeConfig{
Id: stringutil.Rand(16),
}
}
// 从字符串中分析
// ParseIPRange 从字符串中分析
func ParseIPRange(s string) (*IPRangeConfig, error) {
if len(s) == 0 {
return nil, errors.New("invalid ip range")
@@ -79,15 +79,15 @@ func ParseIPRange(s string) (*IPRangeConfig, error) {
ipRange.IPTo = s
}
err := ipRange.Validate()
err := ipRange.Init()
if err != nil {
return nil, err
}
return ipRange, nil
}
// 校验
func (this *IPRangeConfig) Validate() error {
// Init 初始化校验
func (this *IPRangeConfig) Init() error {
if this.Type == IPRangeTypeCIDR {
if len(this.CIDR) == 0 {
return errors.New("cidr should not be empty")
@@ -116,10 +116,10 @@ func (this *IPRangeConfig) Validate() error {
return nil
}
// 是否包含某个IP
// Contains 是否包含某个IP
func (this *IPRangeConfig) Contains(ipString string) bool {
ip := net.ParseIP(ipString)
if ip.To4() == nil {
if ip == nil {
return false
}
if this.Type == IPRangeTypeCIDR {

View File

@@ -9,32 +9,52 @@ func TestGeoConfig_Contains(t *testing.T) {
a := assert.NewAssertion(t)
{
geo := NewIPRangeConfig()
geo.Type = IPRangeTypeRange
geo.IPFrom = "192.168.1.100"
geo.IPTo = "192.168.1.110"
a.IsNil(geo.Validate())
a.IsTrue(geo.Contains("192.168.1.100"))
a.IsTrue(geo.Contains("192.168.1.101"))
a.IsTrue(geo.Contains("192.168.1.110"))
a.IsFalse(geo.Contains("192.168.1.111"))
r := NewIPRangeConfig()
r.Type = IPRangeTypeRange
r.IPFrom = "192.168.1.100"
r.IPTo = "192.168.1.110"
a.IsNil(r.Init())
a.IsTrue(r.Contains("192.168.1.100"))
a.IsTrue(r.Contains("192.168.1.101"))
a.IsTrue(r.Contains("192.168.1.110"))
a.IsFalse(r.Contains("192.168.1.111"))
}
{
geo := NewIPRangeConfig()
geo.Type = IPRangeTypeCIDR
geo.CIDR = "192.168.1.1/24"
a.IsNil(geo.Validate())
a.IsTrue(geo.Contains("192.168.1.100"))
a.IsFalse(geo.Contains("192.168.2.100"))
r := NewIPRangeConfig()
r.Type = IPRangeTypeCIDR
r.CIDR = "192.168.1.1/24"
a.IsNil(r.Init())
a.IsTrue(r.Contains("192.168.1.100"))
a.IsFalse(r.Contains("192.168.2.100"))
}
{
geo := NewIPRangeConfig()
geo.Type = IPRangeTypeCIDR
geo.CIDR = "192.168.1.1/16"
a.IsNil(geo.Validate())
a.IsTrue(geo.Contains("192.168.2.100"))
r := NewIPRangeConfig()
r.Type = IPRangeTypeCIDR
r.CIDR = "192.168.1.1/16"
a.IsNil(r.Init())
a.IsTrue(r.Contains("192.168.2.100"))
}
{
r := NewIPRangeConfig()
r.Type = IPRangeTypeRange
r.IPFrom = "::1"
r.IPTo = "::1"
a.IsNil(r.Init())
a.IsTrue(r.Contains("::1"))
}
{
r := NewIPRangeConfig()
r.Type = IPRangeTypeRange
r.IPFrom = "::1"
r.IPTo = "::100"
a.IsNil(r.Init())
a.IsTrue(r.Contains("::1"))
a.IsTrue(r.Contains("::99"))
a.IsFalse(r.Contains("::101"))
}
}