diff --git a/drivers/123/driver.go b/drivers/123/driver.go index 0491ab36..27ffcefb 100644 --- a/drivers/123/driver.go +++ b/drivers/123/driver.go @@ -140,7 +140,7 @@ func (driver Pan123) Link(args base.Args, account *model.Account) (*base.Link, e } var resp Pan123DownResp var headers map[string]string - if args.IP != "" && args.IP != "::1" { + if !utils.IsLocalIPAddr(args.IP) { headers = map[string]string{ //"X-Real-IP": "1.1.1.1", "X-Forwarded-For": args.IP, diff --git a/utils/check.go b/utils/check.go new file mode 100644 index 00000000..65d62ee8 --- /dev/null +++ b/utils/check.go @@ -0,0 +1,28 @@ +package utils + +import ( + "net" +) + +func IsLocalIPAddr(ip string) bool { + return IsLocalIP(net.ParseIP(ip)) +} + +func IsLocalIP(ip net.IP) bool { + if ip == nil { + return false + } + if ip.IsLoopback() { + return true + } + + ip4 := ip.To4() + if ip4 == nil { + return false + } + + return ip4[0] == 10 || // 10.0.0.0/8 + (ip4[0] == 172 && ip4[1] >= 16 && ip4[1] <= 31) || // 172.16.0.0/12 + (ip4[0] == 169 && ip4[1] == 254) || // 169.254.0.0/16 + (ip4[0] == 192 && ip4[1] == 168) // 192.168.0.0/16 +}