1
0

localaddrs.go 776 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. //go:build !android
  2. package nicfinder
  3. import (
  4. "context"
  5. "errors"
  6. "fmt"
  7. "log/slog"
  8. "net"
  9. "net/netip"
  10. )
  11. func localAddrs(ctx context.Context, l *slog.Logger, filter Filter) ([]netip.Addr, error) {
  12. ifaces, err := net.Interfaces()
  13. if err != nil {
  14. return nil, fmt.Errorf("failed to enumerate local interfaces: %w", err)
  15. }
  16. var out []netip.Addr
  17. var errs []error
  18. for _, i := range ifaces {
  19. if !allowName(ctx, l, filter, i.Name) {
  20. continue
  21. }
  22. addrs, err := i.Addrs()
  23. if err != nil {
  24. errs = append(errs, fmt.Errorf("failed to get addresses for %s: %w", i.Name, err))
  25. continue
  26. }
  27. for _, rawAddr := range addrs {
  28. if addr, ok := allowedAddr(ctx, l, filter, rawAddr); ok {
  29. out = append(out, addr)
  30. }
  31. }
  32. }
  33. return out, errors.Join(errs...)
  34. }