auth.go 813 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package inbound
  2. import (
  3. "net"
  4. "net/netip"
  5. C "github.com/metacubex/mihomo/constant"
  6. )
  7. var skipAuthPrefixes []netip.Prefix
  8. func SetSkipAuthPrefixes(prefixes []netip.Prefix) {
  9. skipAuthPrefixes = prefixes
  10. }
  11. func SkipAuthPrefixes() []netip.Prefix {
  12. return skipAuthPrefixes
  13. }
  14. func SkipAuthRemoteAddr(addr net.Addr) bool {
  15. m := C.Metadata{}
  16. if err := m.SetRemoteAddr(addr); err != nil {
  17. return false
  18. }
  19. return skipAuth(m.AddrPort().Addr())
  20. }
  21. func SkipAuthRemoteAddress(addr string) bool {
  22. m := C.Metadata{}
  23. if err := m.SetRemoteAddress(addr); err != nil {
  24. return false
  25. }
  26. return skipAuth(m.AddrPort().Addr())
  27. }
  28. func skipAuth(addr netip.Addr) bool {
  29. if addr.IsValid() {
  30. for _, prefix := range skipAuthPrefixes {
  31. if prefix.Contains(addr.Unmap()) {
  32. return true
  33. }
  34. }
  35. }
  36. return false
  37. }