code: def make_query(qname, rdtype, rdclass = dns.rdataclass.IN, use_edns=None,
                 want_dnssec=False):
      
  
      if isinstance(qname, (str, unicode)):
          qname = dns.name.from_text(qname)
      if isinstance(rdtype, (str, unicode)):
          rdtype = dns.rdatatype.from_text(rdtype)
      if isinstance(rdclass, (str, unicode)):
          rdclass = dns.rdataclass.from_text(rdclass)
      m = Message()
      m.flags |= dns.flags.RD
      m.find_rrset(m.question, qname, rdclass, rdtype, create=True,
                   force_unique=True)
      m.use_edns(use_edns)
      m.want_dnssec(want_dnssec)
      return m
docs: Make a query message.
  
      The query name, type, and class may all be specified either
      as objects of the appropriate type, or as strings.
  
      The query will have a randomly choosen query id, and its DNS flags
      will be set to dns.flags.RD.
  
      @param qname: The query name.
      @type qname: dns.name.Name object or string
      @param rdtype: The desired rdata type.
      @type rdtype: int
      @param rdclass: The desired rdata class; the default is class IN.
      @type rdclass: int
      @param use_edns: The EDNS level to use; the default is None (no EDNS).
      See the description of dns.message.Message.use_edns() for the possible
      values for use_edns and their meanings.
      @type use_edns: int or bool or None
      @param want_dnssec: Should the query indicate that DNSSEC is desired?
      @type want_dnssec: bool
      @rtype: dns.message.Message object