From 37b156b4f09ef17977fc4367cd3654f1f221f31a Mon Sep 17 00:00:00 2001 From: vr-varad Date: Sun, 2 Nov 2025 06:31:27 +0530 Subject: [PATCH 1/3] Fix: Add random.RandIPv4, random.RandIPv4Private, random.RandIPv4Loopback, random.RandIPv6 Functions Signed-off-by: vr-varad --- random/random.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/random/random.go b/random/random.go index 15c1e55..8761560 100644 --- a/random/random.go +++ b/random/random.go @@ -152,6 +152,44 @@ func RandIPv4() net.IP { ) } +// RandIPv4Private Generates a random private IPv4 address. +func RandIPv4Private() net.IP { + n, _ := rand.Int(rand.Reader, big.NewInt(3)) + switch n.Int64() { + case 0: + return net.IPv4( + 10, + byte(RandIntRange(1, 256)), + byte(RandIntRange(1, 256)), + byte(RandIntRange(1, 256)), + ) + case 1: + return net.IPv4( + 172, + byte(RandIntRange(16, 32)), + byte(RandIntRange(1, 256)), + byte(RandIntRange(1, 256)), + ) + default: + return net.IPv4( + 192, + 168, + byte(RandIntRange(1, 256)), + byte(RandIntRange(1, 256)), + ) + } +} + +// RandomIPv4Loopback generates IPv4 Loopback address +func RandIPv4Loopback() net.IP { + return net.IPv4( + 127, + 0, + 0, + 1, + ) +} + // RandIPv6 generates a random IPv6 address. func RandIPv6() net.IP { ip := make(net.IP, net.IPv6len) From 03b8a573d47df83a4a58c6c438b3b2ac2c08b9d0 Mon Sep 17 00:00:00 2001 From: vr-varad Date: Sun, 2 Nov 2025 06:36:54 +0530 Subject: [PATCH 2/3] Fix: Update Signed-off-by: vr-varad --- random/random_test.go | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/random/random_test.go b/random/random_test.go index 971708e..8caf1ab 100644 --- a/random/random_test.go +++ b/random/random_test.go @@ -192,3 +192,57 @@ func TestRandIPv6(t *testing.T) { } } } + +func TestRandIPv4Private(t *testing.T) { + for range 100 { + r := RandIPv4Private() + parsed := net.ParseIP(r.String()) + if parsed == nil { + t.Error("Generated IP is nil: " + r.String()) + } + if parsed.To4() == nil { + t.Error("Generated IP is not a valid IPv4 address: " + r.String()) + } + + // Check if the IP is in one of the private ranges + isPrivate := false + + // 10.0.0.0/8 (10.0.0.0 - 10.255.255.255) + if r[0] == 10 { + isPrivate = true + } + + // 172.16.0.0/12 (172.16.0.0 - 172.31.255.255) + if r[0] == 172 && r[1] >= 16 && r[1] <= 31 { + isPrivate = true + } + + // 192.168.0.0/16 (192.168.0.0 - 192.168.255.255) + if r[0] == 192 && r[1] == 168 { + isPrivate = true + } + + if !isPrivate { + t.Error("Generated IP is not in a private range: " + r.String()) + } + } +} + +func TestRandIPv4Loopback(t *testing.T) { + for range 100 { + r := RandIPv4Loopback() + parsed := net.ParseIP(r.String()) + if parsed == nil { + t.Error("Generated IP is nil: " + r.String()) + } + if parsed.To4() == nil { + t.Error("Generated IP is not a valid IPv4 address: " + r.String()) + } + + // Check if it's exactly 127.0.0.1 + expected := "127.0.0.1" + if r.String() != expected { + t.Error("Generated IP is not the expected loopback address. Expected: " + expected + ", Got: " + r.String()) + } + } +} From 008855493fbb1d0d2c6579559f568799849793d1 Mon Sep 17 00:00:00 2001 From: vr-varad Date: Mon, 3 Nov 2025 20:40:09 +0530 Subject: [PATCH 3/3] Fix: Update Signed-off-by: vr-varad --- random/random.go | 6 +++--- random/random_test.go | 30 ++++++++---------------------- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/random/random.go b/random/random.go index 8761560..f99d82e 100644 --- a/random/random.go +++ b/random/random.go @@ -184,9 +184,9 @@ func RandIPv4Private() net.IP { func RandIPv4Loopback() net.IP { return net.IPv4( 127, - 0, - 0, - 1, + byte(RandIntRange(1, 256)), + byte(RandIntRange(1, 256)), + byte(RandIntRange(1, 256)), ) } diff --git a/random/random_test.go b/random/random_test.go index 8caf1ab..150bb91 100644 --- a/random/random_test.go +++ b/random/random_test.go @@ -204,23 +204,8 @@ func TestRandIPv4Private(t *testing.T) { t.Error("Generated IP is not a valid IPv4 address: " + r.String()) } - // Check if the IP is in one of the private ranges - isPrivate := false - - // 10.0.0.0/8 (10.0.0.0 - 10.255.255.255) - if r[0] == 10 { - isPrivate = true - } - - // 172.16.0.0/12 (172.16.0.0 - 172.31.255.255) - if r[0] == 172 && r[1] >= 16 && r[1] <= 31 { - isPrivate = true - } - - // 192.168.0.0/16 (192.168.0.0 - 192.168.255.255) - if r[0] == 192 && r[1] == 168 { - isPrivate = true - } + // Check if the IP is private + isPrivate := r.IsPrivate() if !isPrivate { t.Error("Generated IP is not in a private range: " + r.String()) @@ -229,7 +214,7 @@ func TestRandIPv4Private(t *testing.T) { } func TestRandIPv4Loopback(t *testing.T) { - for range 100 { + for range 5 { r := RandIPv4Loopback() parsed := net.ParseIP(r.String()) if parsed == nil { @@ -239,10 +224,11 @@ func TestRandIPv4Loopback(t *testing.T) { t.Error("Generated IP is not a valid IPv4 address: " + r.String()) } - // Check if it's exactly 127.0.0.1 - expected := "127.0.0.1" - if r.String() != expected { - t.Error("Generated IP is not the expected loopback address. Expected: " + expected + ", Got: " + r.String()) + // Check if the IP is loopback + isLoopback := r.IsLoopback() + + if !isLoopback { + t.Error("Generated IP is not the expected loopback address:" + r.String()) } } }