Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
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
            {
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
0
        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());
 }