修改ip分配的错误

This commit is contained in:
bjdgyc 2023-04-21 18:27:49 +08:00
parent 91ce4752f3
commit fed9066f22
5 changed files with 38 additions and 13 deletions

View File

@ -2,6 +2,7 @@ package dbdata
import (
"errors"
"net"
"time"
)
@ -25,6 +26,13 @@ func SetIpMap(v *IpMap) error {
return errors.New("IP或MAC错误")
}
macHw, err := net.ParseMAC(v.MacAddr)
if err != nil {
return errors.New("MAC错误")
}
// 统一macAddr的格式
v.MacAddr = macHw.String()
v.UpdatedAt = time.Now()
if v.Id > 0 {
err = Set(v)

View File

@ -108,7 +108,7 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
sess := sessdata.NewSession("")
sess.Username = cr.Auth.Username
sess.Group = cr.GroupSelect
sess.MacAddr = strings.ToLower(cr.MacAddressList.MacAddress)
oriMac := cr.MacAddressList.MacAddress
sess.UniqueIdGlobal = cr.DeviceId.UniqueIdGlobal
sess.UserAgent = userAgent
sess.DeviceType = ua.DeviceType
@ -116,7 +116,7 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
sess.RemoteAddr = r.RemoteAddr
// 获取客户端mac地址
sess.UniqueMac = true
macHw, err := net.ParseMAC(sess.MacAddr)
macHw, err := net.ParseMAC(oriMac)
if err != nil {
var sum [16]byte
if sess.UniqueIdGlobal != "" {
@ -130,6 +130,9 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
sess.MacAddr = macHw.String()
}
sess.MacHw = macHw
// 统一macAddr的格式
sess.MacAddr = macHw.String()
other := &dbdata.SettingOther{}
_ = dbdata.SettingGet(other)
rd := RequestData{SessionId: sess.Sid, SessionToken: sess.Sid + "@" + sess.Token,

View File

@ -13,7 +13,7 @@ func LinkHome(w http.ResponseWriter, r *http.Request) {
// fmt.Println(r.RemoteAddr)
// hu, _ := httputil.DumpRequest(r, true)
// fmt.Println("DumpHome: ", string(hu))
w.Header().Set("Server", "AnyLink")
w.Header().Set("Server", "AnyLinkOpenSource")
connection := strings.ToLower(r.Header.Get("Connection"))
userAgent := strings.ToLower(r.UserAgent())
if connection == "close" && (strings.Contains(userAgent, "anyconnect") || strings.Contains(userAgent, "openconnect")) {

View File

@ -6,6 +6,7 @@ import (
"log"
"net"
"net/http"
"net/http/httputil"
"os"
"strings"
"text/template"
@ -34,8 +35,10 @@ func HttpAddHeader(w http.ResponseWriter, key string, value string) {
func LinkTunnel(w http.ResponseWriter, r *http.Request) {
// TODO 调试信息输出
//hd, _ := httputil.DumpRequest(r, true)
//base.Debug("DumpRequest: ", string(hd))
if base.GetLogLevel() == base.LogLevelTrace {
hd, _ := httputil.DumpRequest(r, true)
base.Trace("LinkTunnel: ", string(hd))
}
// 判断session-token的值
cookie, err := r.Cookie("webvpn")

View File

@ -16,6 +16,8 @@ var (
// ipKeep and ipLease ipAddr => type
// ipLease = map[string]bool{}
ipPoolMux sync.Mutex
// 记录循环点
loopCurIp uint32
)
type ipPoolConfig struct {
@ -36,7 +38,19 @@ func initIpPool() {
}
IpPool.Ipv4IPNet = ipNet
IpPool.Ipv4Mask = net.IP(ipNet.Mask)
IpPool.Ipv4Gateway = net.ParseIP(base.Cfg.Ipv4Gateway)
ipv4Gateway := net.ParseIP(base.Cfg.Ipv4Gateway)
ipStart := net.ParseIP(base.Cfg.Ipv4Start)
ipEnd := net.ParseIP(base.Cfg.Ipv4End)
if !ipNet.Contains(ipv4Gateway) || !ipNet.Contains(ipStart) || !ipNet.Contains(ipEnd) {
panic("ip段 设置错误")
}
// ip地址池
IpPool.Ipv4Gateway = ipv4Gateway
IpPool.IpLongMin = utils.Ip2long(ipStart)
IpPool.IpLongMax = utils.Ip2long(ipEnd)
loopCurIp = IpPool.IpLongMin
// 网络地址零值
// zero := binary.BigEndian.Uint32(ip.Mask(mask))
@ -44,10 +58,6 @@ func initIpPool() {
// one, _ := ipNet.Mask.Size()
// max := min | uint32(math.Pow(2, float64(32-one))-1)
// ip地址池
IpPool.IpLongMin = utils.Ip2long(net.ParseIP(base.Cfg.Ipv4Start))
IpPool.IpLongMax = utils.Ip2long(net.ParseIP(base.Cfg.Ipv4End))
// 获取IpLease数据
// go cronIpLease()
}
@ -80,6 +90,7 @@ func initIpPool() {
// AcquireIp 获取动态ip
func AcquireIp(username, macAddr string, uniqueMac bool) net.IP {
base.Trace("AcquireIp:", username, macAddr, uniqueMac)
ipPoolMux.Lock()
defer ipPoolMux.Unlock()
@ -103,6 +114,7 @@ func AcquireIp(username, macAddr string, uniqueMac bool) net.IP {
}
// 存在ip记录
base.Trace("uniqueMac:", username, mi)
ipStr := mi.IpAddr
ip := net.ParseIP(ipStr)
// 跳过活跃连接
@ -120,6 +132,8 @@ func AcquireIp(username, macAddr string, uniqueMac bool) net.IP {
ipActive[ipStr] = true
return ip
}
// 删除当前macAddr
mi = &dbdata.IpMap{MacAddr: macAddr}
_ = dbdata.Del(mi)
} else {
@ -167,9 +181,6 @@ func AcquireIp(username, macAddr string, uniqueMac bool) net.IP {
return loopIp(username, macAddr, uniqueMac)
}
// 记录循环点
var loopCurIp = IpPool.IpLongMin
func loopIp(username, macAddr string, uniqueMac bool) net.IP {
var (
i uint32