introduce a function to distinguish between IPv4 and IPv6 addresses

This commit is contained in:
Marten Seemann
2020-08-10 16:50:58 +07:00
parent fa4f0a9e7a
commit 876ab1d531
5 changed files with 40 additions and 19 deletions

10
internal/utils/ip.go Normal file
View File

@@ -0,0 +1,10 @@
package utils
import "net"
func IsIPv4(ip net.IP) bool {
// If ip is not an IPv4 address, To4 returns nil.
// Note that there might be some corner cases, where this is not correct.
// See https://stackoverflow.com/questions/22751035/golang-distinguish-ipv4-ipv6.
return ip.To4() != nil
}

17
internal/utils/ip_test.go Normal file
View File

@@ -0,0 +1,17 @@
package utils
import (
"net"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("IP", func() {
It("tells IPv4 and IPv6 addresses apart", func() {
Expect(IsIPv4(net.IPv4(127, 0, 0, 1))).To(BeTrue())
Expect(IsIPv4(net.IPv4zero)).To(BeTrue())
Expect(IsIPv4(net.IPv6zero)).To(BeFalse())
Expect(IsIPv4(net.IPv6loopback)).To(BeFalse())
})
})