1
- // Copyright 2024 Blink Labs Software
1
+ // Copyright 2025 Blink Labs Software
2
2
//
3
3
// Use of this source code is governed by an MIT-style
4
4
// license that can be found in the LICENSE file or at
@@ -9,7 +9,8 @@ package dns
9
9
import (
10
10
"fmt"
11
11
"log/slog"
12
- "math/rand"
12
+ "crypto/rand"
13
+ "math/big"
13
14
"net"
14
15
"os"
15
16
"strings"
@@ -326,7 +327,11 @@ func randomNameserverAddress(nameservers map[string][]net.IP) net.IP {
326
327
tmpNameservers = append (tmpNameservers , addresses ... )
327
328
}
328
329
if len (tmpNameservers ) > 0 {
329
- tmpNameserver := tmpNameservers [rand .Intn (len (tmpNameservers ))]
330
+ n , err := rand .Int (rand .Reader , big .NewInt (int64 (len (tmpNameservers ))))
331
+ if err != nil {
332
+ return nil
333
+ }
334
+ tmpNameserver := tmpNameservers [n .Int64 ()]
330
335
return tmpNameserver
331
336
}
332
337
return nil
@@ -511,12 +516,20 @@ func randomNameserver(nameservers map[string][]net.IP) (string, string) {
511
516
mapKeys = append (mapKeys , k )
512
517
}
513
518
if len (mapKeys ) > 0 {
514
- randNsName := mapKeys [rand .Intn (len (mapKeys ))]
519
+ n , err := rand .Int (rand .Reader , big .NewInt (int64 (len (mapKeys ))))
520
+ if err != nil {
521
+ return "" , ""
522
+ }
523
+ randNsName := mapKeys [n .Int64 ()]
515
524
randNsAddresses := nameservers [randNsName ]
516
525
if randNsAddresses == nil {
517
526
return "" , ""
518
527
}
519
- randNsAddress := randNsAddresses [rand .Intn (len (randNsAddresses ))].String ()
528
+ n , err = rand .Int (rand .Reader , big .NewInt (int64 (len (randNsAddresses ))))
529
+ if err != nil {
530
+ return "" , ""
531
+ }
532
+ randNsAddress := randNsAddresses [n .Int64 ()].String ()
520
533
return randNsName , randNsAddress
521
534
}
522
535
return "" , ""
@@ -531,9 +544,11 @@ func createQuery(recordName string, recordType uint16) *dns.Msg {
531
544
532
545
func randomFallbackServer () string {
533
546
cfg := config .GetConfig ()
534
- return cfg .Dns .FallbackServers [rand .Intn (
535
- len (cfg .Dns .FallbackServers ),
536
- )]
547
+ n , err := rand .Int (rand .Reader , big .NewInt (int64 (len (cfg .Dns .FallbackServers ))))
548
+ if err != nil {
549
+ return ""
550
+ }
551
+ return cfg .Dns .FallbackServers [n .Int64 ()]
537
552
}
538
553
539
554
func formatMessageAnswerSection (section []dns.RR ) string {
0 commit comments