diff --git a/component/ca/fix_windows.go b/component/ca/fix_windows.go index 00c894d813..42511791ef 100644 --- a/component/ca/fix_windows.go +++ b/component/ca/fix_windows.go @@ -1,15 +1,14 @@ package ca import ( - "golang.org/x/sys/windows" + "github.com/metacubex/mihomo/constant/features" ) func init() { - majorVersion, _, _ := windows.RtlGetNtVersionNumbers() // crypto/x509: certificate validation in Windows fails to validate IP in SAN // https://github.com/golang/go/issues/37176 // As far as I can tell this is still the case on most older versions of Windows (but seems to be fixed in 10) - if majorVersion < 10 && len(_CaCertificates) > 0 { + if features.WindowsMajorVersion < 10 && len(_CaCertificates) > 0 { DisableSystemCa = true } } diff --git a/constant/features/version.go b/constant/features/version.go new file mode 100644 index 0000000000..1710e218eb --- /dev/null +++ b/constant/features/version.go @@ -0,0 +1,5 @@ +package features + +var WindowsMajorVersion uint32 +var WindowsMinorVersion uint32 +var WindowsBuildNumber uint32 diff --git a/constant/features/version_windows.go b/constant/features/version_windows.go new file mode 100644 index 0000000000..192df950fe --- /dev/null +++ b/constant/features/version_windows.go @@ -0,0 +1,10 @@ +package features + +import "golang.org/x/sys/windows" + +func init() { + version := windows.RtlGetVersion() + WindowsMajorVersion = version.MajorVersion + WindowsMinorVersion = version.MinorVersion + WindowsBuildNumber = version.MinorVersion +} diff --git a/listener/sing_tun/server_windows.go b/listener/sing_tun/server_windows.go index 4bc0483510..325cf09635 100644 --- a/listener/sing_tun/server_windows.go +++ b/listener/sing_tun/server_windows.go @@ -3,11 +3,10 @@ package sing_tun import ( "time" + "github.com/metacubex/mihomo/constant/features" "github.com/metacubex/mihomo/log" tun "github.com/metacubex/sing-tun" - - "golang.org/x/sys/windows" ) func tunNew(options tun.Options) (tunIf tun.Tun, err error) { @@ -30,8 +29,7 @@ func tunNew(options tun.Options) (tunIf tun.Tun, err error) { func init() { tun.TunnelType = InterfaceName - majorVersion, _, _ := windows.RtlGetNtVersionNumbers() - if majorVersion < 10 { + if features.WindowsMajorVersion < 10 { // to resolve "bind: The requested address is not valid in its context" EnforceBindInterface = true }