public virtual void GetRequestData(DnsRequestMessage request, DnsDatagramWriter writer) { var question = request.Question; /* * 1 1 1 1 1 1 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ID | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |QR| Opcode |AA|TC|RD|RA| Z | RCODE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QDCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ANCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | NSCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ARCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ * */ // 4 more bytes for the type and class writer.WriteInt16NetworkOrder((short)request.Header.Id); writer.WriteUInt16NetworkOrder(request.Header.RawFlags); writer.WriteInt16NetworkOrder(1); // we support single question only... (as most DNS servers anyways). writer.WriteInt16NetworkOrder(0); writer.WriteInt16NetworkOrder(0); writer.WriteInt16NetworkOrder(1); // one additional for the Opt record. writer.WriteHostName(question.QueryName); writer.WriteUInt16NetworkOrder((ushort)question.QuestionType); writer.WriteUInt16NetworkOrder((ushort)question.QuestionClass); /* +------------+--------------+------------------------------+ | Field Name | Field Type | Description | +------------+--------------+------------------------------+ | NAME | domain name | MUST be 0 (root domain) | | TYPE | u_int16_t | OPT (41) | | CLASS | u_int16_t | requestor's UDP payload size | | TTL | u_int32_t | extended RCODE and flags | | RDLEN | u_int16_t | length of all RDATA | | RDATA | octet stream | {attribute,value} pairs | +------------+--------------+------------------------------+ * */ var opt = new OptRecord(); writer.WriteHostName(""); writer.WriteUInt16NetworkOrder((ushort)opt.RecordType); writer.WriteUInt16NetworkOrder((ushort)opt.RecordClass); writer.WriteUInt32NetworkOrder((ushort)opt.InitialTimeToLive); writer.WriteUInt16NetworkOrder(0); }
/// <summary> /// 添加操作记录 /// </summary> /// <param name="opt"></param> public static void AddOptRecord(OptRecord opt) { string sql = string.Format("insert into c2lp_optRecord (OptTime,OptType,'Content','optNumber','optCustomerId','optTypeId') values('{0}','{1}','{2}','{3}','{4}','{5}');", opt.OptTime, opt.OptType, opt.Content, opt.OptNumber, opt.OptCustomerId, opt.OptTypeId); try { _SqlHelp.ExecuteNonQuery(sql, System.Data.CommandType.Text); } catch { } }
public virtual void GetRequestData(DnsRequestMessage request, DnsDatagramWriter writer) { var question = request.Question; /* * 1 1 1 1 1 1 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ID | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |QR| Opcode |AA|TC|RD|RA| Z | RCODE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QDCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ANCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | NSCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ARCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ * */ // 4 more bytes for the type and class writer.WriteInt16NetworkOrder((short)request.Header.Id); writer.WriteUInt16NetworkOrder(request.Header.RawFlags); writer.WriteInt16NetworkOrder(1); // we support single question only... (as most DNS servers anyways). writer.WriteInt16NetworkOrder(0); writer.WriteInt16NetworkOrder(0); if (request.QuerySettings.UseExtendedDns) { writer.WriteInt16NetworkOrder(1); // one additional for the Opt record. } else { writer.WriteInt16NetworkOrder(0); } writer.WriteHostName(question.QueryName); writer.WriteUInt16NetworkOrder((ushort)question.QuestionType); writer.WriteUInt16NetworkOrder((ushort)question.QuestionClass); if (request.QuerySettings.UseExtendedDns) { var opt = new OptRecord(size: request.QuerySettings.ExtendedDnsBufferSize, doFlag: request.QuerySettings.RequestDnsSecRecords); writer.WriteHostName(""); writer.WriteUInt16NetworkOrder((ushort)opt.RecordType); writer.WriteUInt16NetworkOrder((ushort)opt.RecordClass); writer.WriteUInt32NetworkOrder((ushort)opt.InitialTimeToLive); writer.WriteUInt16NetworkOrder(0); } }
/// <summary> /// 保存操作记录 /// </summary> /// <param name="optType">操作类型</param> /// <param name="content">操作内容</param> public static void SaveOptRecord(string optType, string content, DateTime orderTime, string number, int customerId) { if (!string.IsNullOrEmpty(optType) && (optType.Contains("重复扫描") || optType.Contains("扫描前请选择"))) { return; } OptRecord record = new OptRecord(); record.OptTime = orderTime.ToString("yyyy-MM-dd HH:mm:ss"); record.OptType = optType; record.Content = content.Replace("'", "''"); record.OptNumber = number; record.OptCustomerId = customerId; record.OptTypeId = GetOptTypeId(optType); OptRecordServer.AddOptRecord(record); }
public static DnsRecordBase ToDnsRecord(this ResourceRecord resourceRecord) { switch (resourceRecord.Type) { case DnsType.A: var a = (ARecord)resourceRecord; return(new ARSoft.Tools.Net.Dns.ARecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, a.Address)); case DnsType.NS: var ns = (NSRecord)resourceRecord; return(new NsRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, ns.Authority.ToDomainName())); case DnsType.MX: var mx = (MXRecord)resourceRecord; return(new MxRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, mx.Preference, mx.Exchange.ToDomainName())); case DnsType.CNAME: var cname = (CNAMERecord)resourceRecord; return(new CNameRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, cname.Target.ToDomainName())); case DnsType.SOA: var soa = (SOARecord)resourceRecord; return(new SoaRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, soa.PrimaryName.ToDomainName(), soa.Mailbox.ToDomainName(), soa.SerialNumber, soa.Refresh.Seconds, soa.Retry.Seconds, soa.Expire.Seconds, soa.Minimum.Seconds)); case DnsType.PTR: var ptr = (PTRRecord)resourceRecord; return(new PtrRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, ptr.DomainName.ToDomainName())); case DnsType.HINFO: var hinfo = (HINFORecord)resourceRecord; return(new HInfoRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, hinfo.Cpu, hinfo.OS)); case DnsType.TXT: var txt = (TXTRecord)resourceRecord; return(new TxtRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, txt.Strings)); case DnsType.AFSDB: var afsdg = (AFSDBRecord)resourceRecord; return(new AfsdbRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, afsdg.Subtype.ToAfsdbRecordAfsSubType(), afsdg.Target.ToDomainName())); case DnsType.AAAA: var aaaa = (AAAARecord)resourceRecord; return(new AaaaRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, aaaa.Address)); case DnsType.SRV: var srv = (SRVRecord)resourceRecord; return(new SrvRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, srv.Priority, srv.Weight, srv.Port, srv.Target.ToDomainName())); case DnsType.DNAME: var dname = (DNAMERecord)resourceRecord; return(new DNameRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, dname.Target.ToDomainName())); case DnsType.OPT: var opt = (OPTRecord)resourceRecord; var optRecord = new OptRecord(); optRecord.Options.AddRange(opt.Options.ToEDnsOption()); optRecord.Version = opt.Version; optRecord.IsDnsSecOk = opt.DO; optRecord.UdpPayloadSize = opt.RequestorPayloadSize; return(optRecord); case DnsType.DS: var ds = (DSRecord)resourceRecord; return(new DsRecord(resourceRecord.Name.ToDomainName(), ds.Class.ToRecordClass(), resourceRecord.TTL.Seconds, ds.KeyTag, ds.Algorithm.ToDnsSecAlgorithm(), ds.HashAlgorithm.ToDnsSecDigestType(), ds.Digest)); case DnsType.NSEC: var nsec = (NSECRecord)resourceRecord; return(new NSecRecord(resourceRecord.Name.ToDomainName(), resourceRecord.Class.ToRecordClass(), resourceRecord.TTL.Seconds, nsec.NextOwnerName.ToDomainName(), nsec.Types.ToRecordTypes())); case DnsType.DNSKEY: var dnskey = (DNSKEYRecord)resourceRecord; return(new DnsKeyRecord(resourceRecord.Name.ToDomainName(), resourceRecord.Class.ToRecordClass(), resourceRecord.TTL.Seconds, dnskey.Flags.ToDnsKeyFlags(), dnskey.Protocol, dnskey.Algorithm.ToDnsSecAlgorithm(), dnskey.PublicKey)); case DnsType.NSEC3: var nsec3 = (NSEC3Record)resourceRecord; return(new NSec3Record(resourceRecord.Name.ToDomainName(), resourceRecord.Class.ToRecordClass(), resourceRecord.TTL.Seconds, nsec3.HashAlgorithm.ToNSec3HashAlgorithm(), (byte)nsec3.Flags, nsec3.Iterations, nsec3.Salt, nsec3.NextHashedOwnerName, nsec3.Types.ToRecordTypes())); case DnsType.NSEC3PARAM: var nsec3param = (NSEC3PARAMRecord)resourceRecord; return(new NSec3ParamRecord(resourceRecord.Name.ToDomainName(), resourceRecord.Class.ToRecordClass(), resourceRecord.TTL.Seconds, nsec3param.HashAlgorithm.ToNSec3HashAlgorithm(), nsec3param.Flags, nsec3param.Iterations, nsec3param.Salt)); case DnsType.TKEY: var tkey = (TKEYRecord)resourceRecord; return(new TKeyRecord(resourceRecord.Name.ToDomainName(), tkey.Algorithm.ToTSigAlgorithm(), tkey.Inception, tkey.Expiration, tkey.Mode.ToTKeyRecordTKeyMode(), tkey.Error.ToReturnCode(), tkey.Key, tkey.OtherData)); case DnsType.TSIG: var tsig = (TSIGRecord)resourceRecord; return(new TSigRecord(resourceRecord.Name.ToDomainName(), tsig.Algorithm.ToTSigAlgorithm(), tsig.TimeSigned, tsig.Fudge, tsig.OriginalMessageId, tsig.Error.ToReturnCode(), tsig.OtherData, tsig.MAC)); case DnsType.RP: var rp = (RPRecord)resourceRecord; return(new RpRecord(resourceRecord.Name.ToDomainName(), resourceRecord.TTL.Seconds, rp.Mailbox.ToDomainName(), rp.TextName.ToDomainName())); case DnsType.AXFR: case DnsType.ANY: case DnsType.URI: case DnsType.MB: case DnsType.MG: case DnsType.MR: case DnsType.MINFO: case DnsType.MAILB: case DnsType.NULL: case DnsType.WKS: case DnsType.CAA: case DnsType.RRSIG: case DnsType.MD: case DnsType.MF: case DnsType.MAILA: return(new UnknownRecord(resourceRecord.Name.ToDomainName(), resourceRecord.Type.ToRecordType(), resourceRecord.Class.ToRecordClass(), resourceRecord.TTL.Seconds, resourceRecord.ToByteArray())); default: throw new ArgumentOutOfRangeException(nameof(resourceRecord.Type), resourceRecord.Type, null); } }
private static bool ExistEcs(OptRecord eDnsOptions) { return(eDnsOptions?.Options != null && eDnsOptions.Options.OfType <ClientSubnetOption>().Any()); }