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.
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
-snip- [dependencies] trust-dns-resolver = "0.20.1"
Next edit the
src/main.rs as follows.
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 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 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
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.