pingI.go 834 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package nettools
  2. import (
  3. "crypto/tls"
  4. "fmt"
  5. "golang.org/x/net/context"
  6. "net"
  7. )
  8. type IPingResult interface {
  9. Result() int
  10. Error() error
  11. fmt.Stringer
  12. }
  13. type IPing interface {
  14. Ping() IPingResult
  15. PingContext(context.Context) IPingResult
  16. }
  17. func tlsVersionToString(ver uint16) string {
  18. switch ver {
  19. case tls.VersionSSL30:
  20. return "SSL 3.0"
  21. case tls.VersionTLS10:
  22. return "TLS 1.0"
  23. case tls.VersionTLS11:
  24. return "TLS 1.1"
  25. case tls.VersionTLS12:
  26. return "TLS 1.2"
  27. case tls.VersionTLS13:
  28. return "TLS 1.3"
  29. default:
  30. return "unknown"
  31. }
  32. }
  33. func isIPv4(ip net.IP) bool {
  34. return len(ip.To4()) == net.IPv4len
  35. }
  36. func isIPv6(ip net.IP) bool {
  37. return len(ip) == net.IPv6len && !isIPv4(ip)
  38. }
  39. func cloneIP(ip net.IP) net.IP {
  40. var ip2 net.IP
  41. if ip != nil {
  42. ip2 = make(net.IP, len(ip))
  43. copy(ip2, ip)
  44. }
  45. return ip2
  46. }