如何创建DNS TXT记录?

时间:2015-06-04 17:34:37

标签: python python-2.7 dns network-programming

我想用python代码以编程方式创建dns TXT记录类型 我没有找到任何关于这样做的数据或者TXT记录的具体格式是什么。

以下是我尝试通过python创建TXT记录的方法:

    # copy the id of the request
    packet+=self.data[:2]
    # Add the flags of response
    packet+= "\x81\x80"
    # Questions and Answers Counts
    packet+='\x00\x01'
    packet+='\x00\x01'

    #No records follow
    packet+='\x00\x00'

    # Additional records follow
    packet+='\x00\x00'
    #packet+='\x00\x01'

    (urlList,urlDataLength) = DecodeQuery(self.data)
    urlPosition = urlDataLength

    # Original Domain Name Question
    packet+=self.data[12:12+urlDataLength+4]

    # Pointer to domain name
    packet+='\xc0\x0c'                                             

    #response type ~~~~~~~~~~~~~~~~
    # Response type (TXT)
    packet+='\x00\x10'

    #CLASS
    packet+='\x00\x01'
    #TTL
    packet+='\x00\x00\x02\x58'
    #Data Length
    packet+='\x00\x04'
    #txt length
    packet+='\x04'
    packet+= 'hi'.encode('hex')

1 个答案:

答案 0 :(得分:1)

来自dnslib(dns.py)

class TXT(RD):
    """
        DNS TXT record. Pass in either a single string, or a tuple/list of strings.

        >>> TXT('txtvers=1')
        "txtvers=1"
        >>> TXT(('txtvers=1',))
        "txtvers=1"
        >>> TXT(['txtvers=1',])
        "txtvers=1"
        >>> TXT(['txtvers=1','swver=2.5'])
        "txtvers=1","swver=2.5"
        >>> a = DNSRecord()
        >>> a.add_answer(*RR.fromZone('example.com 60 IN TXT "txtvers=1"'))
        >>> a.add_answer(*RR.fromZone('example.com 120 IN TXT "txtvers=1" "swver=2.3"'))
        >>> print(a)
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ...
        ;; flags: rd; QUERY: 0, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
        ;; ANSWER SECTION:
        example.com.            60      IN      TXT     "txtvers=1"
        example.com.            120     IN      TXT     "txtvers=1" "swver=2.3"
    """