34 lines
1.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|