zmap / zdns

Fast DNS Lookup Library and CLI Tool
Apache License 2.0
891 stars 121 forks source link

Split apart CLIConfig validation, fix error where localAddress was not copied to Resolver, and add some unit tests #389

Closed phillip-stephens closed 1 month ago

phillip-stephens commented 2 months ago

Closes #337

Changes

Testing

The original 3 queries mentioned in the Issue (#337) pass:

~/zdns on  phillip/337-loopback! ⌚ 3:07:29
$ echo example.com | ./zdns A --verbosity=5 --timeout=1 --retries=0
INFO[0000] No name servers specified. will use: 127.0.0.53:53
INFO[0000] using local address(es): [127.0.0.1]
DEBU[0000] DEPTH 01:    [****WIRE LOOKUP***  A   example.com   127.0.0.53:53]
{"data":{"additionals":[{"flags":"","type":"EDNS0","udpsize":65494,"version":0}],"answers":[{"answer":"93.184.215.14","class":"IN","name":"example.com","ttl":3540,"type":"A"}],"protocol":"udp","resolver":"127.0.0.53:53"},"name":"example.com","status":"NOERROR","timestamp":"2024-06-13T03:07:40Z"}

~/zdns on  phillip/337-loopback! ⌚ 3:07:40
$ echo example.com | ./zdns A --verbosity=5 --timeout=1 --retries=0 --local-interface=lo
INFO[0000] No name servers specified. will use: 127.0.0.53:53
INFO[0000] using local interface: lo
INFO[0000] using local address(es): [127.0.0.1 ::1]
DEBU[0000] DEPTH 01:    [****WIRE LOOKUP***  A   example.com   127.0.0.53:53]
{"data":{"additionals":[{"flags":"","type":"EDNS0","udpsize":65494,"version":0}],"answers":[{"answer":"93.184.215.14","class":"IN","name":"example.com","ttl":3527,"type":"A"}],"protocol":"udp","resolver":"127.0.0.53:53"},"name":"example.com","status":"NOERROR","timestamp":"2024-06-13T03:07:53Z"}

~/zdns on  phillip/337-loopback! ⌚ 3:07:53
$ echo example.com | ./zdns A --verbosity=5 --timeout=1 --retries=0 --local-addr=127.0.0.1
INFO[0000] No name servers specified. will use: 127.0.0.53:53
INFO[0000] using local address: 127.0.0.1
INFO[0000] using local address(es): [127.0.0.1]
DEBU[0000] DEPTH 01:    [****WIRE LOOKUP***  A   example.com   127.0.0.53:53]
{"data":{"additionals":[{"flags":"","type":"EDNS0","udpsize":65494,"version":0}],"answers":[{"answer":"93.184.215.14","class":"IN","name":"example.com","ttl":3518,"type":"A"}],"protocol":"udp","resolver":"127.0.0.53:53"},"name":"example.com","status":"NOERROR","timestamp":"2024-06-13T03:08:03Z"}
phillip-stephens commented 2 months ago

Most of the changes here are from pulling the ResolverConfig validation out into separate functions. I think this both makes it easier to reason through each function and makes testing easier.