; `Ec@s{dZdkZdkZdZdZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dei,fdYZ-e.djo=dk/Z/dk0l1Z1d e/i2fd!YZ3e/i4ndS("sDomain Name System.Niiiiiii i@iiiiiiiii i i i iii!ic Cs|id}|idd}xt|D]\}}di||i }|i |}| oft|djo/|t|}|djo|||H(snamessplitslabelssappendsbufs enumeratesislabelsjoinsupperskeys label_ptrssgetsptrslensoffschrsstructspack( snamesoffs label_ptrssislabelsslabelskeysbufsptr((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys pack_name:s"    cCs+d}d}xtdD]}t||}|djo|d7}Pq|d@djoati d|||d!dd@}|d7}| o |}n|t ||dd }Pq|d7}|||||!d }t |d jot id n||7}qW|id |fSdS( Nsiidiis>Hii?s.isname longer than 255 bytes(snames saved_offsrangesisordsbufsoffsnsstructsunpacksptrs unpack_nameslensdpkts UnpackErrorsstrip(sbufsoffsnamesisns saved_offsptr((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys unpack_nameMs*   %   sDNScBs'tZdddfddefddgfddgfddgfddgffZd Zd ZeeeZd Zd Z eee Z d Z dZ ee e Z deifdYZdefdYZdZdZdZdZdZdZdZRS(NsidsHisopsqdsansnssarcCst|id@djSdS(Ni(sintsselfsop(sself((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysget_qroscCs-|o|idO_n|idM_dS(Nii(svsselfsop(sselfsv((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysset_qrqscCs|id?d@SdS(Ni i(sselfsop(sself((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys get_opcodevscCs |id@|d@d>B|_dS(Niii (sselfsopsv(sselfsv((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys set_opcodexscCs|id@SdS(Ni(sselfsop(sself((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys get_rcode|scCs|id@|d@B|_dS(Nii(sselfsopsv(sselfsv((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys set_rcode~ssQcBsPtZdZdddfddefddeffZdZeZdZRS( s DNS question.snames1025ssstypesHsclscCs tdS(N(sNotImplementedError(sself((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys__len__scCs tdS(N(sNotImplementedError(sselfsbuf((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysunpacks( s__name__s __module__s__doc__sDNS_AsDNS_INs__hdr__s__len__s__str__sunpack(((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysQs * sRRcBsntZdZdddfddefddefddd fd dd fd d dffZdZdZRS(sDNS resource record.snames1025ssstypesHsclssttlsIisrlenisrdatasscCsX|io |iSn|itjo |iSn%|itjot|i||Sn|it jot|i ||Sn|it jot|i ||Sn|itjog}|it|i|||it|i|t|d||itid|i|i|i|i|idi|Sn|itjo.tid|it|i|d|Sn|itjp |it joKdigi}|i"D]&}|dt$t||fq~Snf|it%jo |i&SnK|it'jo:tid|i(|i)|i*t|i+|d|SndS( Nis>IIIIIss>His%s%ss>HHHi(,sselfsrdatastypesDNS_AsipsDNS_NSs pack_namesnsnamesoffs label_ptrss DNS_CNAMEscnamesDNS_PTRsptrnamesDNS_SOAslsappendsmnamesrnameslensstructspacksserialsrefreshsretrysexpiresminimumsjoinsDNS_MXs preferencesmxnamesDNS_TXTs DNS_HINFOs_[1]stextsxschrsDNS_AAAAsip6sDNS_SRVsprioritysweightsportssrvname(sselfsoffs label_ptrssxsls_[1]((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys pack_rdatas2   *. K cCsl|itjo|i|_nI|itjot||\|_ }n|it jot||\|_ }n|it jot||\|_ }n|itjoot||\|_}t||\|_}tid|||d!\|_|_|_|_|_nF|itjo<tid|id |_t||d\|_}n|itjp |itjo^g|_|i}x|o=t|d}|ii |dd|!|d|}qWn||it!jo|i|_"n\|it#joKtid|id \|_$|_%|_&t||d\|_'}ndS( Ns>IIIIIis>Hiiis>HHHi((sselfstypesDNS_AsrdatasipsDNS_NSs unpack_namesbufsoffsnsnames DNS_CNAMEscnamesDNS_PTRsptrnamesDNS_SOAsmnamesrnamesstructsunpacksserialsrefreshsretrysexpiresminimumsDNS_MXs preferencesmxnamesDNS_TXTs DNS_HINFOstextsordsnsappendsDNS_AAAAsip6sDNS_SRVsprioritysweightsportssrvname(sselfsbufsoffsn((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys unpack_rdatas8?    +(s__name__s __module__s__doc__sDNS_AsDNS_INs__hdr__s pack_rdatas unpack_rdata(((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysRRs N cCs=|t|it||itid|i |i SdS(s*Append packed DNS question and return buf.s>HHN( sbufs pack_namesqsnameslensselfs label_ptrssstructspackstypescls(sselfsbufsq((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pyspack_qscCse|i}t||\|_}tid|||d!\|_ |_ |d7}||fSdS(s#Return DNS question and new offset.s>HHiN( sselfsQsqs unpack_namesbufsoffsnamesstructsunpackstypescls(sselfsbufsoffsq((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysunpack_qs  ) cCst|it||i}|it|t|d|i}||t i d|i |i |i t||SdS(s$Append packed DNS RR and return buf.i s>HHIHN(s pack_namesrrsnameslensbufsselfs label_ptrss pack_rdatasrdatasstructspackstypesclssttl(sselfsbufsrrsnamesrdata((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pyspack_rrs )"cCs|i}t||\|_}tid|||d!\|_ |_ |_ }|d7}||||!|_ |i||||7}||fSdS(sReturn DNS RR and new offset.s>HHIHi N(sselfsRRsrrs unpack_namesbufsoffsnamesstructsunpackstypesclssttlsrdlensrdatas unpack_rdata(sselfsbufsoffsrrsrdlen((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys unpack_rrs 2  cCstii|||i}|i}g|_x<t |D].}|i ||\}}|ii |q;Wx~dddfD]m}t||d}t||gxBt |D]4}|i||\}}t||i |qWq}Wd|_dS(Nsansnssaris(sdpktsPacketsunpacksselfsbufs __hdr_len__soffsqdscntsrangesisunpack_qsqsappendsxsgetattrssetattrs unpack_rrsrrsdata(sselfsbufscntsoffsrrsisqsx((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysunpacks"     cCstt|SdS(N(slensstrsself(sself((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys__len__sc Csh|_ti|i|i|it|it|i t|i t|i }x#|iD]}|i||}qaWxCdddfD]2}x)t||D]}|i||}qWqW|`|SdS(Nsansnssar(sselfs label_ptrssstructspacks __hdr_fmt__sidsopslensqdsansnssarsbufsqspack_qsxsgetattrsrrspack_rr(sselfsrrsqsxsbuf((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys__str__ s $* (s__name__s __module__sDNS_RDs__hdr__sget_qrsset_qrspropertysqrs get_opcodes set_opcodesopcodes get_rcodes set_rcodesrcodesdpktsPacketsQsRRspack_qsunpack_qspack_rrs unpack_rrsunpacks__len__s__str__(((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pysDNSes&N      H     s__main__(sIPs DNSTestCasecBstZdZdZRS(NcCsd}t|}t|ii}|i|i di djo|i di djd}t|}|i|t |jdS(NsE5aBk0Bk0w57dҁ wwwgooglecom Vwwwgoogleakadnsnet,@h,@c7KG usw5akam>7KGusw6t7KGusw7t7KGasia3t7KGza77KGzcakadnsorg7KGzf77KGzh7KGeur3t7KGuse2t7KGuse4t4й1 ?64?S1 ?0. -g"1?Ѫ5 PCCo?I ΄dl A )l iswww.google.comiswww.google.akadns.netswwwcnncom( sssIPsipsDNSsudpsdatasdnssselfs failUnlesssqdsnamesansstr(sselfsdnssipss((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys test_basics 4 cCsd}t|}|i|ididjoY|ididjoB|i di djo+|i di djo|i di d j|i|t |jdS( Nsg11211141in-addrarpa   6$default v-umce-ifsumnetumichedu 6 shabbyifsO 6 fish-licensem 6 dns2itdOis1.1.211.141.in-addr.arpas"default.v-umce-ifs.umnet.umich.edusshabby.ifs.umich.eduil6 isdns2.itd.umich.edu( sssDNSsdnssselfs failUnlesssqdsnamesansptrnamesnssnsnamesttlsstr(sselfsssdns((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pystest_PTR's y(s__name__s __module__s test_basicstest_PTR(((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys DNSTestCases (5s__doc__sstructsdpktsDNS_QsDNS_Rs DNS_QUERYs DNS_IQUERYs DNS_STATUSs DNS_NOTIFYs DNS_UPDATEsDNS_CDsDNS_ADsDNS_ZsDNS_RAsDNS_RDsDNS_TCsDNS_AAsDNS_RCODE_NOERRsDNS_RCODE_FORMERRsDNS_RCODE_SERVFAILsDNS_RCODE_NXDOMAINsDNS_RCODE_NOTIMPsDNS_RCODE_REFUSEDsDNS_RCODE_YXDOMAINsDNS_RCODE_YXRRSETsDNS_RCODE_NXRRSETsDNS_RCODE_NOTAUTHsDNS_RCODE_NOTZONEsDNS_AsDNS_NSs DNS_CNAMEsDNS_SOAsDNS_PTRs DNS_HINFOsDNS_MXsDNS_TXTsDNS_AAAAsDNS_SRVsDNS_INs DNS_CHAOSs DNS_HESIODsDNS_ANYs pack_names unpack_namesPacketsDNSs__name__sunittestsipsIPsTestCases DNSTestCasesmain(/sunittestsDNS_RCODE_FORMERRsDNS_RCODE_YXRRSETsDNS_RAsDNS_RDs DNS_QUERYs DNSTestCasesDNS_MXsDNS_TCsDNS_INsDNS_NSs DNS_UPDATEsDNS_AAsstructsDNS_RCODE_YXDOMAINsDNS_CDs DNS_STATUSs DNS_HESIODsDNS_RCODE_NXRRSETsDNS_RCODE_NOTZONEs DNS_HINFOsIPs DNS_NOTIFYsDNS_RCODE_NOTAUTHs DNS_CNAMEs unpack_namesDNS_SOAsDNS_ADs DNS_IQUERYsdpktsDNS_RCODE_NOERRsDNSsDNS_PTRsDNS_ANYsDNS_TXTs DNS_CHAOSsDNS_AsDNS_RCODE_NXDOMAINsDNS_RCODE_REFUSEDsDNS_SRVs pack_namesDNS_RCODE_NOTIMPsDNS_QsDNS_RCODE_SERVFAILsDNS_RsDNS_AAAAsDNS_Z((s8/mnt/gmirror/ports/net/py-dpkt/work/dpkt-1.6/dpkt/dns.pys?sb