chore: Better reverse DNS resolving
release / release (push) Successful in 42s

This commit is contained in:
Artёm Mishin committed 2024-02-03 08:42:49 +03:00
1 parent 6cdf2b579d
commit 172730eab0
1 file changed
+72 -4
+72 -4
View File
@@ -1,6 +1,7 @@
package main
import (
"context"
"encoding/json"
"fmt"
"github.com/go-git/go-git/v5"
@@ -94,6 +95,71 @@ func updateRunner() {
}
}
func resolver(addr string) net.Resolver {
var (
dnsResolverProto = "udp" // Protocol to use for the DNS resolver
dnsResolverTimeoutMs = 5000 // Timeout (ms) for the DNS resolver (optional)
)
return net.Resolver{
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
d := net.Dialer{
Timeout: time.Duration(dnsResolverTimeoutMs) * time.Millisecond,
}
return d.DialContext(ctx, dnsResolverProto, addr)
},
}
}
func reverseDNS(ip net.IP) ([]string, error) {
results := make([]string, 0)
// resolve using system resolver
names, err := net.LookupAddr(ip.String())
if err == nil {
results = append(results, names...)
}
// resolve using 1.1.1.1
cloudflare := resolver("1.1.1.1")
names, err = cloudflare.LookupAddr(context.Background(), ip.String())
if err == nil {
results = append(results, names...)
} else {
log.Tracef("Failed to resolve reverse DNS using Cloduflare for %s: %s", ip.String(), err.Error())
}
// resolve using 8.8.8.8
google := resolver("8.8.8.8")
names, err = google.LookupAddr(context.Background(), ip.String())
if err == nil {
results = append(results, names...)
} else {
log.Tracef("Failed to resolve reverse DNS using Google for %s: %s", ip.String(), err.Error())
}
// resolve using 77.88.8.8
yandex := resolver("77.88.8.8")
names, err = yandex.LookupAddr(context.Background(), ip.String())
if err == nil {
results = append(results, names...)
} else {
log.Tracef("Failed to resolve reverse DNS using Yandex for %s: %s", ip.String(), err.Error())
}
// remove duplicates
unique := make(map[string]struct{})
for _, v := range results {
unique[v] = struct{}{}
}
results = make([]string, 0, len(unique))
for k := range unique {
results = append(results, k)
}
return results, nil
}
func update(repository *git.Repository, branch string, auth transport.AuthMethod, fileName string) {
type structuredBlacklist []string
@@ -269,11 +335,13 @@ func update(repository *git.Repository, branch string, auth transport.AuthMethod
logMessages.WriteString(fmt.Sprintf("server='%s' addr='%s'", v.Server, v.IP.String()))
commitMessage.WriteString(v.IP.String())
reverseDNSNames, err := net.LookupAddr(v.IP.String())
reverseDNSNames, err := reverseDNS(v.IP)
if err == nil {
line := fmt.Sprintf(" hostname='%s'", reverseDNSNames[0])
commitMessage.WriteString(line)
logMessages.WriteString(line)
for _, name := range reverseDNSNames {
line := fmt.Sprintf(" hostname='%s'", name)
commitMessage.WriteString(line)
logMessages.WriteString(line)
}
} else {
log.Warnf("Failed to lookup reverse DNS for %s: %s", v.IP.String(), err.Error())
}