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[]); }
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(); }
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[]); }
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); }