public ConditionalForwardingDnsServer(IPEndPoint bindEndPoint, int udpListenerCount, int tcpListenerCount) :
     base(bindEndPoint, udpListenerCount, tcpListenerCount)
 {
     UpStreamDns = DnsClient.Default;
     PureDns     = DnsClient.Default;
     UpStreamEcs = null;
     PureEcs     = null;
     LoadDomains(specialDomains);
     LoadDomains(ptrDomains);
     QueryReceived += OnQueryReceived;
 }
예제 #2
0
    internal override void ParseRecordData(ReadOnlySpan <byte> resultData, int startPosition, int length)
    {
        int endPosition = startPosition + length;

        Options = new List <EDnsOptionBase>();
        while (startPosition < endPosition)
        {
            EDnsOptionType type       = (EDnsOptionType)DnsMessageBase.ParseUShort(resultData, ref startPosition);
            ushort         dataLength = DnsMessageBase.ParseUShort(resultData, ref startPosition);

            EDnsOptionBase option;

            switch (type)
            {
            case EDnsOptionType.LongLivedQuery:
                option = new LongLivedQueryOption();
                break;

            case EDnsOptionType.UpdateLease:
                option = new UpdateLeaseOption();
                break;

            case EDnsOptionType.NsId:
                option = new NsIdOption();
                break;

            case EDnsOptionType.Owner:
                option = new OwnerOption();
                break;

            case EDnsOptionType.DnssecAlgorithmUnderstood:
                option = new DnssecAlgorithmUnderstoodOption();
                break;

            case EDnsOptionType.DsHashUnderstood:
                option = new DsHashUnderstoodOption();
                break;

            case EDnsOptionType.Nsec3HashUnderstood:
                option = new Nsec3HashUnderstoodOption();
                break;

            case EDnsOptionType.ClientSubnet:
                option = new ClientSubnetOption();
                break;

            case EDnsOptionType.Expire:
                option = new ExpireOption();
                break;

            case EDnsOptionType.Cookie:
                option = new CookieOption();
                break;

            default:
                option = new UnknownOption(type);
                break;
            }

            option.ParseData(resultData, startPosition, dataLength);
            Options.Add(option);
            startPosition += dataLength;
        }
    }