darnahsan

darnahsan

DNS wireformat support in Elixir?

Are there any libs to work with DNS wire format ? I found this lib for erlang not sure how to work with this though

https://github.com/lateio/dnslib

anyone experienced with the format got some questions, working on a side project

I have this code where I can read the incoming application/dns-message body of the request

echo -n 'q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | base64 | curl -H 'content-type: application/dns-message' --data-binary @- https://cloudflare-dns.com/dns-query -o -

 post "/" do
    {:ok, body, conn} = Plug.Conn.read_body(conn)

    {:ok, query} = String.trim(body) |> Base.url_decode64(padding: false)

    IO.inspect(query, label: "Query")

    conn
    |> put_resp_content_type("application/dns-message")
    |> send_resp(
      200,
      Jason.encode!(%{
        msg: "I don't have a heart but I am alive!"
      })
    )
  end

i am trying to work this out Using DNS Wireformat

Not sure how to make a request to the upstream DNS from wireformat and return a response I am using GitHub - tungd/elixir-dns: DNS library for Elixir · GitHub to do the JSON format. Need to know how to get the wireformat to standard domain to send using elixir-dns and then convert the response back to wireformat

Marked As Solved

evadne

evadne

Just a thought but try inet_dns:decode/1 in Erlang as per otp/lib/kernel/src/inet_dns.erl at master · erlang/otp · GitHub and maybe other functions in that module will help you as well.

If it works, you will have the benefit of not having to pull an extra dependency

According to the RFC RFC 8484 - DNS Queries over HTTPS (DoH) the message is formatted as per RFC 1035 which should be what inet_dns:decode/1 accepts

Also Liked

darnahsan

darnahsan

after lack of my erlang understanding I decided to dig into tungd/elixir-dns code out of curiosity to see how it was handling things and it is doing what @evadne suggested and has some nice wrapper around erlang code which i ended up using. https://github.com/tungd/elixir-dns/blob/master/lib/dns/record.ex

Big thanks to the elixir community for being supportive and having a solution to almost everything :grin:

darnahsan

darnahsan

Thanks @evadne passed the 1st hurdle , will upate the thread with progress for others if they ever need this info. might ping here if I hit a roadblock :sweat_smile:

post "/" do
    {:ok, body, conn} = Plug.Conn.read_body(conn)

    IO.inspect(body, label: "body")
    :inet_dns.decode(body) |> IO.inspect(label: "inet_dns.decode")
    conn
    |> put_resp_content_type("application/dns-message")
    |> send_resp(
      200,
      Jason.encode!(%{
        msg: "I don't have a heart but I am alive!"
      })
    )
  end
body: <<171, 205, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 119, 119, 119, 7, 101, 120, 97, 
  109, 112, 108, 101, 3, 99, 111, 109, 0, 0, 1, 0, 1>>
inet_dns.decode: {:ok,
 {:dns_rec,
  {:dns_header, 43981, false, :query, false, false, true, false, false, 0},
  [{:dns_query, 'www.example.com', :a, :in}], [], [], []}}
bortzmeyer

bortzmeyer

Just for information, my DNS server written in Elixir uses (currently) the elixir-dns library. Because it does not seem actually maintained, I had to fork. My code may give you ideas.

Where Next?

Popular in Questions Top

chokchit
** (DBConnection.ConnectionError) connection not available and request was dropped from queue after 2733ms. You can configure how long re...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lists...
New
nobody
How to bind a phoenix app to a specific ip address? could not find anything about that, nowhere, unfortunately, but for me this is quite...
New
jaysoifer
Is there a way to rollback a specific migration and only that one (“skipping” all the other ones)? Would mix ecto.rollback -v 200809061...
New
beno
I will often find my self writing things similar to: case some_value do nil -&gt; something() "" -&gt; something() _ -&gt; somethi...
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

Other popular topics Top

sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
Nvim
Anybody knows a comprehensive comparison of Django and Phoenix, thanks for the help. Where are they similar? Where do they differ the m...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
AstonJ
Seen any cool LiveView demos, sample apps or examples? Please post them here! :003:
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New

We're in Beta

About us Mission Statement