net.go 705 B

12345678910111213141516171819202122232425262728
  1. // Copyright (C) 2015 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at http://mozilla.org/MPL/2.0/.
  6. package osutil
  7. import (
  8. "net"
  9. )
  10. func interfaceAddresses(network string, intf *net.Interface) []string {
  11. var out []string
  12. addrs, err := intf.Addrs()
  13. if err != nil {
  14. return out
  15. }
  16. for _, addr := range addrs {
  17. ipnet, ok := addr.(*net.IPNet)
  18. if ok && (network == "tcp" || (network == "tcp4" && len(ipnet.IP) == net.IPv4len) || (network == "tcp6" && len(ipnet.IP) == net.IPv6len)) {
  19. out = append(out, ipnet.IP.String())
  20. }
  21. }
  22. return out
  23. }