This is the third article on using the trust-dns-resolver crate
Warning: This code is not intended to be used in production. You should review and adjust to your own needs.
Getting Started
First we will need to create our development environment.
cargo new trust-dns-resolver && cd $_
This will give us our standard rust directly structure. We need to add our crate to the Cargo.toml
-snip-
[dependencies]
trust-dns-resolver = "0.20.1"
Next edit the src/main.rs
as follows.
cargo run
This outputs the following
TXT Record 1:
globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=
TXT Record 2:
v=spf1 redirect=_spf.google.com
Explaining the code
Documentation for the TXT RData can be found here
Let’s take a look at what we are doing here.
Like the previous examples we create a resolver which will do the work of doing the DNS lookups.
Next we use the resolver to call txt_lookup()
and store the result into txt_response
.
txt_response
will contain either a TxtLookup
or an Err
. For this reason we need to handle these two cases. As before I am passing a reference to the display_txt()
function.
Within display_txt
I use match
to handle my two cases.
In the case of Err
. I do nothing and just report there were no TXT records.
In the case of TxtLookup
, I will need to do some more processing.
I simply make an iter()
out of txt_response
and loop over it and call to_string()
on each record in the iter()
.
I went down a rabbit hole for a while because I incorrectly thought I had to call txt_data()
which returns a Box<[u8]
, a smart pointer.
I hope you find this interesting and useful.
P.S: I might revisit this when I look at using regular expressions.