示例#1
0
 private byte[] formHeader(dGramHeader dHead)
 {
     byte[] result = new byte[12];
     result[0]  = (byte)((dHead.ID >> 8) & 0xFF);
     result[1]  = (byte)(dHead.ID & 0xFF);
     result[2]  = (byte)((dHead.QR << 7) + (((byte)dHead.OpCode << 3) & 0xF) + (dHead.AA << 2) + (dHead.TC << 1) + dHead.RD);
     result[3]  = (byte)((dHead.RA << 7) + (dHead.Z << 4) + ((byte)dHead.RCode & 0xF));
     result[4]  = (byte)((dHead.QDCount >> 8) & 0xFF);
     result[5]  = (byte)(dHead.QDCount & 0xFF);
     result[6]  = (byte)((dHead.ANCount >> 8) & 0xFF);
     result[7]  = (byte)(dHead.ANCount & 0xFF);
     result[8]  = (byte)((dHead.NSCount >> 8) & 0xFF);
     result[9]  = (byte)(dHead.NSCount & 0xFF);
     result[10] = (byte)((dHead.ARCount >> 8) & 0xFF);
     result[11] = (byte)(dHead.ARCount & 0xFF);
     return(result);
 }
示例#2
0
        private byte[] dataGram(string domainName, SendBy sendBy)
        {
            string[]    dName    = domainName.Split('.');
            uint        dgLength = (uint)sendBy * 2;
            uint        bodyLength;
            dGramHeader dHead = new dGramHeader();

            dHead.ID      = 0;
            dHead.QR      = 0;
            dHead.OpCode  = OpCodes.QUERY;
            dHead.AA      = 0;
            dHead.TC      = 0;
            dHead.RD      = 1;
            dHead.RA      = 0;
            dHead.Z       = 0;
            dHead.RCode   = RCodes.Success;
            dHead.QDCount = 1;
            dHead.ANCount = 0;
            dHead.NSCount = 0;
            dHead.ARCount = 0;

            byte[] header   = formHeader(dHead);
            byte[] question = formQuestion(dName);
            bodyLength = (uint)(header.Length + question.Length);

            byte[] dGram = new byte[dgLength + bodyLength];
            int    ptr   = 0;

            if (sendBy == SendBy.TCP)
            {
                dGram[0] = (byte)((bodyLength >> 8) & 0xFF);
                dGram[1] = (byte)(bodyLength & 0xFF);
                ptr      = 2;
            }
            for (int n = 0; n < header.Length; n++)
            {
                dGram[ptr] = header[n];
                ptr       += 1;
            }
            for (int m = 0; m < question.Length; m++)
            {
                dGram[ptr] = question[m];
                ptr       += 1;
            }
            return(dGram);
        }
示例#3
0
 private byte[] formHeader(dGramHeader dHead)
 {
     byte[] result = new byte[12];
     result[0] = (byte)((dHead.ID >> 8) & 0xFF);
     result[1] = (byte)(dHead.ID & 0xFF);
     result[2] = (byte)((dHead.QR << 7) + (((byte)dHead.OpCode << 3) & 0xF) + (dHead.AA << 2) + (dHead.TC << 1) + dHead.RD);
     result[3] = (byte)((dHead.RA << 7) + (dHead.Z << 4) + ((byte)dHead.RCode & 0xF));
     result[4] = (byte)((dHead.QDCount >> 8) & 0xFF);
     result[5] = (byte)(dHead.QDCount & 0xFF);
     result[6] = (byte)((dHead.ANCount >> 8) & 0xFF);
     result[7] = (byte)(dHead.ANCount & 0xFF);
     result[8] = (byte)((dHead.NSCount >> 8) & 0xFF);
     result[9] = (byte)(dHead.NSCount & 0xFF);
     result[10] = (byte)((dHead.ARCount >> 8) & 0xFF);
     result[11] = (byte)(dHead.ARCount & 0xFF);
     return result;
 }
示例#4
0
        private byte[] dataGram(string domainName,SendBy sendBy)
        {
            string[] dName = domainName.Split('.');
            uint dgLength = (uint)sendBy * 2;
            uint bodyLength;
            dGramHeader dHead = new dGramHeader();
            dHead.ID = 0;
            dHead.QR = 0;
            dHead.OpCode = OpCodes.QUERY;
            dHead.AA = 0;
            dHead.TC = 0;
            dHead.RD = 1;
            dHead.RA = 0;
            dHead.Z = 0;
            dHead.RCode = RCodes.Success;
            dHead.QDCount = 1;
            dHead.ANCount = 0;
            dHead.NSCount = 0;
            dHead.ARCount = 0;

            byte[] header = formHeader(dHead);
            byte[] question = formQuestion(dName);
            bodyLength = (uint)(header.Length + question.Length);

            byte[] dGram = new byte[dgLength + bodyLength];
            int ptr = 0;
            if (sendBy == SendBy.TCP)
            {
                dGram[0] = (byte)((bodyLength >> 8) & 0xFF);
                dGram[1] = (byte)(bodyLength & 0xFF);
                ptr = 2;
            }
            for (int n = 0; n < header.Length; n++)
            {
                dGram[ptr] = header[n];
                ptr += 1;
            }
            for (int m = 0; m < question.Length; m++)
            {
                dGram[ptr] = question[m];
                ptr += 1;
            }
            return dGram;
        }