EonaCat.DnsTester/EonaCat.DnsTester/Helpers/DnsNameParser.cs

34 lines
1.0 KiB
C#

using System.Collections.Generic;
namespace EonaCat.DnsTester.Helpers
{
public class DnsNameParser
{
public static string ParseName(byte[] responseBytes, ref int offset)
{
List<string> labels = new List<string>();
int length;
while ((length = responseBytes[offset++]) != 0)
{
if ((length & 0xC0) == 0xC0)
{
// The name is compressed
int pointer = ((length & 0x3F) << 8) | responseBytes[offset++];
int savedOffset = offset;
offset = pointer;
labels.AddRange(ParseName(responseBytes, ref offset).Split('.'));
offset = savedOffset;
break;
}
// The name is not compressed
labels.Add(System.Text.Encoding.ASCII.GetString(responseBytes, offset, length));
offset += length;
}
return string.Join(".", labels);
}
}
}