massrdns

- dynamic reverse dns lookup with rotating servers
git clone git://git.acid.vegas/massrdns.git
Log | Files | Refs | Archive | README | LICENSE

commit c95e0f15f71125ce68b203db09377e55b16745c3
parent ee006d166d5d621fcbeaa1919ccd59b12a4e5879
Author: acidvegas <acid.vegas@acid.vegas>
Date: Thu, 21 Sep 2023 15:16:54 -0400

Made error displaying optional, fixing cidr splitting (again)

Diffstat:
Amassrdns | 0
Mmassrdns.go | 40+++++++++++++++++++++++++---------------

2 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/massrdns b/massrdns
Binary files differ.
diff --git a/massrdns.go b/massrdns.go
@@ -16,6 +16,7 @@ import (
 
 var dnsServers []string
 var failureCounts = make(map[string]int)
+var showErrors bool
 
 func loadDNSServersFromFile(filePath string) ([]string, error) {
 	var servers []string
@@ -61,7 +62,7 @@ func reverseDNSLookup(ip string, server string) (string, error) {
 		PreferGo: true,
 		Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
 			d := net.Dialer{}
-			return d.DialContext(ctx, network, server)
+			return d.DialContext(ctx, "udp", server)
 		},
 	}
 
@@ -70,13 +71,13 @@ func reverseDNSLookup(ip string, server string) (string, error) {
 		if isNetworkError(err) {
 			return "", err
 		}
-		return fmt.Sprintf("%s | %s | Error: %s", time.Now().Format("03:04:05 PM"), server, err), nil
+		return "", err
 	}
 
 	if len(names) == 0 {
-		return fmt.Sprintf("%s | %s | No PTR records", time.Now().Format("03:04:05 PM"), server), nil
+		return fmt.Sprintf("%s | %-18s | No PTR records", time.Now().Format("03:04:05 PM"), server), nil
 	}
-	return fmt.Sprintf("%s | %s | %s", time.Now().Format("03:04:05 PM"), server, names[0]), nil
+	return fmt.Sprintf("%s | %s | %-18s", time.Now().Format("03:04:05 PM"), server, names[0]), nil
 }
 
 func isNetworkError(err error) bool {
@@ -108,6 +109,8 @@ func splitCIDR(cidr string, parts int) ([]*net.IPNet, error) {
 	if err != nil {
 		return nil, err
 	}
+	startIP := make(net.IP, len(ip))
+	copy(startIP, ip)
 
 	maskSize, _ := ipNet.Mask.Size()
 
@@ -126,10 +129,11 @@ func splitCIDR(cidr string, parts int) ([]*net.IPNet, error) {
 	var subnets []*net.IPNet
 	for i := 0; i < parts; i++ {
 		subnets = append(subnets, &net.IPNet{
-			IP:   ip,
+			IP:   make(net.IP, len(startIP)),
 			Mask: net.CIDRMask(newMaskSize, 32),
 		})
-		incrementIPBy(ip, 1<<uint(32-newMaskSize))
+		copy(subnets[i].IP, startIP)
+		incrementIPBy(startIP, 1<<uint(32-newMaskSize))
 	}
 
 	return subnets, nil
@@ -153,26 +157,31 @@ func worker(cidr *net.IPNet, resultsChan chan string) {
 
 			result, err := reverseDNSLookup(ip.String(), randomServer)
 
-			// Check for network errors
-			if err != nil && isNetworkError(err) {
-				failureCounts[randomServer]++
-				if failureCounts[randomServer] > 10 {
-					dnsServers = removeFromList(dnsServers, randomServer)
-					delete(failureCounts, randomServer)
+			if err != nil {
+				if showErrors {
+					resultsChan <- fmt.Sprintf("%s | %-18s | Error: %s", time.Now().Format("03:04:05 PM"), randomServer, err)
+				}
+
+				if isNetworkError(err) {
+					failureCounts[randomServer]++
+					if failureCounts[randomServer] > 10 {
+						dnsServers = removeFromList(dnsServers, randomServer)
+						delete(failureCounts, randomServer)
+					}
 				}
 
 				triedServers[randomServer] = true
 				retries--
 				continue
-			} else if err == nil {
+			} else {
 				resultsChan <- result
 				success = true
 				break
 			}
 		}
 
-		if !success {
-			resultsChan <- fmt.Sprintf("%s | %s | Max retries reached", time.Now().Format("03:04:05 PM"), ip)
+		if !success && showErrors {
+			resultsChan <- fmt.Sprintf("%s | %-18s | Max retries reached", time.Now().Format("03:04:05 PM"), ip)
 		}
 	}
 }
@@ -185,6 +194,7 @@ func main() {
 	flag.StringVar(&cidr, "cidr", "", "IP address CIDR to perform reverse DNS lookup")
 	flag.IntVar(&concurrency, "concurrency", 10, "Number of concurrent workers for reverse DNS lookup")
 	flag.StringVar(&dnsFile, "dnsfile", "", "Path to the file containing DNS servers (one per line)")
+	flag.BoolVar(&showErrors, "errors", false, "Display errors in the output") // New flag
 	flag.Parse()
 
 	if cidr == "" || dnsFile == "" {