I’m stuck on Stage #gt1
When I use custom resolver, it cant find the IP address.
Here are my logs:
[tester::#YC9] Running tests for Stage #YC9 (Parse compressed packet)
[tester::#YC9] Starting DNS server on 127.0.0.1:2053
[tester::#YC9] Connecting to 127.0.0.1:2053 using UDP
[your_program] Logs from your program will appear here!
VVVVVVVVVVV
[your_program] 2025/02/28 04:35:07 Using custom resolver: 127.0.0.1:5354
^^^^^^^^^^^^^^^^
[your_program] Received 33 bytes from 127.0.0.1:57888: 2&
codecraftersio
[your_program] Received Bytes: [50 38 1 0 0 1 0 0 0 0 0 0 12 99 111 100 101 99 114 97 102 116 101 114 115 2 105 111 0 0 1 0 1]
[tester::#YC9] Querying the following in the same request (Messages with >> prefix are part of this log)
[tester::#YC9] >> ;abc.longassdomainname.com. IN A
[tester::#YC9] >> ;def.longassdomainname.com. IN A
[your_program] Received 53 bytes from 127.0.0.1:44570: ��abclongassdomainnamecomdef�
[your_program] Received Bytes: [134 173 1 0 0 2 0 0 0 0 0 0 3 97 98 99 17 108 111 110 103 97 115 115 100 111 109 97 105 110 110 97 109 101 3 99 111 109 0 0 1 0 1 3 100 101 102 192 16 0 1 0 1]
[your_program] 2025/02/28 04:35:08 Error resolving def.longassdomainname: lookup def.longassdomainname on [fdaa::3]:53: lame referral
[tester::#YC9] DNS query failed: read udp 127.0.0.1:44570->127.0.0.1:2053: i/o timeout.
[tester::#YC9] If you are seeing this after a while then it is likely that your server is not responding with appropriate id
[tester::#YC9] Test failed (try setting 'debug: true' in your codecrafters.yml to see more details)
And here’s a snippet of my code:
Resolver
nameserver := flag.String("resolver", "", "DNS resolver address")
flag.Parse()
var resolver *net.Resolver
if *nameserver != "" {
log.Printf("Using custom resolver: %s\n", *nameserver)
resolver = NewResolver(nameserver)
}
Using here
for _, q := range req.question {
if resolver != nil {
ips, err := resolver.LookupIPAddr(context.Background(), q.URL())
if err != nil {
log.Printf("Error resolving %s: %v", q.URL(), err)
return
// ip := net.ParseIP("172.0.0.1")
// ips = []net.IPAddr{{IP: ip}}
}
for _, ip := range ips {
ans := q.Answer(60, ip.IP)
response = append(response, ans.Serialize()...)
}
continue
}
ans := q.Answer(60, net.ParseIP("172.0.0.1").To4())
// fmt.Printf("Answer: %v\nSerializ: %v\n", ans, ans.Serialize())
response = append(response, ans.Serialize()...)
}
Here is the full code: https://git.codecrafters.io/b9111ce0b7faec9a