public Dictionary <string, object[]> CheckDNS(string ipAddress, string svrFQDN) { Dictionary <string, object[]> dictionary = new Dictionary <string, object[]>(); string arg = string.Empty; ipAddress = ipAddress.TrimEnd(ManagedMethodProvider.aipArrayDelimiter); string[] array = ipAddress.Split(ManagedMethodProvider.aipArrayDelimiter); ManagedMethodProvider.IP4_ARRAY[] array2 = new ManagedMethodProvider.IP4_ARRAY[array.Length]; int num = 0; foreach (string ipAddress2 in array) { array2[num].AddrCount = 1U; array2[num].AddrArray = this.ConvertIPToUINT(ipAddress2); num++; } DateTime d = DateTime.UtcNow.ToLocalTime(); string str = Strings.ServerFQDNDisplayName; for (int j = 0; j < num; j++) { d = DateTime.UtcNow.ToLocalTime(); arg = this.ProcessDnsQuery(svrFQDN, array[j], array2[j]); dictionary.Add("A", new object[] { string.Format("TimeSpan = {0}", (DateTime.UtcNow.ToLocalTime() - d).TotalMilliseconds.ToString()), string.Format("DNS Server = {0}", array[j]), str + " = " + svrFQDN, string.Format("DNS Query Result = {0}", arg) }); } return(dictionary); }
private string ProcessDnsQuery(string pName, string ipDNSName, ManagedMethodProvider.IP4_ARRAY ipDNS) { IntPtr intPtr = IntPtr.Zero; IntPtr zero = IntPtr.Zero; StringBuilder stringBuilder = new StringBuilder(); DnsApi.DnsRecordType dnsRecordType = DnsApi.DnsRecordType.A; DnsApi.DnsQueryOptions options = DnsApi.DnsQueryOptions.ByPassCache | DnsApi.DnsQueryOptions.TreatAsFqdn; try { intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(ipDNS)); Marshal.StructureToPtr(ipDNS, intPtr, false); int num = DnsApi.DnsQuery(pName, dnsRecordType, options, intPtr, ref zero, IntPtr.Zero); if (num == 0) { IntPtr intPtr2 = zero; do { DnsApi.DNS_RECORD_BASE dns_RECORD_BASE = (DnsApi.DNS_RECORD_BASE)Marshal.PtrToStructure(intPtr2, typeof(DnsApi.DNS_RECORD_BASE)); if (dns_RECORD_BASE.WType == (ushort)dnsRecordType) { DnsApi.DnsRecordType wtype = (DnsApi.DnsRecordType)dns_RECORD_BASE.WType; if (wtype == DnsApi.DnsRecordType.A) { stringBuilder.Append(this.ConvertUINTToIP(((DnsApi.DNS_RECORD_A)Marshal.PtrToStructure(intPtr2, typeof(DnsApi.DNS_RECORD_A))).A) + ";"); } } intPtr2 = dns_RECORD_BASE.PNext; }while (intPtr2 != IntPtr.Zero); if (stringBuilder.Length > 0) { stringBuilder = (stringBuilder = new StringBuilder(stringBuilder.ToString().TrimEnd(ManagedMethodProvider.aip6AdrDelimiter))); } } else if (num != 9501) { Win32Exception ex = new Win32Exception(num); throw ex; } } catch (Exception ex2) { throw new Exception(Strings.ErrorDNSQueryA(ipDNSName, pName, ex2.Message), ex2); } finally { if (zero != IntPtr.Zero) { DnsApi.DnsRecordListFree(zero, DnsApi.DnsFreeType.DnsFreeRecordList); } if (intPtr != IntPtr.Zero) { Marshal.FreeHGlobal(intPtr); } } return(stringBuilder.ToString()); }