Exemple #1
0
        public static byte[] Encode(this DnsMessage message)
        {
            var m = message.GetType().GetMethod(
                "Encode",
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new[] { typeof(bool), typeof(byte[]).MakeByRefType() },
                null);

            var args = new object[] { false, null };

            m.Invoke(message, args);

            return(args[1] as byte[]);
        }
Exemple #2
0
        static void Main()
        {
            var dnsQMsg = new DnsMessage();

            dnsQMsg.Questions.Add(new DnsQuestion(DomainName.Parse("pixiv.net"), RecordType.A, RecordClass.INet));
            dnsQMsg.IsEDnsEnabled = true;
            dnsQMsg.EDnsOptions.Options.Add(new ClientSubnetOption(24, IPAddress.Parse("0.0.0.0")));
            //dnsQMsg.Encode(false, out var bytes);

            var args = new object[] { false, null };
            var mms  = dnsQMsg.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic);

            foreach (var mm in mms)
            {
                if (mm.ToString() == "Int32 Encode(Boolean, Byte[] ByRef)")
                {
                    mm.Invoke(dnsQMsg, args);
                }
            }

            if ((args[1] as byte[])[2] == 0)
            {
                (args[1] as byte[])[2] = 1;
            }

            //var ibyte = MyDnsSend.GetQuestionData(DomainName.Parse("baidu.com").ToString().TrimEnd('.'), RecordType.A);
            //Console.WriteLine(ibyte);

            var dnsBase64String = Convert.ToBase64String((byte[])args[1]).TrimEnd('=')
                                  .Replace('+', '-').Replace('/', '_');

            Console.WriteLine(dnsBase64String);
            var dnsMsg =
                DnsMessage.Parse(new WebClient().DownloadData("https://doh1.blahdns.com/dns-query?dns=" + dnsBase64String));

            Console.WriteLine(dnsMsg.ReturnCode);
            foreach (var item in dnsMsg.AnswerRecords)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();
        }
Exemple #3
0
        public static byte[] Encode(DnsMessage dnsQMsg)
        {
            dnsQMsg.IsRecursionAllowed = true;
            dnsQMsg.IsRecursionDesired = true;
            dnsQMsg.TransactionID      = Convert.ToUInt16(new Random(DateTime.Now.Millisecond).Next(10));
            var args = new object[] { false, null };

            if (info == null)
            {
                foreach (var mInfo in dnsQMsg.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic))
                {
                    if (mInfo.ToString() == "Int32 Encode(Boolean, Byte[] ByRef)")
                    {
                        info = mInfo;
                    }
                }
            }
            info.Invoke(dnsQMsg, args);
            //var dnsBytes = args[1] as byte[];
            //if (dnsBytes[2] == 0) dnsBytes[2] = 1;
            return(args[1] as byte[]);
        }
Exemple #4
0
        public static byte[] Encode(DnsMessage dnsQMsg)
        {
            var args = new object[] { false, null };

            if (info == null)
            {
                foreach (var mInfo in dnsQMsg.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic))
                {
                    if (mInfo.ToString() == "Int32 Encode(Boolean, Byte[] ByRef)")
                    {
                        info = mInfo;
                    }
                }
            }
            info.Invoke(dnsQMsg, args);
            var dnsBytes = args[1] as byte[];

            if (dnsBytes[2] == 0)
            {
                dnsBytes[2] = 1;
            }
            return(dnsBytes);
        }