Click here to Skip to main content
15,884,821 members
Articles / Programming Languages / C#

DNS.NET Resolver (C#)

Rate me:
Please Sign up or sign in to vote.
4.99/5 (96 votes)
11 Mar 2013CPOL6 min read 646K   18.6K   280  
A full implementation of a reusable DNS resolver component and a Dig.Net example application.
using System;
using System.Text;
/*
 * http://tools.ietf.org/rfc/rfc2065.txt
 * 
5.2 NXT RDATA Format

   The RDATA for an NXT RR consists simply of a domain name followed by
   a bit map.

   The type number for the NXT RR is 30.

                           1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         next domain name                                      /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    type bit map                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   The NXT RR type bit map is one bit per RR type present for the owner
   name similar to the WKS socket bit map.  The first bit represents RR
   type zero (an illegal type which should not be present.) A one bit
   indicates that at least one RR of that type is present for the owner
   name.  A zero indicates that no such RR is present.  All bits not
   specified because they are beyond the end of the bit map are assumed
   to be zero.  Note that bit 30, for NXT, will always be on so the
   minimum bit map length is actually four octets.  The NXT bit map
   should be printed as a list of RR type mnemonics or decimal numbers
   similar to the WKS RR.

   The domain name may be compressed with standard DNS name compression
   when being transmitted over the network.  The size of the bit map can
   be inferred from the RDLENGTH and the length of the next domain name.



 */
namespace Heijden.DNS
{
	public class RecordNXT : Record
	{
		public string NEXTDOMAINNAME;
		public byte[] BITMAP;

		public RecordNXT(RecordReader rr)
		{
			ushort length = rr.ReadUInt16(-2);
			NEXTDOMAINNAME = rr.ReadDomainName();
			length -= (ushort)rr.Position;
			BITMAP = new byte[length];
			BITMAP = rr.ReadBytes(length);
		}

		private bool IsSet(int bitNr)
		{
			int intByte = (int)(bitNr / 8);
			int intOffset = (bitNr % 8);
			byte b = BITMAP[intByte];
			int intTest = 1 << intOffset;
			if ((b & intTest) == 0)
				return false;
			else
				return true;
		}


		public override string ToString()
		{
			StringBuilder sb = new StringBuilder();
			for (int bitNr = 1; bitNr < (BITMAP.Length * 8); bitNr++)
			{
				if (IsSet(bitNr))
					sb.Append(" " + (Type)bitNr);
			}
			return string.Format("{0}{1}", NEXTDOMAINNAME, sb.ToString());
		}

	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Retired Van der Heijden Holding BV
Netherlands Netherlands
I'm Alphons van der Heijden, living in Lelystad, Netherlands, Europa, Earth. And currently I'm retiring from hard working ( ;- ), owning my own company. Because I'm full of energy, and a little to young to relax ...., I don't sit down, but create and recreate software solutions, that I like. Reinventing the wheel is my second nature. My interest is in the area of Internet technologies, .NET etc. I was there in 1992 when Mosaic came out, and from that point, my life changed dramatically, and so did the world, in fact. (Y)

Comments and Discussions