示例#1
0
        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)));
        }
示例#2
0
        // 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]);
        }