예제 #1
0
파일: api.cs 프로젝트: nickchal/pash
		public static List<DnsRecord> SendDnsQuery(Cmdlet HostCmdlet, string NameQueried, RecordType DNSQueryType, string[] DNSServerAddresses, api.QueryParameters Switches)
		{
			List<string> strs = new List<string>();
			QueryOptions queryOption = QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS;
			api.ValidateParameters(Switches);
			if (Switches.DnsOnly)
			{
				queryOption = QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP;
			}
			if (Switches.CacheOnly)
			{
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption | QueryOptions.DNS_QUERY_NO_WIRE_QUERY;
				queryOption = queryOption | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH;
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
			}
			if (Switches.DnssecOk)
			{
				queryOption = queryOption | QueryOptions.DNS_QUERY_DNSSEC_OK;
			}
			if (Switches.DnssecCd)
			{
				queryOption = queryOption | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED;
			}
			if (Switches.NoHostsFile)
			{
				queryOption = queryOption | QueryOptions.DNS_QUERY_NO_HOSTS_FILE;
			}
			if (Switches.LlmnrNetbiosOnly)
			{
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption | QueryOptions.DNS_QUERY_MULTICAST_ONLY;
				queryOption = queryOption | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS;
			}
			if (Switches.LlmnrFallback)
			{
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
			}
			if (Switches.LlmnrOnly)
			{
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption | QueryOptions.DNS_QUERY_MULTICAST_ONLY;
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
			}
			if (Switches.NetbiosFallback)
			{
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_TREAT_AS_FQDN | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption & (QueryOptions.DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE | QueryOptions.DNS_QUERY_USE_TCP_ONLY | QueryOptions.DNS_QUERY_NO_RECURSION | QueryOptions.DNS_QUERY_BYPASS_CACHE | QueryOptions.DNS_QUERY_NO_WIRE_QUERY | QueryOptions.DNS_QUERY_NO_LOCAL_NAME | QueryOptions.DNS_QUERY_NO_HOSTS_FILE | QueryOptions.DNS_QUERY_NO_NETBT | QueryOptions.DNS_QUERY_WIRE_ONLY | QueryOptions.DNS_QUERY_RETURN_MESSAGE | QueryOptions.DNS_QUERY_MULTICAST_ONLY | QueryOptions.DNS_QUERY_NO_MULTICAST | QueryOptions.DNS_QUERY_ADDRCONFIG | QueryOptions.DNS_QUERY_DUAL_ADDR | QueryOptions.DNS_QUERY_DONT_RESET_TTL_VALUES | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING | QueryOptions.DNS_QUERY_APPEND_MULTILABEL | QueryOptions.DNS_QUERY_RESERVED | QueryOptions.DNS_QUERY_CACHE_ONLY | QueryOptions.DNS_QUERY_ACCEPT_PARTIAL_UDP | QueryOptions.DNS_QUERY_CACHE_NO_FLAGS_MATCH | QueryOptions.DNS_QUERY_ALLOW_EMPTY_AUTH_RESP | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS | QueryOptions.DNS_QUERY_MULTICAST_VERIFY | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS | QueryOptions.DNS_QUERY_ALLOW_MULTIPLE_MESSAGES | QueryOptions.DNS_QUERY_DNSSEC_OK | QueryOptions.DNS_QUERY_DNSSEC_CHECKING_DISABLED | QueryOptions.DNS_QUERY_DNSSEC_REQUIRED | QueryOptions.DNS_QUERY_FILESERVER | QueryOptions.DNS_QUERY_MULTICAST_WAIT | QueryOptions.DNS_QUERY_USING_POLICY_TABLE | QueryOptions.DNS_QUERY_NETBIOS_ONLY | QueryOptions.DNS_QUERY_API_ANSI_UTF8);
				queryOption = queryOption | QueryOptions.DNS_QUERY_FALLBACK_NETBIOS;
			}
			if (Switches.NoIdn)
			{
				queryOption = queryOption | QueryOptions.DNS_QUERY_DISABLE_IDN_ENCODING;
			}
			if (Switches.NoRecursion)
			{
				queryOption = queryOption | QueryOptions.DNS_QUERY_NO_RECURSION;
			}
			if (Switches.QuickTimeout)
			{
				queryOption = queryOption | QueryOptions.DNS_QUERY_USE_QUICK_TIMEOUTS;
			}
			if (Switches.TcpOnly)
			{
				queryOption = queryOption | QueryOptions.DNS_QUERY_USE_TCP_ONLY;
			}
			if (strs.Count == 0)
			{
				strs.Add(NameQueried);
			}
			if (DNSServerAddresses != null)
			{
				for (int i = 0; i < (int)DNSServerAddresses.Length; i++)
				{
					DNSServerAddresses[i] = Dns.GetHostAddresses(DNSServerAddresses[i])[0].ToString();
				}
			}
			List<DnsRecord> dnsRecords = new List<DnsRecord>();
			foreach (string str in strs)
			{
				try
				{
					if (DNSQueryType != RecordType.UNKNOWN)
					{
						dnsRecords.AddRange(win32.GetDNSRecords(str, DNSServerAddresses, queryOption, DNSQueryType));
					}
					else
					{
						dnsRecords.AddRange(win32.GetDNSRecords(str, DNSServerAddresses, queryOption | QueryOptions.DNS_QUERY_DUAL_ADDR, RecordType.AAAA));
					}
					if (HostCmdlet != null)
					{
						object[] array = dnsRecords.ToArray();
						HostCmdlet.WriteVerbose(str);
						HostCmdlet.WriteDebug(queryOption.ToString());
						object[] objArray = array;
						for (int j = 0; j < (int)objArray.Length; j++)
						{
							object obj = objArray[j];
							HostCmdlet.WriteObject(obj);
						}
					}
				}
				catch (Win32Exception win32Exception1)
				{
					Win32Exception win32Exception = win32Exception1;
					if (HostCmdlet != null)
					{
						if (win32Exception.NativeErrorCode != 0x5b4)
						{
							HostCmdlet.WriteError(new ErrorRecord(win32Exception, win32Exception.NativeErrorCode.ToString(), ErrorCategory.ResourceUnavailable, str));
						}
						else
						{
							HostCmdlet.WriteError(new ErrorRecord(win32Exception, win32Exception.NativeErrorCode.ToString(), ErrorCategory.OperationTimeout, str));
						}
					}
				}
			}
			return dnsRecords;
		}
예제 #2
0
파일: api.cs 프로젝트: nickchal/pash
		internal static void ValidateParameters(api.QueryParameters Parameters)
		{
			if (!Parameters.LlmnrOnly || !Parameters.LlmnrFallback && !Parameters.LlmnrNetbiosOnly && !Parameters.NetbiosFallback && !Parameters.DnsOnly && !Parameters.DnssecOk && !Parameters.DnssecCd)
			{
				if (!Parameters.LlmnrNetbiosOnly || !Parameters.DnssecOk && !Parameters.DnssecCd && !Parameters.DnsOnly && !Parameters.LlmnrFallback)
				{
					if (!Parameters.DnsOnly || !Parameters.NetbiosFallback && !Parameters.LlmnrFallback)
					{
						return;
					}
					else
					{
						throw new NotSupportedException();
					}
				}
				else
				{
					throw new NotSupportedException();
				}
			}
			else
			{
				throw new NotSupportedException();
			}
		}