Merge pull request #244 from xnow-me/main

强制使用规范的网络路由地址
This commit is contained in:
bjdgyc 2023-06-14 16:39:03 +08:00 committed by GitHub
commit 9a6aaa87e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 11 deletions

0
build.sh Normal file → Executable file
View File

View File

@ -117,11 +117,18 @@ func SetGroup(g *Group) error {
continue continue
} }
ipMask, _, err := parseIpNet(v.Val) ipMask, ipNet, err := parseIpNet(v.Val)
if err != nil { if err != nil {
return errors.New("RouteInclude 错误" + err.Error()) return errors.New("RouteInclude 错误" + err.Error())
} }
// 给Mac系统下发路由时必须是标准的网络地址
if strings.Split(ipMask, "/")[0] != ipNet.IP.String() {
errMsg := fmt.Sprintf("RouteInclude 错误: 网络地址错误,建议: %s 改为 %s", v.Val, ipNet)
return errors.New(errMsg)
}
v.IpMask = ipMask v.IpMask = ipMask
routeInclude = append(routeInclude, v) routeInclude = append(routeInclude, v)
} }
@ -130,10 +137,16 @@ func SetGroup(g *Group) error {
routeExclude := []ValData{} routeExclude := []ValData{}
for _, v := range g.RouteExclude { for _, v := range g.RouteExclude {
if v.Val != "" { if v.Val != "" {
ipMask, _, err := parseIpNet(v.Val) ipMask, ipNet, err := parseIpNet(v.Val)
if err != nil { if err != nil {
return errors.New("RouteExclude 错误" + err.Error()) return errors.New("RouteExclude 错误" + err.Error())
} }
if strings.Split(ipMask, "/")[0] != ipNet.IP.String() {
errMsg := fmt.Sprintf("RouteInclude 错误: 网络地址错误,建议: %s 改为 %s", v.Val, ipNet)
return errors.New(errMsg)
}
v.IpMask = ipMask v.IpMask = ipMask
routeExclude = append(routeExclude, v) routeExclude = append(routeExclude, v)
} }

View File

@ -2,6 +2,7 @@ package dbdata
import ( import (
"errors" "errors"
"fmt"
"net" "net"
"strings" "strings"
"time" "time"
@ -31,11 +32,16 @@ func SetPolicy(p *Policy) error {
continue continue
} }
ipMask, _, err := parseIpNet(v.Val) ipMask, ipNet, err := parseIpNet(v.Val)
if err != nil { if err != nil {
return errors.New("RouteInclude 错误" + err.Error()) return errors.New("RouteInclude 错误" + err.Error())
} }
if strings.Split(ipMask, "/")[0] != ipNet.IP.String() {
errMsg := fmt.Sprintf("RouteInclude 错误: 网络地址错误,建议: %s 改为 %s", v.Val, ipNet)
return errors.New(errMsg)
}
v.IpMask = ipMask v.IpMask = ipMask
routeInclude = append(routeInclude, v) routeInclude = append(routeInclude, v)
} }
@ -45,10 +51,15 @@ func SetPolicy(p *Policy) error {
routeExclude := []ValData{} routeExclude := []ValData{}
for _, v := range p.RouteExclude { for _, v := range p.RouteExclude {
if v.Val != "" { if v.Val != "" {
ipMask, _, err := parseIpNet(v.Val) ipMask, ipNet, err := parseIpNet(v.Val)
if err != nil { if err != nil {
return errors.New("RouteExclude 错误" + err.Error()) return errors.New("RouteExclude 错误" + err.Error())
} }
if strings.Split(ipMask, "/")[0] != ipNet.IP.String() {
errMsg := fmt.Sprintf("RouteInclude 错误: 网络地址错误,建议: %s 改为 %s", v.Val, ipNet)
return errors.New(errMsg)
}
v.IpMask = ipMask v.IpMask = ipMask
routeExclude = append(routeExclude, v) routeExclude = append(routeExclude, v)
} }

View File

@ -21,19 +21,19 @@ func TestGetPolicy(t *testing.T) {
err = SetPolicy(&p2) err = SetPolicy(&p2)
ast.Nil(err) ast.Nil(err)
route := []ValData{{Val: "192.168.1.1/24"}} route := []ValData{{Val: "192.168.1.0/24"}}
p3 := Policy{Username: "a3", ClientDns: []ValData{{Val: "114.114.114.114"}}, RouteInclude: route, DsExcludeDomains: "com.cn,qq.com"} p3 := Policy{Username: "a3", ClientDns: []ValData{{Val: "114.114.114.114"}}, RouteInclude: route, DsExcludeDomains: "com.cn,qq.com"}
err = SetPolicy(&p3) err = SetPolicy(&p3)
ast.Nil(err) ast.Nil(err)
// 判断 IpMask // 判断 IpMask
ast.Equal(p3.RouteInclude[0].IpMask, "192.168.1.1/255.255.255.0") ast.Equal(p3.RouteInclude[0].IpMask, "192.168.1.0/255.255.255.0")
route2 := []ValData{{Val: "192.168.2.1/24"}} route2 := []ValData{{Val: "192.168.2.0/24"}}
p4 := Policy{Username: "a4", ClientDns: []ValData{{Val: "114.114.114.114"}}, RouteExclude: route2, DsIncludeDomains: "com.cn,qq.com"} p4 := Policy{Username: "a4", ClientDns: []ValData{{Val: "114.114.114.114"}}, RouteExclude: route2, DsIncludeDomains: "com.cn,qq.com"}
err = SetPolicy(&p4) err = SetPolicy(&p4)
ast.Nil(err) ast.Nil(err)
// 判断 IpMask // 判断 IpMask
ast.Equal(p4.RouteExclude[0].IpMask, "192.168.2.1/255.255.255.0") ast.Equal(p4.RouteExclude[0].IpMask, "192.168.2.0/255.255.255.0")
// 判断所有数据 // 判断所有数据
var userPolicy *Policy var userPolicy *Policy

View File

@ -17,12 +17,12 @@ func TestCheckUser(t *testing.T) {
// 添加一个组 // 添加一个组
dns := []ValData{{Val: "114.114.114.114"}} dns := []ValData{{Val: "114.114.114.114"}}
route := []ValData{{Val: "192.168.1.1/24"}} route := []ValData{{Val: "192.168.1.0/24"}}
g := Group{Name: group, Status: 1, ClientDns: dns, RouteInclude: route} g := Group{Name: group, Status: 1, ClientDns: dns, RouteInclude: route}
err := SetGroup(&g) err := SetGroup(&g)
ast.Nil(err) ast.Nil(err)
// 判断 IpMask // 判断 IpMask
ast.Equal(g.RouteInclude[0].IpMask, "192.168.1.1/255.255.255.0") ast.Equal(g.RouteInclude[0].IpMask, "192.168.1.0/255.255.255.0")
// 添加一个用户 // 添加一个用户
u := User{Username: "aaa", Groups: []string{group}, Status: 1} u := User{Username: "aaa", Groups: []string{group}, Status: 1}
@ -59,7 +59,7 @@ func TestCheckUser(t *testing.T) {
} }
// 添加用户策略 // 添加用户策略
dns2 := []ValData{{Val: "8.8.8.8"}} dns2 := []ValData{{Val: "8.8.8.8"}}
route2 := []ValData{{Val: "192.168.2.1/24"}} route2 := []ValData{{Val: "192.168.2.0/24"}}
p1 := Policy{Username: "aaa", Status: 1, ClientDns: dns2, RouteInclude: route2} p1 := Policy{Username: "aaa", Status: 1, ClientDns: dns2, RouteInclude: route2}
err = SetPolicy(&p1) err = SetPolicy(&p1)
ast.Nil(err) ast.Nil(err)