jdomnitz / net-dns

DNS data model and Name Server with serializer for the wire and master file format

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

net-dns

Build Version docs

DNS data model with serializer/deserializer for the wire and "master file" format.

Features

  • Serialization for the wire and master file formats
  • Pretty printing of messages
  • Supports compressed domain names
  • Supports multiple strings in TXT records
  • Supports the extended 12-bit RCODE
  • Future proof: handles unknown resource records and EDNS options
  • Graceful truncation of messages
  • A name server that answeres DNS questions
  • Data models for
    • RFC 1035 Domain Names (DNS)
    • RFC 1183 New DNS RR Definitions
    • RFC 1996 Zone Changes (DNS NOTIFY)
    • RFC 2136 Dynamic Updates (DNS UPDATE)
    • RFC 2845 Secret Key Transaction Authentication for DNS (TSIG)
    • RFC 2930 Secret Key Establishment for DNS (TKEY RR)
    • RFC 3225 Indicating Resolver Support of DNSSEC
    • RFC 3599 DNS Extensions to Support IPv6
    • RFC 4034 Resource Records for the DNS Security Extensions (DNSSEC)
    • RFC 5001 DNS Name Server Identifier (NSID) Option
    • RFC 6672 DNAME Redirection in the DNS
    • RFC 6891 Extension Mechanisms for DNS (EDNS(0))
    • RFC 7828 The edns-tcp-keepalive EDNS0 Option
    • RFC 7830 The EDNS(0) Padding Option
    • RFC 8914 Extended DNS Errors
  • Targets .Net 6.0, 8.0

Getting started

Published releases are available on NuGet. To install, run the following command in the Package Manager Console.

PM> Install-Package Makaretu.Dns.New

Usage

Name Server

Create a name server that can answer questions for a zone.

using Makaretu.Dns.Resolving;

var catalog = new Catalog();
catalog.IncludeZone(...);
catalog.IncludeRootHints();
var resolver = new NameServer { Catalog = catalog };

Answer a question

var request = new Message();
request.Questions.Add(new Question { Name = "ns.example.com", Type = DnsType.AAAA });
var response = await resolver.ResolveAsync(request);

Data Model

using Makaretu.Dns

var msg = new Message
{
	AA = true,
	QR = true,
	Id = 1234
};
msg.Questions.Add(new Question 
{ 
	Name = "emanon.org" 
});
msg.Answers.Add(new ARecord 
{ 
	Name = "emanon.org",
	Address = IPAddress.Parse("127.0.0.1") 
});
msg.AuthorityRecords.Add(new SOARecord
{
	Name = "emanon.org",
	PrimaryName = "erehwon",
	Mailbox = "hostmaster.emanon.org"
});
msg.AdditionalRecords.Add(new ARecord 
{ 
	Name = "erehwon", 
	Address = IPAddress.Parse("127.0.0.1") 
});

Related projects

  • net-mdns - client and server for multicast DNS
  • net-udns - client for unicast DNS, DNS over HTTPS (DOH) and DNS over TLS (DOT)
  • DNSSEC - What Is It and Why Is It Important?

License

Copyright © 2018 Richard Schneider (makaretu@gmail.com)

The package is licensed under the MIT license. Refer to the LICENSE file for more information.

About

DNS data model and Name Server with serializer for the wire and master file format

License:MIT License


Languages

Language:C# 100.0%