public static string[] GetTXTRecord(string domain) { IntPtr ptr1 = IntPtr.Zero; IntPtr ptr2 = IntPtr.Zero; PDNS_TXT_RECORD DnsAnswer; if (Environment.OSVersion.Platform != PlatformID.Win32NT) { throw new NotSupportedException(); } ArrayList list1 = new ArrayList(); int num1 = DnsapiQuery.DnsQuery(ref domain, QueryTypes.DNS_TYPE_TXT, QueryOptions.DNS_QUERY_BYPASS_CACHE, 0, ref ptr1, 0); if (num1 != 0) { throw new Win32Exception(num1); } for (ptr2 = ptr1; !ptr2.Equals(IntPtr.Zero); ptr2 = DnsAnswer.pNext) { DnsAnswer = (PDNS_TXT_RECORD)Marshal.PtrToStructure(ptr2, typeof(PDNS_TXT_RECORD)); QueryTypes recType = (QueryTypes)DnsAnswer.wType; if (recType == QueryTypes.DNS_TYPE_TXT) { string Result = Marshal.PtrToStringAuto(DnsAnswer.pStringArray); list1.Add(Result); } } DnsapiQuery.DnsRecordListFree(ptr1, 0); return((string[])list1.ToArray(typeof(string))); }
// http://www.team-cymru.org/Services/ip-to-asn.html#dns /// <summary> /// Given an IP address, finds the origin AS number as advertised in BGP. Uses cymru.com DNS services to map IP to ASN. /// </summary> /// <param name="Address">IP address</param> /// <returns>Bar-delimited field showing AS number, component prefix, countrry of origin, and date of ASN registration with RIR</returns> public object FindASN(string Address) { IPAddress _addr; if (!IPAddress.TryParse(Address, out _addr)) { return(new ErrorWrapper((int)CVErrNum.ErrValue)); } if (_addr.AddressFamily != AddressFamily.InterNetwork && _addr.AddressFamily != AddressFamily.InterNetworkV6) { return(new ErrorWrapper((int)CVErrNum.ErrValue)); } StringBuilder sb = new StringBuilder(); List <string> AddrBytesStrings = new List <string>(); byte[] AddrBytes = _addr.GetAddressBytes(); bool FoundNonZeroValue = false; for (int i = AddrBytes.Length - 1; i >= 0; i--) { if (AddrBytes[i] > 0 || (AddrBytes[i] == 0 && FoundNonZeroValue == true)) { FoundNonZeroValue = true; if (_addr.AddressFamily == AddressFamily.InterNetworkV6) { AddrBytesStrings.Add(String.Format("{0:x1}", AddrBytes[i] % 0x10)); AddrBytesStrings.Add(String.Format("{0:x1}", AddrBytes[i] / 0x10)); } else { AddrBytesStrings.Add(String.Format("{0}", AddrBytes[i])); } } } sb.Append(String.Join(".", AddrBytesStrings)); if (_addr.AddressFamily == AddressFamily.InterNetworkV6) { sb.Append(".origin6.asn.cymru.com"); } else { sb.Append(".origin.asn.cymru.com"); } string[] output; try { output = DnsapiQuery.GetTXTRecord(sb.ToString()); } catch (Win32Exception e) { return(e.Message); } return(output[0]); }