Exemplo n.º 1
0
        byte[] PrepareDnsQuery()
        {
            // prepare the head
            DnsDiagramHead diagramHead = new DnsDiagramHead();

            diagramHead.id       = DnsDiagramID;
            diagramHead.flag     = 0;
            diagramHead.flag    |= DnsHeadFlag.QRquery | DnsHeadFlag.RD | DnsHeadFlag.TC;
            diagramHead.queryNum = 1;

            // prepare the body
            DnsQueryBody queryBody;

            queryBody.queryName = new byte[targetHostName.Length + 1];

            for (int i = 0, j = -1; i < targetHostName.Length; i++)
            {
                if (targetHostName[i] == '.')
                {
                    // j contains the the previous index value of  '.' in queryName
                    queryBody.queryName[j + 1] = (byte)(i - j - 1);
                    j = i;
                }
                else
                {
                    queryBody.queryName[i + 1] = (byte)targetHostName[i];
                }
            }
            queryBody.queryName[targetHostName.Length] = 0;

            queryBody.queryType  = 1; // 'A' address
            queryBody.queryClass = 1; // IP address

            int bufferSize = diagramHead.DiagramSize + queryBody.DiagramSize;

            byte[] buffer = new byte[bufferSize];
            int    index  = 0;

            diagramHead.ToByteArray().CopyTo(buffer, index);
            index += diagramHead.DiagramSize;
            queryBody.ToByteArray().CopyTo(buffer, index);
            index += queryBody.DiagramSize;

            return(buffer);
        }