ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- PKF]qQWKS.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import socket import struct import dns.ipv4 import dns.rdata from dns._compat import xrange _proto_tcp = socket.getprotobyname('tcp') _proto_udp = socket.getprotobyname('udp') class WKS(dns.rdata.Rdata): """WKS record @ivar address: the address @type address: string @ivar protocol: the protocol @type protocol: int @ivar bitmap: the bitmap @type bitmap: string @see: RFC 1035""" __slots__ = ['address', 'protocol', 'bitmap'] def __init__(self, rdclass, rdtype, address, protocol, bitmap): super(WKS, self).__init__(rdclass, rdtype) self.address = address self.protocol = protocol if not isinstance(bitmap, bytearray): self.bitmap = bytearray(bitmap) else: self.bitmap = bitmap def to_text(self, origin=None, relativize=True, **kw): bits = [] for i in xrange(0, len(self.bitmap)): byte = self.bitmap[i] for j in xrange(0, 8): if byte & (0x80 >> j): bits.append(str(i * 8 + j)) text = ' '.join(bits) return '%s %d %s' % (self.address, self.protocol, text) @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): address = tok.get_string() protocol = tok.get_string() if protocol.isdigit(): protocol = int(protocol) else: protocol = socket.getprotobyname(protocol) bitmap = bytearray() while 1: token = tok.get().unescape() if token.is_eol_or_eof(): break if token.value.isdigit(): serv = int(token.value) else: if protocol != _proto_udp and protocol != _proto_tcp: raise NotImplementedError("protocol must be TCP or UDP") if protocol == _proto_udp: protocol_text = "udp" else: protocol_text = "tcp" serv = socket.getservbyname(token.value, protocol_text) i = serv // 8 l = len(bitmap) if l < i + 1: for j in xrange(l, i + 1): bitmap.append(0) bitmap[i] = bitmap[i] | (0x80 >> (serv % 8)) bitmap = dns.rdata._truncate_bitmap(bitmap) return cls(rdclass, rdtype, address, protocol, bitmap) def to_wire(self, file, compress=None, origin=None): file.write(dns.ipv4.inet_aton(self.address)) protocol = struct.pack('!B', self.protocol) file.write(protocol) file.write(self.bitmap) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): address = dns.ipv4.inet_ntoa(wire[current: current + 4]) protocol, = struct.unpack('!B', wire[current + 4: current + 5]) current += 5 rdlen -= 5 bitmap = wire[current: current + rdlen].unwrap() return cls(rdclass, rdtype, address, protocol, bitmap) PKF]$__pycache__/APL.cpython-36.opt-1.pycnu[3 bWt@sdddlZddlZddlZddlZddlZddlZddlmZGddde Z Gdddej j Z dS)N)xrangec@s4eZdZdZddddgZddZdd Zd d Zd S) APLItema'An APL list item. @ivar family: the address family (IANA address family registry) @type family: int @ivar negation: is this item negated? @type negation: bool @ivar address: the address @type address: string @ivar prefix: the prefix length @type prefix: int familynegationaddressprefixcCs||_||_||_||_dS)N)rrrr)selfrrrrr /usr/lib/python3.6/APL.py__init__*szAPLItem.__init__cCs2|jrd|j|j|jfSd|j|j|jfSdS)Nz !%d:%s/%sz%d:%s/%s)rrrr)rr r r __str__0szAPLItem.__str__cCs|jdkr tjjtjj|j}n,|jdkr@tjjtjj|j}n tj|j}d}x6t t |dddD]}||t dkrf|d}PqfW|d|}t |}|j r|dO}t jd|j|j|}|j||j|dS)Nrz!HBBr)rdnsinetZ inet_ptonAF_INETrAF_INET6binasciiZ unhexlifyrlenchrrstructpackrwrite)rfilerZlastilheaderr r r to_wire6s"     zAPLItem.to_wireN)__name__ __module__ __qualname____doc__ __slots__r r rr r r r rs   rcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)APLzfAPL record. @ivar items: a list of APL items @type items: list of APL_Item @see: RFC 3123itemscstt|j||||_dS)N)superr%r r&)rrdclassrdtyper&) __class__r r r Ysz APL.__init__NTcKsdjtt|jS)N )joinmapstrr&)rorigin relativizekwr r r to_text]sz APL.to_textcCsg}x|jj}|jrP|j}|ddkr@d} |dd}nd} |jdd\} } t| } | jdd\} } t| } t| | | | }|j|qW||||S)Nr!Tr F:/)getZunescapeZ is_eol_or_eofvaluesplitintrappend)clsr(r)tokr/r0r&tokenitemrrrestrrr r r from_text`s"  z APL.from_textcCsx|jD]}|j|qWdS)N)r&r)rrcompressr/r>r r r rvs z APL.to_wirecCsTg}x@|dkrP|dkr"tjjtjd|||d}|d} | dkrXd} | d8} nd} |d7}|d8}|| kr|tjj|||| j} t| } |dd kr| dkr| d d| 7} tjjtjj | } nD|ddkr | d kr| d d | 7} tjjtjj | } n | j d } || 7}|| 8}t |d| | |d } |j | qW||||S) Nrz!HBBrTrFr  hex_codec)rZ exceptionZ FormErrorrunpackZunwraprrZ inet_ntoprrencoderr:)r;r(r)ZwireZcurrentZrdlenr/r&rZafdlenrrrr>r r r from_wirezs@   z APL.from_wire)NT)NT)NN)N) r r!r"r#r$r r2 classmethodr@rrI __classcell__r r )r*r r%Os    r%)rrZ dns.exceptionrZdns.inetZ dns.rdataZ dns.tokenizerZ dns._compatrobjectrZrdataZRdatar%r r r r s 5PKF]rO &__pycache__/NAPTR.cpython-36.opt-1.pycnu[3 bWv@sXddlZddlZddlZddlZddlmZmZddZddZ Gdddej j Z dS) N)xrange text_typecCs(t|}|jtjd||j|dS)Nz!B)lenwritestructpack)fileslr /usr/lib/python3.6/NAPTR.py _write_stringsr cCst|tr|jS|S)N) isinstancerencode)valuer r r _sanitizes rcsjeZdZdZddddddgZfdd Zdd d ZedddZdddZ edddZ dddZ Z S)NAPTRa}NAPTR record @ivar order: order @type order: int @ivar preference: preference @type preference: int @ivar flags: flags @type flags: string @ivar service: service @type service: string @ivar regexp: regular expression @type regexp: string @ivar replacement: replacement name @type replacement: dns.name.Name object @see: RFC 3403order preferenceflagsserviceregexp replacementc sFtt|j||t||_t||_t||_||_||_||_ dS)N) superr__init__rrrrrrr) selfrdclassrdtyperrrrrr) __class__r r r:s   zNAPTR.__init__NTcKsD|jj||}d|j|jtjj|jtjj|jtjj|j |fS)Nz%d %d "%s" "%s" "%s" %s) rchoose_relativityrrdnsrdataZ _escapifyrrr)rorigin relativizekwrr r r to_textDs   z NAPTR.to_textc CsZ|j}|j}|j}|j} |j} |j} | j||} |j||||||| | | S)N)Z get_uint16Z get_stringZget_namerZget_eol) clsrrtokr"r#rrrrrrr r r from_textMs zNAPTR.from_textcCsTtjd|j|j}|j|t||jt||jt||j|j j |||dS)Nz!HH) rrrrrr rrrrto_wire)rrcompressr"Ztwo_intsr r r r)Zs     z NAPTR.to_wirec Cstjd|||d\}}|d7}|d8}g} xntdD]b} ||} |d7}|d8}| |ksf|dkrntjj|||| j} || 7}|| 8}| j| q:Wtjj |d|||\} }||krtjj|dk r| j |} |||||| d| d| d| S)Nz!HHr) runpackrr Z exceptionZ FormErrorZunwrapappendname from_wirer#)r&rrZwireZcurrentZrdlenr"rrZstringsir r rZcusedr r r r2bs,  zNAPTR.from_wirecCs|jj|||_dS)N)rr)rr"r#r r r r{szNAPTR.choose_relativity)NT)NT)NN)N)NT) __name__ __module__ __qualname____doc__ __slots__rr% classmethodr(r)r2r __classcell__r r )rr r%s    r) rZ dns.exceptionr Zdns.nameZ dns.rdataZ dns._compatrrr rr!ZRdatarr r r r sPKF]= __pycache__/DHCID.cpython-36.pycnu[3 bW@s(ddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)DHCIDzDHCID record @ivar data: the data (the content of the RR is opaque as far as the DNS is concerned) @type data: string @see: RFC 4701datacstt|j||||_dS)N)superr__init__r)selfrdclassrdtyper) __class__/usr/lib/python3.6/DHCID.pyr szDHCID.__init__NTcKstjj|jS)N)dnsrdataZ _base64ifyr)rorigin relativizekwr r r to_text$sz DHCID.to_textc Cs`g}x:|jj}|jrP|js,tjj|j|jj qWdj |}t j |} |||| S)N) getZunescapeZ is_eol_or_eofZ is_identifierr Z exception SyntaxErrorappendvalueencodejoinbase64Z b64decode) clsrrtokrrZchunkstZb64rr r r from_text's   zDHCID.from_textcCs|j|jdS)N)writer)rfilecompressrr r r to_wire5sz DHCID.to_wirecCs ||||j}||||S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr r r from_wire8szDHCID.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrr!r" __classcell__r r )r r rs   r)rZ dns.exceptionr r ZRdatarr r r r sPKF]g%__pycache__/NSAP.cpython-36.opt-1.pycnu[3 bW@s8ddlZddlZddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)NSAPzTNSAP record. @ivar address: a NASP @type address: string @see: RFC 1706addresscstt|j||||_dS)N)superr__init__r)selfrdclassrdtyper) __class__/usr/lib/python3.6/NSAP.pyr!sz NSAP.__init__NTcKsdtj|jjS)Nz0x%s)binasciiZhexlifyrdecode)rorigin relativizekwr r r to_text%sz NSAP.to_textcCsv|j}|j|dddkr,tjjd|ddjdd}t|ddkr\tjjdtj|j }||||S)NrZ0xzstring does not start with 0x.zhexstring has odd length) Z get_stringZget_eoldnsZ exception SyntaxErrorreplacelenr Z unhexlifyencode)clsrrtokrrrr r r from_text(s  zNSAP.from_textcCs|j|jdS)N)writer)rfilecompressrr r r to_wire4sz NSAP.to_wirecCs ||||j}||||S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr r r from_wire7szNSAP.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrr r! __classcell__r r )r r rs   r)r Z dns.exceptionrZ dns.rdataZ dns.tokenizerZrdataZRdatarr r r r sPKF] __pycache__/NAPTR.cpython-36.pycnu[3 bWv@sXddlZddlZddlZddlZddlmZmZddZddZ Gdddej j Z dS) N)xrange text_typecCs4t|}|dkst|jtjd||j|dS)Nz!B)lenAssertionErrorwritestructpack)fileslr /usr/lib/python3.6/NAPTR.py _write_strings rcCst|tr|jS|S)N) isinstancerencode)valuer r r _sanitizes rcsjeZdZdZddddddgZfdd Zdd d ZedddZdddZ edddZ dddZ Z S)NAPTRa}NAPTR record @ivar order: order @type order: int @ivar preference: preference @type preference: int @ivar flags: flags @type flags: string @ivar service: service @type service: string @ivar regexp: regular expression @type regexp: string @ivar replacement: replacement name @type replacement: dns.name.Name object @see: RFC 3403order preferenceflagsserviceregexp replacementc sFtt|j||t||_t||_t||_||_||_||_ dS)N) superr__init__rrrrrrr) selfrdclassrdtyperrrrrr) __class__r rr:s   zNAPTR.__init__NTcKsD|jj||}d|j|jtjj|jtjj|jtjj|j |fS)Nz%d %d "%s" "%s" "%s" %s) rchoose_relativityrrdnsrdataZ _escapifyrrr)rorigin relativizekwrr r rto_textDs   z NAPTR.to_textc CsZ|j}|j}|j}|j} |j} |j} | j||} |j||||||| | | S)N)Z get_uint16Z get_stringZget_namer!Zget_eol) clsrrtokr$r%rrrrrrr r r from_textMs zNAPTR.from_textcCsTtjd|j|j}|j|t||jt||jt||j|j j |||dS)Nz!HH) rr rrrrrrrrto_wire)rr compressr$Ztwo_intsr r rr+Zs     z NAPTR.to_wirec Cstjd|||d\}}|d7}|d8}g} xntdD]b} ||} |d7}|d8}| |ksf|dkrntjj|||| j} || 7}|| 8}| j| q:Wtjj |d|||\} }||krtjj|dk r| j |} |||||| d| d| d| S)Nz!HHr) runpackrr"Z exceptionZ FormErrorZunwrapappendname from_wirer%)r(rrZwireZcurrentZrdlenr$rrZstringsir r rZcusedr r rr4bs,  zNAPTR.from_wirecCs|jj|||_dS)N)rr!)rr$r%r r rr!{szNAPTR.choose_relativity)NT)NT)NN)N)NT) __name__ __module__ __qualname____doc__ __slots__rr' classmethodr*r+r4r! __classcell__r r )r rr%s    r) rZ dns.exceptionr"Zdns.nameZ dns.rdataZ dns._compatrrrrr#ZRdatarr r r rsPKF]T``#__pycache__/KX.cpython-36.opt-1.pycnu[3 bWq@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)KXz KX recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/KX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedMXrrrrrsPKF]٣%__pycache__/AAAA.cpython-36.opt-1.pycnu[3 bW@s8ddlZddlZddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)AAAAzhAAAA record. @ivar address: an IPv6 address @type address: string (in the standard IPv6 format)addresscs.tt|j||tjjtjj|||_dS)N)superr__init__dnsinet inet_ptonAF_INET6r)selfrdclassrdtyper) __class__/usr/lib/python3.6/AAAA.pyrsz AAAA.__init__NTcKs|jS)N)r)r origin relativizekwrrrto_text%sz AAAA.to_textcCs|j}|j||||S)N)Zget_identifierZget_eol)clsr r tokrrrrrr from_text(szAAAA.from_textcCs|jtjjtjj|jdS)N)writerrrr r)r filecompressrrrrto_wire.sz AAAA.to_wirecCs*tjjtjj||||}||||S)N)rrZ inet_ntopr )rr r ZwireZcurrentZrdlenrrrrr from_wire1s zAAAA.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr __classcell__rr)r rrs    r)Z dns.exceptionrZdns.inetZ dns.rdataZ dns.tokenizerZrdataZRdatarrrrrsPKF]g __pycache__/WKS.cpython-36.pycnu[3 bW@sXddlZddlZddlZddlZddlmZejdZejdZ Gdddej j Z dS)N)xrangetcpudpcsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)WKSzWKS record @ivar address: the address @type address: string @ivar protocol: the protocol @type protocol: int @ivar bitmap: the bitmap @type bitmap: string @see: RFC 1035addressprotocolbitmapcs>tt|j||||_||_t|ts4t||_n||_dS)N)superr__init__rr isinstance bytearrayr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/WKS.pyr )s   z WKS.__init__NTc Kszg}xXtdt|jD]D}|j|}x4tddD]&}|d|?@r0|jt|d|q0WqWdj|}d|j|j|fS)Nr z%s %d %s)rlenrappendstrjoinrr) r origin relativizekwbitsiZbytejtextrrrto_text2s   z WKS.to_textcCs|j}|j}|jr"t|}n tj|}t}x|jj} | jrJP| j jr`t| j } n8|t krx|t krxt d|t krd} nd} tj | j | } | d} t|} | | dkrx t| | dD]}|jdqW|| d| d?B|| <q4Wtjj|}||||||S)Nzprotocol must be TCP or UDPrrrrr)Z get_stringisdigitintsocketgetprotobynamer getZunescapeZ is_eol_or_eofvalue _proto_udp _proto_tcpNotImplementedErrorZ getservbynamerrrdnsrdataZ_truncate_bitmap)clsrrtokrrrrrtokenZservZ protocol_textrlrrrr from_text<s4       z WKS.from_textcCs<|jtjj|jtjd|j}|j||j|jdS)Nz!B) writer,ipv4Z inet_atonrstructpackrr)r filecompressrrrrrto_wire\s z WKS.to_wirec Csjtjj|||d}tjd||d|d\}|d7}|d8}||||j} |||||| S)Nz!B)r,r4Z inet_ntoar5unpackZunwrap) r.rrZwireZcurrentZrdlenrrrrrrr from_wirebs z WKS.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__r r! classmethodr2r9r= __classcell__rr)rrrs     r) r%r5Zdns.ipv4r,Z dns.rdataZ dns._compatrr&r*r)r-ZRdatarrrrrs   PKF]g $__pycache__/WKS.cpython-36.opt-1.pycnu[3 bW@sXddlZddlZddlZddlZddlmZejdZejdZ Gdddej j Z dS)N)xrangetcpudpcsZeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ Z S)WKSzWKS record @ivar address: the address @type address: string @ivar protocol: the protocol @type protocol: int @ivar bitmap: the bitmap @type bitmap: string @see: RFC 1035addressprotocolbitmapcs>tt|j||||_||_t|ts4t||_n||_dS)N)superr__init__rr isinstance bytearrayr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/WKS.pyr )s   z WKS.__init__NTc Kszg}xXtdt|jD]D}|j|}x4tddD]&}|d|?@r0|jt|d|q0WqWdj|}d|j|j|fS)Nr z%s %d %s)rlenrappendstrjoinrr) r origin relativizekwbitsiZbytejtextrrrto_text2s   z WKS.to_textcCs|j}|j}|jr"t|}n tj|}t}x|jj} | jrJP| j jr`t| j } n8|t krx|t krxt d|t krd} nd} tj | j | } | d} t|} | | dkrx t| | dD]}|jdqW|| d| d?B|| <q4Wtjj|}||||||S)Nzprotocol must be TCP or UDPrrrrr)Z get_stringisdigitintsocketgetprotobynamer getZunescapeZ is_eol_or_eofvalue _proto_udp _proto_tcpNotImplementedErrorZ getservbynamerrrdnsrdataZ_truncate_bitmap)clsrrtokrrrrrtokenZservZ protocol_textrlrrrr from_text<s4       z WKS.from_textcCs<|jtjj|jtjd|j}|j||j|jdS)Nz!B) writer,ipv4Z inet_atonrstructpackrr)r filecompressrrrrrto_wire\s z WKS.to_wirec Csjtjj|||d}tjd||d|d\}|d7}|d8}||||j} |||||| S)Nz!B)r,r4Z inet_ntoar5unpackZunwrap) r.rrZwireZcurrentZrdlenrrrrrrr from_wirebs z WKS.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__r r! classmethodr2r9r= __classcell__rr)rrrs     r) r%r5Zdns.ipv4r,Z dns.rdataZ dns._compatrr&r*r)r-ZRdatarrrrrs   PKF]"ݯ! ! __pycache__/PX.cpython-36.pycnu[3 bWB @s8ddlZddlZddlZddlZGdddejjZdS)NcsdeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ dddZ Z S)PXzPX record. @ivar preference: the preference value @type preference: int @ivar map822: the map822 name @type map822: dns.name.Name object @ivar mapx400: the mapx400 name @type mapx400: dns.name.Name object @see: RFC 2163 preferencemap822mapx400cs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/PX.pyr%sz PX.__init__NTcKs,|jj||}|jj||}d|j||fS)Nz%d %s %s)rchoose_relativityrr)rorigin relativizekwrrr r r to_text+sz PX.to_textc CsJ|j}|j}|j||}|jd}|j||}|j||||||S)N)Z get_uint16Zget_namerZget_eol) clsr r tokrrrrrr r r from_text0s   z PX.from_textcCs<tjd|j}|j||jj|d||jj|d|dS)Nz!H)structpackrwriterto_wirer)rfilecompressrZprefr r r r:s z PX.to_wirec Cstjd|||d\}|d7}|d8}tjj|d|||\}} | |krXtjj|| 7}|| 8}|dk rz|j|}tjj|d|||\} } | |krtjj|dk r| j|} |||||| S)Nz!H)runpackdnsname from_wireZ exceptionZ FormErrorr) rr r ZwireZcurrentZrdlenrrrZcusedrr r r r @s$    z PX.from_wirecCs$|jj|||_|jj|||_dS)N)rrr)rrrr r r rUszPX.choose_relativity)NT)NT)NN)N)NT) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr r __classcell__r r )r r rs      r)rZ dns.exceptionrZ dns.rdataZdns.nameZrdataZRdatarr r r r sPKF] __pycache__/A.cpython-36.pycnu[3 bW=@s8ddlZddlZddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)AznA record. @ivar address: an IPv4 address @type address: string (in the standard "dotted quad" format)addresscs(tt|j||tjj|||_dS)N)superr__init__dnsipv4 inet_atonr)selfrdclassrdtyper) __class__/usr/lib/python3.6/A.pyrs z A.__init__NTcKs|jS)N)r)r origin relativizekwr r rto_text%sz A.to_textcCs|j}|j||||S)N)Zget_identifierZget_eol)clsr r tokrrrr r r from_text(sz A.from_textcCs|jtjj|jdS)N)writerrrr)r filecompressrr r rto_wire.sz A.to_wirecCs(tjj||||j}||||S)N)rrZ inet_ntoadecode)rr r ZwireZcurrentZrdlenrrr r r from_wire1sz A.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr __classcell__r r )r rrs    r)Z dns.exceptionrZdns.ipv4Z dns.rdataZ dns.tokenizerZrdataZRdatarr r r rsPKF]$__pycache__/SRV.cpython-36.opt-1.pycnu[3 bW @s8ddlZddlZddlZddlZGdddejjZdS)NcsfeZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ dddZ Z S)SRVaSRV record @ivar priority: the priority @type priority: int @ivar weight: the weight @type weight: int @ivar port: the port of the service @type port: int @ivar target: the target host @type target: dns.name.Name object @see: RFC 2782priorityweightporttargetcs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__/usr/lib/python3.6/SRV.pyr's z SRV.__init__NTcKs$|jj||}d|j|j|j|fS)Nz %d %d %d %s)rchoose_relativityrrr)r origin relativizekwrr r rto_text.sz SRV.to_textc CsH|j}|j}|j}|jd} | j||} |j||||||| S)N)Z get_uint16Zget_namerZget_eol) clsr r tokrrrrrrr r r from_text3s  z SRV.from_textcCs4tjd|j|j|j}|j||jj|||dS)Nz!HHH)structpackrrrwriterto_wire)r filecompressrZ three_intsr r rr=s z SRV.to_wirec Cstjd|||d\}}} |d7}|d8}tjj|d|||\} } | |kr\tjj|dk rn| j|} |||||| | S)Nz!HHH)runpackdnsname from_wireZ exceptionZ FormErrorr) rr r ZwireZcurrentZrdlenrrrrrZcusedr r rr!Bs  z SRV.from_wirecCs|jj|||_dS)N)rr)r rrr r rrPszSRV.choose_relativity)NT)NT)NN)N)NT) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr!r __classcell__r r )r rrs      r)rZ dns.exceptionrZ dns.rdataZdns.nameZrdataZRdatarr r r rsPKF]g__pycache__/NSAP.cpython-36.pycnu[3 bW@s8ddlZddlZddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)NSAPzTNSAP record. @ivar address: a NASP @type address: string @see: RFC 1706addresscstt|j||||_dS)N)superr__init__r)selfrdclassrdtyper) __class__/usr/lib/python3.6/NSAP.pyr!sz NSAP.__init__NTcKsdtj|jjS)Nz0x%s)binasciiZhexlifyrdecode)rorigin relativizekwr r r to_text%sz NSAP.to_textcCsv|j}|j|dddkr,tjjd|ddjdd}t|ddkr\tjjdtj|j }||||S)NrZ0xzstring does not start with 0x.zhexstring has odd length) Z get_stringZget_eoldnsZ exception SyntaxErrorreplacelenr Z unhexlifyencode)clsrrtokrrrr r r from_text(s  zNSAP.from_textcCs|j|jdS)N)writer)rfilecompressrr r r to_wire4sz NSAP.to_wirecCs ||||j}||||S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr r r from_wire7szNSAP.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrr r! __classcell__r r )r r rs   r)r Z dns.exceptionrZ dns.rdataZ dns.tokenizerZrdataZRdatarr r r r sPKF]S #__pycache__/__init__.cpython-36.pycnu[3 bW @s"dZddddddddd d d g Zd S) zClass IN rdata type classes.AZAAAAZAPLZDHCIDZKXZNAPTRZNSAPZNSAP_PTRZPXZSRVZWKSN)__doc____all__rr/usr/lib/python3.6/__init__.pysPKF]6Pb)__pycache__/IPSECKEY.cpython-36.opt-1.pycnu[3 bW1@s@ddlZddlZddlZddlZddlZGdddejjZdS)Ncs^eZdZdZdddddgZfddZdd d Zedd dZdddZ edddZ Z S)IPSECKEYaIPSECKEY record @ivar precedence: the precedence for this key data @type precedence: int @ivar gateway_type: the gateway type @type gateway_type: int @ivar algorithm: the algorithm to use @type algorithm: int @ivar gateway: the public key @type gateway: None, IPv4 address, IPV6 address, or domain name @ivar key: the public key @type key: string @see: RFC 4025 precedence gateway_type algorithmgatewaykeycstt|j|||dkr8|dkr2|dk r2tdd}nN|dkrTtjjtjj|n2|dkrptjjtjj|n|dkrzn td|||_ ||_ ||_ ||_ ||_ dS)Nr.z"invalid gateway for gateway type 0z!invalid IPSECKEY gateway type: %d)superr__init__ SyntaxErrordnsinet inet_ptonAF_INETAF_INET6rrrrr)selfrdclassrdtyperrrrr) __class__/usr/lib/python3.6/IPSECKEY.pyr *s$ zIPSECKEY.__init__NTcKs||jdkrd}nJ|jdkr"|j}n8|jdkr4|j}n&|jdkrRt|jj||}ntdd|j|j|j|tjj |j fS)Nrrr r r zinvalid gateway typez%d %d %d %s %s) rrstrchoose_relativity ValueErrorrrrrdataZ _base64ifyr)rorigin relativizekwrrrrto_textBs     zIPSECKEY.to_textcCs|j}|j}|j}|dkr2|jj||} n|j} g} x:|jj} | jrVP| jsftj j | j | j j q@Wdj| } tj| } ||||||| | S)Nr )Z get_uint8Zget_namerZ get_stringgetZunescapeZ is_eol_or_eofZ is_identifierr exceptionrappendvalueencodejoinbase64Z b64decode)clsrrtokrrrrrrZchunkstZb64rrrr from_textQs$    zIPSECKEY.from_textcCstjd|j|j|j}|j||jdkr,np|jdkrR|jtjjtjj |j nJ|jdkrx|jtjjtjj |j n$|jdkr|j j |d|nt d|j|jdS)Nz!BBBrr r r zinvalid gateway type)structpackrrrwriterrrrrrto_wirerr)rfilecompressrheaderrrrr1gs     zIPSECKEY.to_wirec Cs2|dkrtjjtjd|||d}|d}|d7}|d8}|dkrNd} n|dkrtjjtjj|||d} |d7}|d8}n||dkrtjjtjj|||d} |d7}|d8}nD|dkrtj j |d|||\} } || 7}|| 8}n tjjd||||j } ||||d||d| | S) Nr z!BBBr rr zinvalid IPSECKEY gateway type) rr$Z FormErrorr.unpackrZ inet_ntoprrname from_wireZunwrap) r*rrZwireZcurrentZrdlenrr4rrZcusedrrrrr9ws6       zIPSECKEY.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__r r! classmethodr-r1r9 __classcell__rr)rrrs    r) r.r)Z dns.exceptionrZdns.inetZdns.namerZRdatarrrrrs PKF] "__pycache__/A.cpython-36.opt-1.pycnu[3 bW=@s8ddlZddlZddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)AznA record. @ivar address: an IPv4 address @type address: string (in the standard "dotted quad" format)addresscs(tt|j||tjj|||_dS)N)superr__init__dnsipv4 inet_atonr)selfrdclassrdtyper) __class__/usr/lib/python3.6/A.pyrs z A.__init__NTcKs|jS)N)r)r origin relativizekwr r rto_text%sz A.to_textcCs|j}|j||||S)N)Zget_identifierZget_eol)clsr r tokrrrr r r from_text(sz A.from_textcCs|jtjj|jdS)N)writerrrr)r filecompressrr r rto_wire.sz A.to_wirecCs(tjj||||j}||||S)N)rrZ inet_ntoadecode)rr r ZwireZcurrentZrdlenrrr r r from_wire1sz A.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr __classcell__r r )r rrs    r)Z dns.exceptionrZdns.ipv4Z dns.rdataZ dns.tokenizerZrdataZRdatarr r r rsPKF]"__pycache__/APL.cpython-36.pycnu[3 bWt@sdddlZddlZddlZddlZddlZddlZddlmZGddde Z Gdddej j Z dS)N)xrangec@s4eZdZdZddddgZddZdd Zd d Zd S) APLItema'An APL list item. @ivar family: the address family (IANA address family registry) @type family: int @ivar negation: is this item negated? @type negation: bool @ivar address: the address @type address: string @ivar prefix: the prefix length @type prefix: int familynegationaddressprefixcCs||_||_||_||_dS)N)rrrr)selfrrrrr /usr/lib/python3.6/APL.py__init__*szAPLItem.__init__cCs2|jrd|j|j|jfSd|j|j|jfSdS)Nz !%d:%s/%sz%d:%s/%s)rrrr)rr r r __str__0szAPLItem.__str__cCs|jdkr tjjtjj|j}n,|jdkr@tjjtjj|j}n tj|j}d}x6t t |dddD]}||t dkrf|d}PqfW|d|}t |}|dkst |j r|dO}tjd|j|j|}|j||j|dS)Nrz!HBBr)rdnsinetZ inet_ptonAF_INETrAF_INET6binasciiZ unhexlifyrlenchrAssertionErrorrstructpackrwrite)rfilerZlastilheaderr r r to_wire6s$      zAPLItem.to_wireN)__name__ __module__ __qualname____doc__ __slots__r r r r r r r rs   rcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)APLzfAPL record. @ivar items: a list of APL items @type items: list of APL_Item @see: RFC 3123itemscstt|j||||_dS)N)superr&r r')rrdclassrdtyper') __class__r r r Ysz APL.__init__NTcKsdjtt|jS)N )joinmapstrr')rorigin relativizekwr r r to_text]sz APL.to_textcCsg}x|jj}|jrP|j}|ddkr@d} |dd}nd} |jdd\} } t| } | jdd\} } t| } t| | | | }|j|qW||||S)Nr!Tr F:/)getZunescapeZ is_eol_or_eofvaluesplitintrappend)clsr)r*tokr0r1r'tokenitemrrrestrrr r r from_text`s"  z APL.from_textcCsx|jD]}|j|qWdS)N)r'r )rrcompressr0r?r r r r vs z APL.to_wirecCsTg}x@|dkrP|dkr"tjjtjd|||d}|d} | dkrXd} | d8} nd} |d7}|d8}|| kr|tjj|||| j} t| } |dd kr| dkr| d d| 7} tjjtjj | } nD|ddkr | d kr| d d | 7} tjjtjj | } n | j d } || 7}|| 8}t |d| | |d } |j | qW||||S) Nrz!HBBrTrFr  hex_codec)rZ exceptionZ FormErrorrunpackZunwraprrZ inet_ntoprrencoderr;)r<r)r*ZwireZcurrentZrdlenr0r'rZafdlenrrrr?r r r from_wirezs@   z APL.from_wire)NT)NT)NN)N) r!r"r#r$r%r r3 classmethodrAr rJ __classcell__r r )r+r r&Os    r&)rrZ dns.exceptionrZdns.inetZ dns.rdataZ dns.tokenizerZ dns._compatrobjectrZrdataZRdatar&r r r r s 5PKF]\m9Mrr#__pycache__/NSAP_PTR.cpython-36.pycnu[3 bW}@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)NSAP_PTRzNSAP-PTR recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/NSAP_PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrrsPKF]__pycache__/SRV.cpython-36.pycnu[3 bW @s8ddlZddlZddlZddlZGdddejjZdS)NcsfeZdZdZddddgZfddZdd d Zedd d ZdddZ edddZ dddZ Z S)SRVaSRV record @ivar priority: the priority @type priority: int @ivar weight: the weight @type weight: int @ivar port: the port of the service @type port: int @ivar target: the target host @type target: dns.name.Name object @see: RFC 2782priorityweightporttargetcs.tt|j||||_||_||_||_dS)N)superr__init__rrrr)selfrdclassrdtyperrrr) __class__/usr/lib/python3.6/SRV.pyr's z SRV.__init__NTcKs$|jj||}d|j|j|j|fS)Nz %d %d %d %s)rchoose_relativityrrr)r origin relativizekwrr r rto_text.sz SRV.to_textc CsH|j}|j}|j}|jd} | j||} |j||||||| S)N)Z get_uint16Zget_namerZget_eol) clsr r tokrrrrrrr r r from_text3s  z SRV.from_textcCs4tjd|j|j|j}|j||jj|||dS)Nz!HHH)structpackrrrwriterto_wire)r filecompressrZ three_intsr r rr=s z SRV.to_wirec Cstjd|||d\}}} |d7}|d8}tjj|d|||\} } | |kr\tjj|dk rn| j|} |||||| | S)Nz!HHH)runpackdnsname from_wireZ exceptionZ FormErrorr) rr r ZwireZcurrentZrdlenrrrrrZcusedr r rr!Bs  z SRV.from_wirecCs|jj|||_dS)N)rr)r rrr r rrPszSRV.choose_relativity)NT)NT)NN)N)NT) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr!r __classcell__r r )r rrs      r)rZ dns.exceptionrZ dns.rdataZdns.nameZrdataZRdatarr r r rsPKF]S )__pycache__/__init__.cpython-36.opt-1.pycnu[3 bW @s"dZddddddddd d d g Zd S) zClass IN rdata type classes.AZAAAAZAPLZDHCIDZKXZNAPTRZNSAPZNSAP_PTRZPXZSRVZWKSN)__doc____all__rr/usr/lib/python3.6/__init__.pysPKF]T``__pycache__/KX.cpython-36.pycnu[3 bWq@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)KXz KX recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/KX.pyrsr)Zdns.rdtypes.mxbaseZdnsZrdtypesZmxbaseZUncompressedMXrrrrrsPKF]٣__pycache__/AAAA.cpython-36.pycnu[3 bW@s8ddlZddlZddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)AAAAzhAAAA record. @ivar address: an IPv6 address @type address: string (in the standard IPv6 format)addresscs.tt|j||tjjtjj|||_dS)N)superr__init__dnsinet inet_ptonAF_INET6r)selfrdclassrdtyper) __class__/usr/lib/python3.6/AAAA.pyrsz AAAA.__init__NTcKs|jS)N)r)r origin relativizekwrrrto_text%sz AAAA.to_textcCs|j}|j||||S)N)Zget_identifierZget_eol)clsr r tokrrrrrr from_text(szAAAA.from_textcCs|jtjjtjj|jdS)N)writerrrr r)r filecompressrrrrto_wire.sz AAAA.to_wirecCs*tjjtjj||||}||||S)N)rrZ inet_ntopr )rr r ZwireZcurrentZrdlenrrrrr from_wire1s zAAAA.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr __classcell__rr)r rrs    r)Z dns.exceptionrZdns.inetZ dns.rdataZ dns.tokenizerZrdataZRdatarrrrrsPKF]"ݯ! ! #__pycache__/PX.cpython-36.opt-1.pycnu[3 bWB @s8ddlZddlZddlZddlZGdddejjZdS)NcsdeZdZdZdddgZfddZdd d Zedd d Zdd dZ edddZ dddZ Z S)PXzPX record. @ivar preference: the preference value @type preference: int @ivar map822: the map822 name @type map822: dns.name.Name object @ivar mapx400: the mapx400 name @type mapx400: dns.name.Name object @see: RFC 2163 preferencemap822mapx400cs(tt|j||||_||_||_dS)N)superr__init__rrr)selfrdclassrdtyperrr) __class__/usr/lib/python3.6/PX.pyr%sz PX.__init__NTcKs,|jj||}|jj||}d|j||fS)Nz%d %s %s)rchoose_relativityrr)rorigin relativizekwrrr r r to_text+sz PX.to_textc CsJ|j}|j}|j||}|jd}|j||}|j||||||S)N)Z get_uint16Zget_namerZget_eol) clsr r tokrrrrrr r r from_text0s   z PX.from_textcCs<tjd|j}|j||jj|d||jj|d|dS)Nz!H)structpackrwriterto_wirer)rfilecompressrZprefr r r r:s z PX.to_wirec Cstjd|||d\}|d7}|d8}tjj|d|||\}} | |krXtjj|| 7}|| 8}|dk rz|j|}tjj|d|||\} } | |krtjj|dk r| j|} |||||| S)Nz!H)runpackdnsname from_wireZ exceptionZ FormErrorr) rr r ZwireZcurrentZrdlenrrrZcusedrr r r r @s$    z PX.from_wirecCs$|jj|||_|jj|||_dS)N)rrr)rrrr r r rUszPX.choose_relativity)NT)NT)NN)N)NT) __name__ __module__ __qualname____doc__ __slots__rr classmethodrrr r __classcell__r r )r r rs      r)rZ dns.exceptionrZ dns.rdataZdns.nameZrdataZRdatarr r r r sPKF]6Pb#__pycache__/IPSECKEY.cpython-36.pycnu[3 bW1@s@ddlZddlZddlZddlZddlZGdddejjZdS)Ncs^eZdZdZdddddgZfddZdd d Zedd dZdddZ edddZ Z S)IPSECKEYaIPSECKEY record @ivar precedence: the precedence for this key data @type precedence: int @ivar gateway_type: the gateway type @type gateway_type: int @ivar algorithm: the algorithm to use @type algorithm: int @ivar gateway: the public key @type gateway: None, IPv4 address, IPV6 address, or domain name @ivar key: the public key @type key: string @see: RFC 4025 precedence gateway_type algorithmgatewaykeycstt|j|||dkr8|dkr2|dk r2tdd}nN|dkrTtjjtjj|n2|dkrptjjtjj|n|dkrzn td|||_ ||_ ||_ ||_ ||_ dS)Nr.z"invalid gateway for gateway type 0z!invalid IPSECKEY gateway type: %d)superr__init__ SyntaxErrordnsinet inet_ptonAF_INETAF_INET6rrrrr)selfrdclassrdtyperrrrr) __class__/usr/lib/python3.6/IPSECKEY.pyr *s$ zIPSECKEY.__init__NTcKs||jdkrd}nJ|jdkr"|j}n8|jdkr4|j}n&|jdkrRt|jj||}ntdd|j|j|j|tjj |j fS)Nrrr r r zinvalid gateway typez%d %d %d %s %s) rrstrchoose_relativity ValueErrorrrrrdataZ _base64ifyr)rorigin relativizekwrrrrto_textBs     zIPSECKEY.to_textcCs|j}|j}|j}|dkr2|jj||} n|j} g} x:|jj} | jrVP| jsftj j | j | j j q@Wdj| } tj| } ||||||| | S)Nr )Z get_uint8Zget_namerZ get_stringgetZunescapeZ is_eol_or_eofZ is_identifierr exceptionrappendvalueencodejoinbase64Z b64decode)clsrrtokrrrrrrZchunkstZb64rrrr from_textQs$    zIPSECKEY.from_textcCstjd|j|j|j}|j||jdkr,np|jdkrR|jtjjtjj |j nJ|jdkrx|jtjjtjj |j n$|jdkr|j j |d|nt d|j|jdS)Nz!BBBrr r r zinvalid gateway type)structpackrrrwriterrrrrrto_wirerr)rfilecompressrheaderrrrr1gs     zIPSECKEY.to_wirec Cs2|dkrtjjtjd|||d}|d}|d7}|d8}|dkrNd} n|dkrtjjtjj|||d} |d7}|d8}n||dkrtjjtjj|||d} |d7}|d8}nD|dkrtj j |d|||\} } || 7}|| 8}n tjjd||||j } ||||d||d| | S) Nr z!BBBr rr zinvalid IPSECKEY gateway type) rr$Z FormErrorr.unpackrZ inet_ntoprrname from_wireZunwrap) r*rrZwireZcurrentZrdlenrr4rrZcusedrrrrr9ws6       zIPSECKEY.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__r r! classmethodr-r1r9 __classcell__rr)rrrs    r) r.r)Z dns.exceptionrZdns.inetZdns.namerZRdatarrrrrs PKF]=&__pycache__/DHCID.cpython-36.opt-1.pycnu[3 bW@s(ddlZddlZGdddejjZdS)NcsVeZdZdZdgZfddZdddZedd d Zdd d Z edd dZ Z S)DHCIDzDHCID record @ivar data: the data (the content of the RR is opaque as far as the DNS is concerned) @type data: string @see: RFC 4701datacstt|j||||_dS)N)superr__init__r)selfrdclassrdtyper) __class__/usr/lib/python3.6/DHCID.pyr szDHCID.__init__NTcKstjj|jS)N)dnsrdataZ _base64ifyr)rorigin relativizekwr r r to_text$sz DHCID.to_textc Cs`g}x:|jj}|jrP|js,tjj|j|jj qWdj |}t j |} |||| S)N) getZunescapeZ is_eol_or_eofZ is_identifierr Z exception SyntaxErrorappendvalueencodejoinbase64Z b64decode) clsrrtokrrZchunkstZb64rr r r from_text's   zDHCID.from_textcCs|j|jdS)N)writer)rfilecompressrr r r to_wire5sz DHCID.to_wirecCs ||||j}||||S)N)Zunwrap)rrrZwireZcurrentZrdlenrrr r r from_wire8szDHCID.from_wire)NT)NT)NN)N) __name__ __module__ __qualname____doc__ __slots__rr classmethodrr!r" __classcell__r r )r r rs   r)rZ dns.exceptionr r ZRdatarr r r r sPKF]\m9Mrr)__pycache__/NSAP_PTR.cpython-36.opt-1.pycnu[3 bW}@s"ddlZGdddejjjZdS)Nc@seZdZdZdS)NSAP_PTRzNSAP-PTR recordN)__name__ __module__ __qualname____doc__rr/usr/lib/python3.6/NSAP_PTR.pyrsr)Zdns.rdtypes.nsbaseZdnsZrdtypesZnsbaseZUncompressedNSrrrrrsPKF]DHCID.pynu[# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import base64 import dns.exception class DHCID(dns.rdata.Rdata): """DHCID record @ivar data: the data (the content of the RR is opaque as far as the DNS is concerned) @type data: string @see: RFC 4701""" __slots__ = ['data'] def __init__(self, rdclass, rdtype, data): super(DHCID, self).__init__(rdclass, rdtype) self.data = data def to_text(self, origin=None, relativize=True, **kw): return dns.rdata._base64ify(self.data) @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): chunks = [] while 1: t = tok.get().unescape() if t.is_eol_or_eof(): break if not t.is_identifier(): raise dns.exception.SyntaxError chunks.append(t.value.encode()) b64 = b''.join(chunks) data = base64.b64decode(b64) return cls(rdclass, rdtype, data) def to_wire(self, file, compress=None, origin=None): file.write(self.data) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): data = wire[current: current + rdlen].unwrap() return cls(rdclass, rdtype, data) PKF]/"ttAPL.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import struct import binascii import dns.exception import dns.inet import dns.rdata import dns.tokenizer from dns._compat import xrange class APLItem(object): """An APL list item. @ivar family: the address family (IANA address family registry) @type family: int @ivar negation: is this item negated? @type negation: bool @ivar address: the address @type address: string @ivar prefix: the prefix length @type prefix: int """ __slots__ = ['family', 'negation', 'address', 'prefix'] def __init__(self, family, negation, address, prefix): self.family = family self.negation = negation self.address = address self.prefix = prefix def __str__(self): if self.negation: return "!%d:%s/%s" % (self.family, self.address, self.prefix) else: return "%d:%s/%s" % (self.family, self.address, self.prefix) def to_wire(self, file): if self.family == 1: address = dns.inet.inet_pton(dns.inet.AF_INET, self.address) elif self.family == 2: address = dns.inet.inet_pton(dns.inet.AF_INET6, self.address) else: address = binascii.unhexlify(self.address) # # Truncate least significant zero bytes. # last = 0 for i in xrange(len(address) - 1, -1, -1): if address[i] != chr(0): last = i + 1 break address = address[0: last] l = len(address) assert l < 128 if self.negation: l |= 0x80 header = struct.pack('!HBB', self.family, self.prefix, l) file.write(header) file.write(address) class APL(dns.rdata.Rdata): """APL record. @ivar items: a list of APL items @type items: list of APL_Item @see: RFC 3123""" __slots__ = ['items'] def __init__(self, rdclass, rdtype, items): super(APL, self).__init__(rdclass, rdtype) self.items = items def to_text(self, origin=None, relativize=True, **kw): return ' '.join(map(str, self.items)) @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): items = [] while 1: token = tok.get().unescape() if token.is_eol_or_eof(): break item = token.value if item[0] == '!': negation = True item = item[1:] else: negation = False (family, rest) = item.split(':', 1) family = int(family) (address, prefix) = rest.split('/', 1) prefix = int(prefix) item = APLItem(family, negation, address, prefix) items.append(item) return cls(rdclass, rdtype, items) def to_wire(self, file, compress=None, origin=None): for item in self.items: item.to_wire(file) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): items = [] while 1: if rdlen == 0: break if rdlen < 4: raise dns.exception.FormError header = struct.unpack('!HBB', wire[current: current + 4]) afdlen = header[2] if afdlen > 127: negation = True afdlen -= 128 else: negation = False current += 4 rdlen -= 4 if rdlen < afdlen: raise dns.exception.FormError address = wire[current: current + afdlen].unwrap() l = len(address) if header[0] == 1: if l < 4: address += '\x00' * (4 - l) address = dns.inet.inet_ntop(dns.inet.AF_INET, address) elif header[0] == 2: if l < 16: address += '\x00' * (16 - l) address = dns.inet.inet_ntop(dns.inet.AF_INET6, address) else: # # This isn't really right according to the RFC, but it # seems better than throwing an exception # address = address.encode('hex_codec') current += afdlen rdlen -= afdlen item = APLItem(header[0], negation, address, header[1]) items.append(item) return cls(rdclass, rdtype, items) PKF];JNSAP.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import binascii import dns.exception import dns.rdata import dns.tokenizer class NSAP(dns.rdata.Rdata): """NSAP record. @ivar address: a NASP @type address: string @see: RFC 1706""" __slots__ = ['address'] def __init__(self, rdclass, rdtype, address): super(NSAP, self).__init__(rdclass, rdtype) self.address = address def to_text(self, origin=None, relativize=True, **kw): return "0x%s" % binascii.hexlify(self.address).decode() @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): address = tok.get_string() tok.get_eol() if address[0:2] != '0x': raise dns.exception.SyntaxError('string does not start with 0x') address = address[2:].replace('.', '') if len(address) % 2 != 0: raise dns.exception.SyntaxError('hexstring has odd length') address = binascii.unhexlify(address.encode()) return cls(rdclass, rdtype, address) def to_wire(self, file, compress=None, origin=None): file.write(self.address) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): address = wire[current: current + rdlen].unwrap() return cls(rdclass, rdtype, address) PKF]0}} NSAP_PTR.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import dns.rdtypes.nsbase class NSAP_PTR(dns.rdtypes.nsbase.UncompressedNS): """NSAP-PTR record""" PKF]211 IPSECKEY.pynu[# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import struct import base64 import dns.exception import dns.inet import dns.name class IPSECKEY(dns.rdata.Rdata): """IPSECKEY record @ivar precedence: the precedence for this key data @type precedence: int @ivar gateway_type: the gateway type @type gateway_type: int @ivar algorithm: the algorithm to use @type algorithm: int @ivar gateway: the public key @type gateway: None, IPv4 address, IPV6 address, or domain name @ivar key: the public key @type key: string @see: RFC 4025""" __slots__ = ['precedence', 'gateway_type', 'algorithm', 'gateway', 'key'] def __init__(self, rdclass, rdtype, precedence, gateway_type, algorithm, gateway, key): super(IPSECKEY, self).__init__(rdclass, rdtype) if gateway_type == 0: if gateway != '.' and gateway is not None: raise SyntaxError('invalid gateway for gateway type 0') gateway = None elif gateway_type == 1: # check that it's OK dns.inet.inet_pton(dns.inet.AF_INET, gateway) elif gateway_type == 2: # check that it's OK dns.inet.inet_pton(dns.inet.AF_INET6, gateway) elif gateway_type == 3: pass else: raise SyntaxError( 'invalid IPSECKEY gateway type: %d' % gateway_type) self.precedence = precedence self.gateway_type = gateway_type self.algorithm = algorithm self.gateway = gateway self.key = key def to_text(self, origin=None, relativize=True, **kw): if self.gateway_type == 0: gateway = '.' elif self.gateway_type == 1: gateway = self.gateway elif self.gateway_type == 2: gateway = self.gateway elif self.gateway_type == 3: gateway = str(self.gateway.choose_relativity(origin, relativize)) else: raise ValueError('invalid gateway type') return '%d %d %d %s %s' % (self.precedence, self.gateway_type, self.algorithm, gateway, dns.rdata._base64ify(self.key)) @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): precedence = tok.get_uint8() gateway_type = tok.get_uint8() algorithm = tok.get_uint8() if gateway_type == 3: gateway = tok.get_name().choose_relativity(origin, relativize) else: gateway = tok.get_string() chunks = [] while 1: t = tok.get().unescape() if t.is_eol_or_eof(): break if not t.is_identifier(): raise dns.exception.SyntaxError chunks.append(t.value.encode()) b64 = b''.join(chunks) key = base64.b64decode(b64) return cls(rdclass, rdtype, precedence, gateway_type, algorithm, gateway, key) def to_wire(self, file, compress=None, origin=None): header = struct.pack("!BBB", self.precedence, self.gateway_type, self.algorithm) file.write(header) if self.gateway_type == 0: pass elif self.gateway_type == 1: file.write(dns.inet.inet_pton(dns.inet.AF_INET, self.gateway)) elif self.gateway_type == 2: file.write(dns.inet.inet_pton(dns.inet.AF_INET6, self.gateway)) elif self.gateway_type == 3: self.gateway.to_wire(file, None, origin) else: raise ValueError('invalid gateway type') file.write(self.key) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): if rdlen < 3: raise dns.exception.FormError header = struct.unpack('!BBB', wire[current: current + 3]) gateway_type = header[1] current += 3 rdlen -= 3 if gateway_type == 0: gateway = None elif gateway_type == 1: gateway = dns.inet.inet_ntop(dns.inet.AF_INET, wire[current: current + 4]) current += 4 rdlen -= 4 elif gateway_type == 2: gateway = dns.inet.inet_ntop(dns.inet.AF_INET6, wire[current: current + 16]) current += 16 rdlen -= 16 elif gateway_type == 3: (gateway, cused) = dns.name.from_wire(wire[: current + rdlen], current) current += cused rdlen -= cused else: raise dns.exception.FormError('invalid IPSECKEY gateway type') key = wire[current: current + rdlen].unwrap() return cls(rdclass, rdtype, header[0], gateway_type, header[2], gateway, key) PKF]mB B PX.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import struct import dns.exception import dns.rdata import dns.name class PX(dns.rdata.Rdata): """PX record. @ivar preference: the preference value @type preference: int @ivar map822: the map822 name @type map822: dns.name.Name object @ivar mapx400: the mapx400 name @type mapx400: dns.name.Name object @see: RFC 2163""" __slots__ = ['preference', 'map822', 'mapx400'] def __init__(self, rdclass, rdtype, preference, map822, mapx400): super(PX, self).__init__(rdclass, rdtype) self.preference = preference self.map822 = map822 self.mapx400 = mapx400 def to_text(self, origin=None, relativize=True, **kw): map822 = self.map822.choose_relativity(origin, relativize) mapx400 = self.mapx400.choose_relativity(origin, relativize) return '%d %s %s' % (self.preference, map822, mapx400) @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): preference = tok.get_uint16() map822 = tok.get_name() map822 = map822.choose_relativity(origin, relativize) mapx400 = tok.get_name(None) mapx400 = mapx400.choose_relativity(origin, relativize) tok.get_eol() return cls(rdclass, rdtype, preference, map822, mapx400) def to_wire(self, file, compress=None, origin=None): pref = struct.pack("!H", self.preference) file.write(pref) self.map822.to_wire(file, None, origin) self.mapx400.to_wire(file, None, origin) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): (preference, ) = struct.unpack('!H', wire[current: current + 2]) current += 2 rdlen -= 2 (map822, cused) = dns.name.from_wire(wire[: current + rdlen], current) if cused > rdlen: raise dns.exception.FormError current += cused rdlen -= cused if origin is not None: map822 = map822.relativize(origin) (mapx400, cused) = dns.name.from_wire(wire[: current + rdlen], current) if cused != rdlen: raise dns.exception.FormError if origin is not None: mapx400 = mapx400.relativize(origin) return cls(rdclass, rdtype, preference, map822, mapx400) def choose_relativity(self, origin=None, relativize=True): self.map822 = self.map822.choose_relativity(origin, relativize) self.mapx400 = self.mapx400.choose_relativity(origin, relativize) PKF]4==A.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import dns.exception import dns.ipv4 import dns.rdata import dns.tokenizer class A(dns.rdata.Rdata): """A record. @ivar address: an IPv4 address @type address: string (in the standard "dotted quad" format)""" __slots__ = ['address'] def __init__(self, rdclass, rdtype, address): super(A, self).__init__(rdclass, rdtype) # check that it's OK dns.ipv4.inet_aton(address) self.address = address def to_text(self, origin=None, relativize=True, **kw): return self.address @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): address = tok.get_identifier() tok.get_eol() return cls(rdclass, rdtype, address) def to_wire(self, file, compress=None, origin=None): file.write(dns.ipv4.inet_aton(self.address)) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): address = dns.ipv4.inet_ntoa(wire[current: current + rdlen]).decode() return cls(rdclass, rdtype, address) PKF]WvvNAPTR.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import struct import dns.exception import dns.name import dns.rdata from dns._compat import xrange, text_type def _write_string(file, s): l = len(s) assert l < 256 file.write(struct.pack('!B', l)) file.write(s) def _sanitize(value): if isinstance(value, text_type): return value.encode() return value class NAPTR(dns.rdata.Rdata): """NAPTR record @ivar order: order @type order: int @ivar preference: preference @type preference: int @ivar flags: flags @type flags: string @ivar service: service @type service: string @ivar regexp: regular expression @type regexp: string @ivar replacement: replacement name @type replacement: dns.name.Name object @see: RFC 3403""" __slots__ = ['order', 'preference', 'flags', 'service', 'regexp', 'replacement'] def __init__(self, rdclass, rdtype, order, preference, flags, service, regexp, replacement): super(NAPTR, self).__init__(rdclass, rdtype) self.flags = _sanitize(flags) self.service = _sanitize(service) self.regexp = _sanitize(regexp) self.order = order self.preference = preference self.replacement = replacement def to_text(self, origin=None, relativize=True, **kw): replacement = self.replacement.choose_relativity(origin, relativize) return '%d %d "%s" "%s" "%s" %s' % \ (self.order, self.preference, dns.rdata._escapify(self.flags), dns.rdata._escapify(self.service), dns.rdata._escapify(self.regexp), replacement) @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): order = tok.get_uint16() preference = tok.get_uint16() flags = tok.get_string() service = tok.get_string() regexp = tok.get_string() replacement = tok.get_name() replacement = replacement.choose_relativity(origin, relativize) tok.get_eol() return cls(rdclass, rdtype, order, preference, flags, service, regexp, replacement) def to_wire(self, file, compress=None, origin=None): two_ints = struct.pack("!HH", self.order, self.preference) file.write(two_ints) _write_string(file, self.flags) _write_string(file, self.service) _write_string(file, self.regexp) self.replacement.to_wire(file, compress, origin) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): (order, preference) = struct.unpack('!HH', wire[current: current + 4]) current += 4 rdlen -= 4 strings = [] for i in xrange(3): l = wire[current] current += 1 rdlen -= 1 if l > rdlen or rdlen < 0: raise dns.exception.FormError s = wire[current: current + l].unwrap() current += l rdlen -= l strings.append(s) (replacement, cused) = dns.name.from_wire(wire[: current + rdlen], current) if cused != rdlen: raise dns.exception.FormError if origin is not None: replacement = replacement.relativize(origin) return cls(rdclass, rdtype, order, preference, strings[0], strings[1], strings[2], replacement) def choose_relativity(self, origin=None, relativize=True): self.replacement = self.replacement.choose_relativity(origin, relativize) PKF]RJ6r __init__.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """Class IN rdata type classes.""" __all__ = [ 'A', 'AAAA', 'APL', 'DHCID', 'KX', 'NAPTR', 'NSAP', 'NSAP_PTR', 'PX', 'SRV', 'WKS', ] PKF]2 SRV.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import struct import dns.exception import dns.rdata import dns.name class SRV(dns.rdata.Rdata): """SRV record @ivar priority: the priority @type priority: int @ivar weight: the weight @type weight: int @ivar port: the port of the service @type port: int @ivar target: the target host @type target: dns.name.Name object @see: RFC 2782""" __slots__ = ['priority', 'weight', 'port', 'target'] def __init__(self, rdclass, rdtype, priority, weight, port, target): super(SRV, self).__init__(rdclass, rdtype) self.priority = priority self.weight = weight self.port = port self.target = target def to_text(self, origin=None, relativize=True, **kw): target = self.target.choose_relativity(origin, relativize) return '%d %d %d %s' % (self.priority, self.weight, self.port, target) @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): priority = tok.get_uint16() weight = tok.get_uint16() port = tok.get_uint16() target = tok.get_name(None) target = target.choose_relativity(origin, relativize) tok.get_eol() return cls(rdclass, rdtype, priority, weight, port, target) def to_wire(self, file, compress=None, origin=None): three_ints = struct.pack("!HHH", self.priority, self.weight, self.port) file.write(three_ints) self.target.to_wire(file, compress, origin) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): (priority, weight, port) = struct.unpack('!HHH', wire[current: current + 6]) current += 6 rdlen -= 6 (target, cused) = dns.name.from_wire(wire[: current + rdlen], current) if cused != rdlen: raise dns.exception.FormError if origin is not None: target = target.relativize(origin) return cls(rdclass, rdtype, priority, weight, port, target) def choose_relativity(self, origin=None, relativize=True): self.target = self.target.choose_relativity(origin, relativize) PKF]AAAA.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import dns.exception import dns.inet import dns.rdata import dns.tokenizer class AAAA(dns.rdata.Rdata): """AAAA record. @ivar address: an IPv6 address @type address: string (in the standard IPv6 format)""" __slots__ = ['address'] def __init__(self, rdclass, rdtype, address): super(AAAA, self).__init__(rdclass, rdtype) # check that it's OK dns.inet.inet_pton(dns.inet.AF_INET6, address) self.address = address def to_text(self, origin=None, relativize=True, **kw): return self.address @classmethod def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True): address = tok.get_identifier() tok.get_eol() return cls(rdclass, rdtype, address) def to_wire(self, file, compress=None, origin=None): file.write(dns.inet.inet_pton(dns.inet.AF_INET6, self.address)) @classmethod def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None): address = dns.inet.inet_ntop(dns.inet.AF_INET6, wire[current: current + rdlen]) return cls(rdclass, rdtype, address) PKF]7qqKX.pynu[# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import dns.rdtypes.mxbase class KX(dns.rdtypes.mxbase.UncompressedMX): """KX record""" PKF]qQWKS.pynu[PKF]$__pycache__/APL.cpython-36.opt-1.pycnu[PKF]rO &(__pycache__/NAPTR.cpython-36.opt-1.pycnu[PKF]= G+__pycache__/DHCID.cpython-36.pycnu[PKF]g%(2__pycache__/NSAP.cpython-36.opt-1.pycnu[PKF] /9__pycache__/NAPTR.cpython-36.pycnu[PKF]T``#kF__pycache__/KX.cpython-36.opt-1.pycnu[PKF]٣%H__pycache__/AAAA.cpython-36.opt-1.pycnu[PKF]g N__pycache__/WKS.cpython-36.pycnu[PKF]g $Y__pycache__/WKS.cpython-36.opt-1.pycnu[PKF]"ݯ! ! d__pycache__/PX.cpython-36.pycnu[PKF] n__pycache__/A.cpython-36.pycnu[PKF]$^t__pycache__/SRV.cpython-36.opt-1.pycnu[PKF]g}__pycache__/NSAP.cpython-36.pycnu[PKF]S #__pycache__/__init__.cpython-36.pycnu[PKF]6Pb) __pycache__/IPSECKEY.cpython-36.opt-1.pycnu[PKF] "|__pycache__/A.cpython-36.opt-1.pycnu[PKF]"š__pycache__/APL.cpython-36.pycnu[PKF]\m9Mrr#__pycache__/NSAP_PTR.cpython-36.pycnu[PKF]__pycache__/SRV.cpython-36.pycnu[PKF]S )__pycache__/__init__.cpython-36.opt-1.pycnu[PKF]T``X__pycache__/KX.cpython-36.pycnu[PKF]٣__pycache__/AAAA.cpython-36.pycnu[PKF]"ݯ! ! #s__pycache__/PX.cpython-36.opt-1.pycnu[PKF]6Pb#__pycache__/IPSECKEY.cpython-36.pycnu[PKF]=&T__pycache__/DHCID.cpython-36.opt-1.pycnu[PKF]\m9Mrr);__pycache__/NSAP_PTR.cpython-36.opt-1.pycnu[PKF]DHCID.pynu[PKF]/"tt!APL.pynu[PKF];JNSAP.pynu[PKF]0}} !NSAP_PTR.pynu[PKF]211 IPSECKEY.pynu[PKF]mB B EPX.pynu[PKF]4==+A.pynu[PKF]Wvv-3NAPTR.pynu[PKF]RJ6r D__init__.pynu[PKF]2 HSRV.pynu[PKF]TAAAA.pynu[PKF]7qq\KX.pynu[PK'' n`