ubistvu se mi še sanja ne, neki sm probavu, uzemi kot checkpoint

This commit is contained in:
LovroG05
2025-03-12 21:41:30 +01:00
parent a7a814342e
commit 496a0c2d7a
4 changed files with 13 additions and 145 deletions

2
go.mod
View File

@@ -5,6 +5,6 @@ go 1.23.0
toolchain go1.23.4
require (
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/robfig/cron/v3 v3.0.1
golang.org/x/net v0.37.0
)

4
go.sum
View File

@@ -1,4 +1,4 @@
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=

10
main.go
View File

@@ -7,6 +7,7 @@ import (
"golang.org/x/net/dns/dnsmessage"
"log"
"net"
"sync"
)
func main() {
@@ -21,17 +22,22 @@ func main() {
}
}(udpServer)
var wg sync.WaitGroup
for {
buf := make([]byte, 514)
n, addr, err := udpServer.ReadFrom(buf)
if err != nil {
log.Println(err)
}
go process(udpServer, addr, buf[:n])
wg.Add(1)
go process(udpServer, addr, buf[:n], &wg)
}
//recordCache.cache.PurgeExpiredEntries()
}
func process(udp net.PacketConn, addr net.Addr, buf []byte) {
func process(udp net.PacketConn, addr net.Addr, buf []byte, wg *sync.WaitGroup) {
defer wg.Done()
msg, err := resolver.PacketParser(buf)
if err != nil {
log.Println(err)

View File

@@ -29,7 +29,7 @@ func resolveFromRoot(domainName string, id uint16, rtype dnsmessage.Type, ROOT_S
domainName += "."
}
for _, root_server := range ROOT_SERVERS {
for _, rootServer := range ROOT_SERVERS {
q := dnsmessage.Message{
Header: dnsmessage.Header{
@@ -44,7 +44,7 @@ func resolveFromRoot(domainName string, id uint16, rtype dnsmessage.Type, ROOT_S
},
},
}
response, err := query.SendQuery(root_server, q)
response, err := query.SendQuery(rootServer, q)
if err != nil {
return nil, err
}
@@ -195,141 +195,3 @@ func resolveFromRefferal(domainName string, id uint16, rtype dnsmessage.Type, se
return records, nil
}
//func ProcessDNSResponse(res dnsmessage.Message) ([]net.IP, []dnsmessage.Resource, map[string]net.IP, string, error) {
// if res.Header.RCode != dnsmessage.RCodeSuccess {
// return []net.IP{}, []dnsmessage.Resource{}, make(map[string]net.IP), "", fmt.Errorf("DNS q failed with RCode %d", res.Header.RCode)
// }
//
// ips := []net.IP{}
// nameservers := []dnsmessage.Resource{}
// nsIPMap := make(map[string]net.IP)
// var cnameTarget string
//
// for _, ans := range res.Answers {
// switch ans.Header.Type {
// case dnsmessage.TypeA:
// ips = append(ips, ans.Body.(*dnsmessage.AResource).A[:])
// case dnsmessage.TypeCNAME:
// cnameTarget = ans.Body.(*dnsmessage.CNAMEResource).CNAME.String()
// }
// }
//
// for _, authority := range res.Authorities {
// if _, ok := authority.Body.(*dnsmessage.NSResource); ok {
// nameservers = append(nameservers, authority)
// }
//
// if a, ok := authority.Body.(*dnsmessage.AResource); ok {
// nsIPMap[authority.Header.Name.String()] = net.IP(a.A[:])
// }
// }
//
// for _, additional := range res.Additionals {
// if additional.Header.Type == dnsmessage.TypeA {
// nsName := additional.Header.Name.String()
// nsIP := additional.Body.(*dnsmessage.AResource).A[:]
// nsIPMap[nsName] = nsIP
// }
// }
//
// return ips, nameservers, nsIPMap, cnameTarget, nil
//
//}
//
//func ResolveDN(domainName string, id uint16, rtype dnsmessage.Type) ([]net.IP, error) {
// return resolveRecursive(domainName, id, rtype, 0, map[string]bool{})
//}
//
//func resolveRecursive(domainName string, id uint16, rtype dnsmessage.Type, depth int, queriedNS map[string]bool) ([]net.IP, error) {
// if depth > 5 {
// return nil, fmt.Errorf("maximum recursion depth reached for %s", domainName)
// }
//
// servers := []string{"198.41.0.4"} // Root server
//
// if !strings.HasSuffix(domainName, ".") {
// domainName += "."
// }
//
// for {
// var nextServers []string
// queryFailed := true // Track if all queries fail
//
// for _, server := range servers {
// if queriedNS[server] {
// continue // Don't re-query same NS
// }
// queriedNS[server] = true
//
// q := dnsmessage.Message{
// Header: dnsmessage.Header{
// ID: id,
// RecursionDesired: true, // Ensure we don't depend on external recursion
// },
// Questions: []dnsmessage.Question{
// {
// Name: dnsmessage.MustNewName(domainName),
// Type: rtype,
// Class: dnsmessage.ClassINET,
// },
// },
// }
//
// res, err := query.SendQuery(server, q)
// if err != nil {
// fmt.Printf("Query to %s failed: %v\n", server, err)
// continue // Try next server
// }
//
// ips, nameservers, nsIPmap, cnameTarget, err := ProcessDNSResponse(res)
// if err != nil {
// fmt.Printf("Error processing response: %v\n", err)
// continue
// }
//
// if len(ips) > 0 {
// return ips, nil // Success
// }
//
// if cnameTarget != "" {
// fmt.Printf("Following CNAME: %s → %s\n", domainName, cnameTarget)
// return resolveRecursive(cnameTarget, id, rtype, depth+1, queriedNS)
// }
//
// for _, ns := range nameservers {
// nsDomain := ns.Body.(*dnsmessage.NSResource).NS.String()
//
// // Check for glue records
// if nsIP, found := nsIPmap[nsDomain]; found {
// fmt.Printf("Using glue record: %s → %s\n", nsDomain, nsIP)
// nextServers = append(nextServers, nsIP.String())
// continue
// } else {
// fmt.Printf("Resolving NS: %s\n", nsDomain)
// nsIPs, err := resolveRecursive(nsDomain, id, dnsmessage.TypeA, depth+1, queriedNS)
// if err != nil {
// fmt.Printf("Failed to resolve NS %s: %v\n", nsDomain, err)
// continue
// }
//
// for _, nsIP := range nsIPs {
// fmt.Printf("Resolved NS %s → %s\n", nsDomain, nsIP)
// nextServers = append(nextServers, nsIP.String())
// }
// }
//
// }
//
// if len(nextServers) > 0 {
// servers = nextServers
// queryFailed = false
// break
// }
// }
//
// if len(nextServers) == 0 || queryFailed {
// return nil, fmt.Errorf("failed to resolve %s", domainName)
// }
// }
//}