;ò vì{Gc@sdZdkZdkZdkZdkZdkZdkZdklZdefd„ƒYZ defd„ƒYZ dk l Z dk lZd „Zd „Zd „Zd „Zd „Zd„Zdfd„ƒYZdfd„ƒYZd„Zdefd„ƒYZd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd!eeefd"„ƒYZ d#eeefd$„ƒYZ!d%„Z"d&fd'„ƒYZ#d(„Z$d)„Z%e&d*jo eƒndS(+s $Id: Lib.py,v 1.11 2002/03/19 13:05:02 anthonybaxter Exp $ This file is part of the pydns project. Homepage: http://pydns.sourceforge.net This code is covered by the standard Python License. Library code. Largely this is packers and unpackers for various types. N(sDNSErrors UnpackErrorcBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys UnpackError#ss PackErrorcBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys PackError$s(spack(sunpackcCstd|ƒSdS(Ns!H(s struct_packsn(sn((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys pack16bit+scCstd|ƒSdS(Ns!L(s struct_packsn(sn((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys pack32bit.scCstd|ƒdSdS(Ns!Hi(s struct_unpackss(ss((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys unpack16bit1scCstd|ƒdSdS(Ns!Li(s struct_unpackss(ss((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys unpack32bit4scCsƒt|ƒtdƒjo|Sn|idƒ}t|ƒdjo td‚nd}x"|D]}|d>t|ƒB}q]W|SdS(Nis.isbad IP addressi( stypesaddrssplitsbytesslens ValueErrorsnsbytesint(saddrsbytessnsbyte((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddr2bin7s cCs4d|d?d@|d?d@|d?d@|d@fSdS(Ns %d.%d.%d.%diiÿii(sn(sn((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysbin2addr?ssPackercBshtZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z RS( sE packer base class. supports basic byte/16bit/32bit/addr/string/name cCsd|_h|_dS(Ns(sselfsbufsindex(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys__init__Hs cCs |iSdS(N(sselfsbuf(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysgetbufKscCs4t|ƒdjo td‚n|i||_dS(Nisone character expected(slenscs TypeErrorsselfsbuf(sselfsc((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddbyteMs cCs|i||_dS(N(sselfsbufsbytes(sselfsbytes((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddbytesPscCs|it|ƒ|_dS(N(sselfsbufs pack16bitsn(sselfsn((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysadd16bitRscCs|it|ƒ|_dS(N(sselfsbufs pack32bitsn(sselfsn((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysadd32bitTscCs&t|ƒ}|it|ƒ|_dS(N(saddr2binsaddrsnsselfsbufs pack32bit(sselfsaddrsn((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddaddrVs cCsXt|ƒdjotddt|ƒ‚n|itt|ƒƒƒ|i|ƒdS(NiÿsCan't encode string of length s %s (> 255)(slensss ValueErrorsselfsaddbyteschrsaddbytes(sselfss((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys addstringYscCsãg}xRti|dƒD]>}|o1t|ƒdjo td‚n|i|ƒqqWg}x}t t|ƒƒD]W} ti ti || dƒƒ} |i| ƒ|ii| ƒo|i| } PqtqtWt|ƒ} t} d}t|iƒ} g}xƒt | ƒD]u}||}t|ƒ} | t|ƒdjo%|i||| t|ƒfƒn dGdGH|t| ƒ|}q W| o|t| dBƒ}n |d }|i||_x!|D]\} }||i| }d |jo d jno d |GqÖd t |ƒGqÖWHqxWddGHdS( Ns-i(s%20s %3diiis**s%4ds ss %cs%2d( sselfsindexskeysssortskeysspacesrangeslensbufsiscsord(sselfscsspaceskeyssiskey((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysdump‰s0     ( s__name__s __module__s__doc__s__init__sgetbufsaddbytesaddbytessadd16bitsadd32bitsaddaddrs addstringsaddnamesdump(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysPackerFs          *sUnpackercBsPtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS( NcCs||_d|_dS(Ni(sbufsselfsoffset(sselfsbuf((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys__init__¥s cCsN|it|iƒjo td‚n|i|i}|id|_|SdS(NsRan off end of datai(sselfsoffsetslensbufs UnpackErrorsc(sselfsc((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysgetbyte¨s  cCsR|i|i|i|!}t|ƒ|jo td‚n|i||_|SdS(Nsnot enough data left(sselfsbufsoffsetsnssslens UnpackError(sselfsnss((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysgetbytes®s  cCst|idƒƒSdS(Ni(s unpack16bitsselfsgetbytes(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysget16bit³scCst|idƒƒSdS(Ni(s unpack32bitsselfsgetbytes(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysget32bitµscCst|iƒƒSdS(N(sbin2addrsselfsget32bit(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysgetaddr·scCs|it|iƒƒƒSdS(N(sselfsgetbytessordsgetbyte(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getstring¹sc CsÚ|iƒ}t|ƒ}|d@djoa|iƒ}t|ƒ}|d>|Bd@}|i}z||_|i ƒ}Wd||_X|Sn|djodSn|i |ƒ}|i ƒ}| o|Sn |d|SdS(NiÀiiÿ?ÿÿiss.(sselfsgetbytescsordsisdsjspointersoffsets save_offsetsgetnamesdomainsgetbytessremains( sselfscsdsisjsdomains save_offsetsremainsspointer((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysgetname»s(         ( s__name__s __module__s__init__sgetbytesgetbytessget16bitsget32bitsgetaddrs getstringsgetname(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysUnpacker¤s       c Cs4d}t|ƒ}dk}|iƒxœ|D]”}tƒ}|idƒ|i ddƒ|i dƒ|i ddƒ|i dƒ|i ddƒ|i d ƒ|i dd ƒ|i d ƒq,W|i ƒ|i ƒGd GHt |i ƒ|d ƒGdGHt|iƒ}|iƒ|idƒ|iƒ|idƒ|iƒ|idƒ|iƒ|id ƒ|iƒ|iƒx€|D]x}t|iƒ}|iƒ|idƒ|iƒ|idƒ|iƒ|idƒ|iƒ|id ƒ|iƒf }qW|i ƒ|i ƒGdGHt |i ƒ|d ƒGdGHdS(NiÄ s 192.168.0.1s*is f.ISI.ARPAisFoo.F.isi.arpaisarpaissms total for packingisms per packingsms total for unpackingsms per unpacking(sNsrangesRstimingsstartsisPackerspsaddaddrsaddbytessaddnamesfinishsmillisroundsUnpackersbufsusgetaddrsgetbytessgetnamesres(sisressNspsRsustiming((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys testpackerÖsJ                   g sRRpackercBstZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„ZRS(NcCsti|ƒt|_dS(N(sPackers__init__sselfsNonesrdstart(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys__init__ s cGsŠ|i|ƒ|i|ƒ|i|ƒ|i|ƒ|o&|do t d‚n|d}nd}|i|ƒt |i ƒ|_ dS(Nis too many argsi(sselfsaddnamesnamesadd16bitstypesklasssadd32bitsttlsrests TypeErrorsrdlengthslensbufsrdstart(sselfsnamestypesklasssttlsrestsrdlength((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys addRRheaders      cCsÅt|i|id|i!ƒ}|t|iƒ|ijodSn|i|i}|i}d}zD|i|id |_|i t|ƒƒ|i||_d}Wd| o ||_nXdS(Niii( s unpack16bitsselfsbufsrdstartsrdlengthslensrdatassave_bufsoksadd16bit(sselfsokssave_bufsrdatasrdlength((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys patchrdlengths   cCs+|itj o|iƒnt|_dS(N(sselfsrdstartsNones patchrdlength(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysendRR(scCs/|itj o|iƒnti|ƒSdS(N(sselfsrdstartsNones patchrdlengthsPackersgetbuf(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysgetbuf,scCs4|i|ti||ƒ|i|ƒ|i ƒdS(N( sselfs addRRheadersnamesTypesCNAMEsklasssttlsaddnamescnamesendRR(sselfsnamesklasssttlscname((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddCNAME0s cCsA|i|ti||ƒ|i|ƒ|i|ƒ|i ƒdS(N( sselfs addRRheadersnamesTypesHINFOsklasssttls addstringscpusossendRR(sselfsnamesklasssttlscpusos((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddHINFO4s  cCsA|i|ti||ƒ|i|ƒ|i |ƒ|i ƒdS(N( sselfs addRRheadersnamesTypesMXsklasssttlsadd16bits preferencesaddnamesexchangesendRR(sselfsnamesklasssttls preferencesexchange((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddMX9s  cCs4|i|ti||ƒ|i|ƒ|i ƒdS(N( sselfs addRRheadersnamesTypesNSsklasssttlsaddnamesnsdnamesendRR(sselfsnamesklasssttlsnsdname((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddNS>s cCs4|i|ti||ƒ|i|ƒ|i ƒdS(N( sselfs addRRheadersnamesTypesPTRsklasssttlsaddnamesptrdnamesendRR(sselfsnamesklasssttlsptrdname((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddPTRBs c Cs‚|i|ti||ƒ|i|ƒ|i|ƒ|i |ƒ|i |ƒ|i |ƒ|i | ƒ|i | ƒ|iƒdS(N(sselfs addRRheadersnamesTypesSOAsklasssttlsaddnamesmnamesrnamesadd32bitsserialsrefreshsretrysexpiresminimumsendRR( sselfsnamesklasssttlsmnamesrnamesserialsrefreshsretrysexpiresminimum((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddSOAFs       cCsh|i|ti||ƒt|ƒt i jo |g}nx|D]}|i |ƒqCW|i ƒdS(N(sselfs addRRheadersnamesTypesTXTsklasssttlstypesliststypess StringTypestxtdatas addstringsendRR(sselfsnamesklasssttlsliststxtdata((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddTXTQs cCs4|i|ti||ƒ|i|ƒ|i ƒdS(N( sselfs addRRheadersnamesTypesAsklasssttlsaddaddrsaddresssendRR(sselfsnamesklasssttlsaddress((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddAYs cCsW|i|titi|ƒ|i|ƒ|i t |ƒƒ|i |ƒ|iƒdS(N(sselfs addRRheadersnamesTypesWKSsClasssINsttlsaddaddrsaddresssaddbyteschrsprotocolsaddbytessbitmapsendRR(sselfsnamesttlsaddresssprotocolsbitmap((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddWKS]s   cCs t‚dS(N(sNotImplementedError(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysaddSRVcs(s__name__s __module__s__init__s addRRheaders patchrdlengthsendRRsgetbufsaddCNAMEsaddHINFOsaddMXsaddNSsaddPTRsaddSOAsaddTXTsaddAsaddWKSsaddSRV(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysRRpacker s            cCsž|djo|d|fSn|djo|d|dfSn|djo|d|dfSn|djo|d|dfSn|d |dfSdS( Ni<s %d secondsis %d minutesi€Qs%d hoursi€: s%d dayss%d weeks(sseconds(sseconds((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys prettyTimefs    s RRunpackercBs}tZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „ZRS(NcCsti||ƒt|_dS(N(sUnpackers__init__sselfsbufsNonesrdend(sselfsbuf((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys__init__tscCsc|iƒ}|iƒ}|iƒ}|iƒ}|iƒ}|i ||_ |||||fSdS(N( sselfsgetnamesnamesget16bitsrrtypesklasssget32bitsttlsrdlengthsoffsetsrdend(sselfsnamesklasssttlsrrtypesrdlength((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getRRheaderws     cCs$|i|ijo td‚ndS(Nsend of RR not reached(sselfsoffsetsrdends UnpackError(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysendRRscCs|iƒSdS(N(sselfsgetname(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getCNAMEdata‚scCs|iƒ|iƒfSdS(N(sselfs getstring(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getHINFOdata„scCs|iƒ|iƒfSdS(N(sselfsget16bitsgetname(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getMXdata†scCs|iƒSdS(N(sselfsgetname(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getNSdataˆscCs|iƒSdS(N(sselfsgetname(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getPTRdataŠsc Cs…|iƒ|iƒdf|iƒfdft|iƒƒdft|iƒƒdft|iƒƒdft|iƒƒfSdS(Nsserialsrefresh sretrysexpiresminimum(sselfsgetnamesget32bits prettyTime(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getSOAdataŒscCs<g}x+|i|ijo|i|iƒƒq W|SdS(N(slistsselfsoffsetsrdendsappends getstring(sselfslist((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getTXTdata”s cCs|iƒSdS(N(sselfsgetaddr(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysgetAdata™scCsH|iƒ}t|iƒƒ}|i|i|iƒ}|||fSdS(N( sselfsgetaddrsaddresssordsgetbytesprotocolsgetbytessrdendsoffsetsbitmap(sselfsbitmapsprotocolsaddress((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getWKSdata›s cCsD|iƒ}|iƒ}|iƒ}|iƒ}||||fSdS(sP _Service._Proto.Name TTL Class SRV Priority Weight Port Target N(sselfsget16bitsprioritysweightsportsgetnamestarget(sselfsprioritysportsweightstarget((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getSRVdata s     (s__name__s __module__s__init__s getRRheadersendRRs getCNAMEdatas getHINFOdatas getMXdatas getNSdatas getPTRdatas getSOAdatas getTXTdatasgetAdatas getWKSdatas getSRVdata(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys RRunpackerss            sHpackercBstZd„ZRS(NcCsª|i|ƒ|i|d@d>|d@d>B|d@d>B|d@d>B|d@d>B|d@d>B|d@d>B| d@Bƒ|i| ƒ|i| ƒ|i| ƒ|i| ƒdS( Niii i i iii(sselfsadd16bitsidsqrsopcodesaastcsrdsraszsrcodesqdcountsancountsnscountsarcount(sselfsidsqrsopcodesaastcsrdsraszsrcodesqdcountsancountsnscountsarcount((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys addHeader¯s  e   (s__name__s __module__s addHeader(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysHpacker®ss HunpackercBstZd„ZRS(Nc Csí|iƒ} |iƒ} | d?d@| d?d@| d?d@| d?d@| d?d@| d?d@| d?d@| d ?d@f\}}}}}} } } |iƒ}|iƒ}|iƒ}|iƒ}| |||||| | | ||||f SdS( Niii i i iiii(sselfsget16bitsidsflagssqrsopcodesaastcsrdsraszsrcodesqdcountsancountsnscountsarcount(sselfsaasqrsnscountsqdcountstcsrdsarcountsopcodesrasflagsszsrcodesidsancount((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getHeader»s  v    (s__name__s __module__s getHeader(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys HunpackerºssQpackercBstZd„ZRS(NcCs+|i|ƒ|i|ƒ|i|ƒdS(N(sselfsaddnamesqnamesadd16bitsqtypesqclass(sselfsqnamesqtypesqclass((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys addQuestionÒs  (s__name__s __module__s addQuestion(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysQpackerÑss QunpackercBstZd„ZRS(NcCs#|iƒ|iƒ|iƒfSdS(N(sselfsgetnamesget16bit(sself((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys getQuestionØs(s__name__s __module__s getQuestion(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys Qunpacker×ssMpackercBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysMpackerßss MunpackercBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys Munpackerâsc CsAdG|iƒ\ } }} }}}} } } }}}}d| Gd|| |||| | | fGH|o dGHn| o d| GHnd||||fGHx&t|ƒD]}d|Gt|ƒq¦Wx&t|ƒD]}d|Gt|ƒqÏWx&t|ƒD]}d |Gt|ƒqøWx&t|ƒD]}d |Gt|ƒq!WdS( NsHEADER:sid=%d,s=qr=%d, opcode=%d, aa=%d, tc=%d, rd=%d, ra=%d, z=%d, rcode=%d,s*** response truncated! ***s *** nonzero error code! (%d) ***s0 qdcount=%d, ancount=%d, nscount=%d, arcount=%ds QUESTION %d:s ANSWER %d:sAUTHORITY RECORD %d:sADDITIONAL RECORD %d:(sus getHeadersidsqrsopcodesaastcsrdsraszsrcodesqdcountsancountsnscountsarcountsrangesisdumpQsdumpRR(susaasqrsisnscountsqdcountstcsrdsarcountsopcodesraszsrcodesidsancount((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysdumpMés23!      s DnsResultcBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCsGh|_g|_g|_g|_g|_||_|i|ƒdS(N( sselfsheaders questionssanswerss authoritys additionalsargssstoreMsu(sselfsusargs((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pys__init__s      cCsdk}d|id|idfGHd}|ido|d}n|i}d|GHdGHd |d |d |d fGHt|d „dddddfƒ}dti |ƒ|d|d|d|dfGHdGHx/|i D]$}d|d|d|dfGHqáWHdGHx7|i D],}d|d|d |d|d fGHqWHd!GHx7|iD],}d|d|d |d|d fGHqYWHd"GHx7|iD],}d|d|d |d|d fGHq™WH|iid#ƒod$|id#GHnd%|id&GHd'|i|iƒƒGHdS((Ns; <<>> PDG.py 1.0 <<>> %s %ssnamesqtypessrdsrecurs s ;; options: s;; got answer:s+;; ->>HEADER<<- opcode %s, status %s, id %dsopcodesstatussidcCs||S(N(shsx(sxsh((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysssqrsaasrastcs4;; flags: %s; Ques: %d, Ans: %d, Auth: %d, Addit: %dsqdcountsancountsnscountsarcounts ;; QUESTIONS:s!;; %s, type = %s, class = %ssqnamesqtypestrs qclassstrs ;; ANSWERS:s%-20s %-6s %-6s %ssttlstypenamesdatas;; AUTHORITY RECORDS:s;; ADDITIONAL RECORDS:selapseds;; Total query time: %d msecs;; To SERVER: %ssservers ;; WHEN: %s(stimesselfsargssoptsheadershsfiltersflagssstringsjoins questionssqsanswerssas authoritys additionalshas_keysctime(sselfsoptsqshsflagssastime((s9/mnt/gmirror/ports/dns/py-dns/work/pydns-2.3.0/DNS/Lib.pysshow sF   $1 " * * *cCs¨|iƒ\ |id<|id<|id<|id<|id<|id<|id<|id<|id <|id <|id <|id <|id