我需要创建一个 DNS 请求并获得响应。我在 Linux(Ubuntu) 中运行此命令以发送请求并获得响应:
dig +nocmd google.com txt +noall +answer
Run Code Online (Sandbox Code Playgroud)
回复:
google.com. 3400 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 100 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com. 100 IN TXT "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289"
google.com. 3400 IN TXT "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
google.com. 3400 IN TXT "v=spf1 include:_spf.google.com ~all"
Run Code Online (Sandbox Code Playgroud)
我可以在 Elixir 中使用dig命令吗?也许有一些库可以帮助我解决这个问题。不幸的是,到目前为止我还没有找到这样的库。我会很感激你的帮助。
虽然您可以使用 shelldig或其他 DNS 解析命令,但最好使用 Erlang 中内置的 DNS 解析功能:
{:ok, res} = :inet_res.nslookup('google.com', :in, :txt)
txt_rr =
res
|> :inet_dns.msg()
|> Keyword.fetch!(:enlist)
|> Enum.map(&:inet_dns.rr/1)
Run Code Online (Sandbox Code Playgroud)
将导致:
[
[
domain: 'google.com',
type: :txt,
class: :in,
ttl: 94,
data: ['globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=']
],
[
domain: 'google.com',
type: :txt,
class: :in,
ttl: 94,
data: ['facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95']
],
[
domain: 'google.com',
type: :txt,
class: :in,
ttl: 94,
data: ['docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e']
],
[
domain: 'google.com',
type: :txt,
class: :in,
ttl: 94,
data: ['docusign=1b0a6754-49b1-4db5-8540-d2c12664b289']
],
[
domain: 'google.com',
type: :txt,
class: :in,
ttl: 94,
data: ['v=spf1 include:_spf.google.com ~all']
]
]
Run Code Online (Sandbox Code Playgroud)