public static DnsFlags ParseFlags(ushort flags) { var replyCode = (byte)(flags & 0x000f); var nonAuthenticated = (flags & 0b1000) != 0; var answerAuthenticated = (flags & 0b10000) != 0; var recursionAvailable = (flags & 0b10000000) != 0; var recursionDesired = (flags & 0b100000000) != 0; var truncated = (flags & 0b1000000000) != 0; var authoritative = (flags & 0b10000000000) != 0; var opcodeByte = flags & 0b111100000000000; var opcode = Opcode.Standard; if (opcodeByte == 0) { opcode = Opcode.Standard; } var responce = (flags & 0b1000000000000000) != 0; var result = new DnsFlags { Response = responce, Opcode = opcode, Authoritative = authoritative, Truncated = truncated, RecursionDesired = recursionDesired, RecursionAvailable = recursionAvailable, AdBit = false, AnswerAuthenticated = answerAuthenticated, NonAuthenticated = nonAuthenticated, ReplyCode = replyCode }; return(result); }
public DnsTransaction(ushort _txnid, DnsFlags _flags, List <QuestionRecord> _questions, List <ResourceRecord> _answerRRs = null, List <ResourceRecord> _authorityRRs = null, List <ResourceRecord> _additionalRRs = null) { txnId = _txnid; flags = _flags; if (_questions == null) { throw new MalformedRecord(); } this.queries = _questions; if (_answerRRs == null) { _answerRRs = new List <ResourceRecord>(0); } this.answerRecords = _answerRRs; if (_authorityRRs == null) { _authorityRRs = new List <ResourceRecord>(0); } this.authorityRecords = _authorityRRs; if (_additionalRRs == null) { _additionalRRs = new List <ResourceRecord>(0); } this.additionalRecords = _additionalRRs; }
public static ushort CreateFlags(DnsFlags flags) { var response = BoolToBit(flags.Response); var opcode = (byte)flags.Opcode; var authoritative = BoolToBit(flags.Authoritative); var truncated = BoolToBit(flags.Truncated); var recursionDesired = BoolToBit(flags.RecursionDesired); var recursionAvailable = BoolToBit(flags.RecursionAvailable); var answerAuthenticated = BoolToBit(flags.AnswerAuthenticated); var nonAuthenticated = BoolToBit(flags.NonAuthenticated); var replyCode = flags.ReplyCode; var value = (response << 15) | ((opcode & 0b1111) << 11) | (authoritative << 10) | (truncated << 9) | (recursionDesired << 8) | (recursionAvailable << 7) | (answerAuthenticated << 5) | (nonAuthenticated << 4) | replyCode; return((ushort)value); }
public DnsTransaction(byte[] bytes) { ushort offset = 0; ushort qc; ushort ansc; ushort authc; ushort addc; this.txnId = GetLEUInt16(bytes, ref offset); this.flags = new DnsFlags(GetLEUInt16(bytes, ref offset)); qc = GetLEUInt16(bytes, ref offset); this.queries = new List <QuestionRecord>(qc); ansc = GetLEUInt16(bytes, ref offset); this.answerRecords = new List <ResourceRecord>(ansc); authc = GetLEUInt16(bytes, ref offset); this.authorityRecords = new List <ResourceRecord>(authc); addc = GetLEUInt16(bytes, ref offset); this.additionalRecords = new List <ResourceRecord>(addc); for (int n = 0; n < qc; n++) { this.queries.Add(new QuestionRecord(bytes, ref offset)); } for (int n = 0; n < ansc; n++) { this.answerRecords.Add(new ResourceRecord(bytes, ref offset)); } for (int n = 0; n < authc; n++) { this.authorityRecords.Add(new ResourceRecord(bytes, ref offset)); } for (int n = 0; n < addc; n++) { this.additionalRecords.Add(new ResourceRecord(bytes, ref offset)); } }
public DnsTransaction(ushort _txnid, DnsFlags _flags, QuestionRecord _question) : this(_txnid, _flags, oneItemList <QuestionRecord>(_question)) { }