From 2945cfc2e647b07557049231cb04d2a1352c1052 Mon Sep 17 00:00:00 2001 From: vyzo Date: Tue, 16 Oct 2018 17:09:11 +0300 Subject: [PATCH] add IsPrivateAddr --- private.go | 15 +++++++++++++++ private_test.go | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/private.go b/private.go index e048dd5..fefd964 100644 --- a/private.go +++ b/private.go @@ -61,6 +61,21 @@ func IsPublicAddr(a ma.Multiaddr) bool { return false } +// IsPrivateAddr returns true if the IP part of the mutiadr is in a private network +func IsPrivateAddr(a ma.Multiaddr) bool { + ip, err := a.ValueForProtocol(ma.P_IP4) + if err == nil { + return inAddrRange(ip, Private4) + } + + ip, err = a.ValueForProtocol(ma.P_IP6) + if err == nil { + return inAddrRange(ip, Private6) + } + + return false +} + func inAddrRange(s string, ipnets []*net.IPNet) bool { ip := net.ParseIP(s) for _, ipnet := range ipnets { diff --git a/private_test.go b/private_test.go index d93fde3..ddd6485 100644 --- a/private_test.go +++ b/private_test.go @@ -16,6 +16,10 @@ func TestIsPublicAddr(t *testing.T) { t.Fatal("192.168.1.1 is not a public address!") } + if !IsPrivateAddr(a) { + t.Fatal("192.168.1.1 is a private address!") + } + a, err = ma.NewMultiaddr("/ip4/1.1.1.1/tcp/80") if err != nil { t.Fatal(err) @@ -24,4 +28,8 @@ func TestIsPublicAddr(t *testing.T) { if !IsPublicAddr(a) { t.Fatal("1.1.1.1 is a public address!") } + + if IsPrivateAddr(a) { + t.Fatal("1.1.1.1 is not a private address!") + } }