private double FindHostnameSimilarity(Query query, DnsRule rule)
        {
            var hostnames = rule.Hostnames;
            if (query.QueryType != DnsRecordType.CNAME && query.QueryType != DnsRecordType.A)
            {
                if (hostnames.Any(hostname => hostname.HostnameType == HostnameType.Exact && hostname.HostnameEntry == query.Question))
                {
                    return 1;
                }
                return 0;
            }

            if (hostnames.Any(hostname => hostname.HostnameType == HostnameType.Exact && hostname.HostnameEntry == query.Question))
            {
                return 1;
            }

            if (hostnames.Any(hostname => hostname.HostnameType == HostnameType.Wildcard && query.Question.EndsWith(hostname.HostnameEntry)))
            {
                return 0.9;
            }

            return 0;
        }
 public void AddRule(DnsRule dnsRule)
 {
     _dnsRules.Add(dnsRule);
 }
        private double SimilarRuleTypes(Query query, DnsRule rule)
        {
            if (rule.RuleType.HasValue && (rule.RuleType.Value == DnsRuleType.NXDomain || rule.RuleType.Value == DnsRuleType.ResolveUpstream))
            {
                return 0.1;
            }

            if (rule.RecordType == query.QueryType)
            {
                return 1;
            }

            if (query.QueryType == DnsRecordType.A && rule.RecordType == DnsRecordType.CNAME)
            {
                return 0.9;
            }

            return 0;
        }