Skip to content

Commit b810f5e

Browse files
authored
Merge pull request #470 from vr-varad/fix/add_random_functions
Fix: Add random functions (ipv4 and ipv6)
2 parents 1fe5db3 + 0088554 commit b810f5e

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

random/random.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,44 @@ func RandIPv4() net.IP {
152152
)
153153
}
154154

155+
// RandIPv4Private Generates a random private IPv4 address.
156+
func RandIPv4Private() net.IP {
157+
n, _ := rand.Int(rand.Reader, big.NewInt(3))
158+
switch n.Int64() {
159+
case 0:
160+
return net.IPv4(
161+
10,
162+
byte(RandIntRange(1, 256)),
163+
byte(RandIntRange(1, 256)),
164+
byte(RandIntRange(1, 256)),
165+
)
166+
case 1:
167+
return net.IPv4(
168+
172,
169+
byte(RandIntRange(16, 32)),
170+
byte(RandIntRange(1, 256)),
171+
byte(RandIntRange(1, 256)),
172+
)
173+
default:
174+
return net.IPv4(
175+
192,
176+
168,
177+
byte(RandIntRange(1, 256)),
178+
byte(RandIntRange(1, 256)),
179+
)
180+
}
181+
}
182+
183+
// RandomIPv4Loopback generates IPv4 Loopback address
184+
func RandIPv4Loopback() net.IP {
185+
return net.IPv4(
186+
127,
187+
byte(RandIntRange(1, 256)),
188+
byte(RandIntRange(1, 256)),
189+
byte(RandIntRange(1, 256)),
190+
)
191+
}
192+
155193
// RandIPv6 generates a random IPv6 address.
156194
func RandIPv6() net.IP {
157195
ip := make(net.IP, net.IPv6len)

random/random_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,43 @@ func TestRandIPv6(t *testing.T) {
192192
}
193193
}
194194
}
195+
196+
func TestRandIPv4Private(t *testing.T) {
197+
for range 100 {
198+
r := RandIPv4Private()
199+
parsed := net.ParseIP(r.String())
200+
if parsed == nil {
201+
t.Error("Generated IP is nil: " + r.String())
202+
}
203+
if parsed.To4() == nil {
204+
t.Error("Generated IP is not a valid IPv4 address: " + r.String())
205+
}
206+
207+
// Check if the IP is private
208+
isPrivate := r.IsPrivate()
209+
210+
if !isPrivate {
211+
t.Error("Generated IP is not in a private range: " + r.String())
212+
}
213+
}
214+
}
215+
216+
func TestRandIPv4Loopback(t *testing.T) {
217+
for range 5 {
218+
r := RandIPv4Loopback()
219+
parsed := net.ParseIP(r.String())
220+
if parsed == nil {
221+
t.Error("Generated IP is nil: " + r.String())
222+
}
223+
if parsed.To4() == nil {
224+
t.Error("Generated IP is not a valid IPv4 address: " + r.String())
225+
}
226+
227+
// Check if the IP is loopback
228+
isLoopback := r.IsLoopback()
229+
230+
if !isLoopback {
231+
t.Error("Generated IP is not the expected loopback address:" + r.String())
232+
}
233+
}
234+
}

0 commit comments

Comments
 (0)