U v`:@s,dZddlmZddlZddlmZddlmZddlm Z dZ d Z dZ dZ d Zd Zd Zd Zd ZdZdZdZediZGdddejZGdddejZGdddeZGdddeZGdddeZGdddeZddZd d!Z Gd"d#d#eZ!Gd$d%d%eZ"Gd&d'd'eZ#Gd(d)d)eZ$dS)*zSnoop file format.)absolute_importN)abstractmethod)dpkt)introundl`=s c@seZdZdZdZdZdS)PktHdrzsnoop packet header. TODO: Longer class information.... Attributes: __hdr__: Header fields of snoop packet header. TODO. !))orig_lenIr)incl_lenrr)rec_lenrr) cum_dropsrr)ts_secrr)ts_usecrrN)__name__ __module__ __qualname____doc____byte_order____hdr__rrb/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/snoop.pyr s rc@s0eZdZdZdZddefddefddeffZdS) FileHdrzsnoop file header. TODO: Longer class information.... Attributes: __hdr__: Header fields of snoop file header. TODO. rmagicQvrlinktypeN) rrrrr SNOOP_MAGIC SNOOP_VERSION SDL_ETHERrrrrr r!Ks  r!c@s2eZdZddZddZd ddZedd ZdS) FileWritercCs||_|jj|_dSN)_fwriteselffileobjrrr __init__^szFileWriter.__init__cCs|jdSr*)r+closer.rrr r1bszFileWriter.closeNcCs$|dkrt}|t||dS)zWrite single packet and optional timestamp to file. Args: pkt: `bytes` will be called on this and written to file. ts (float): Timestamp in seconds. Defaults to current time. N)time writepkt_timebytesr.pkttsrrr writepkteszFileWriter.writepktcCsdS)zWrite single packet and its timestamp to file. Args: pkt (bytes): Some `bytes` to write to the file ts (float): Timestamp in seconds Nrr6rrr r4qszFileWriter.writepkt_time)N)rrrr0r1r9rr4rrrr r)]s  r)cs8eZdZdZdZeffdd ZddZddZZ S) WriterziSimple snoop dumpfile writer. TODO: Longer class information.... Attributes: TODO. i@Bcs>tt||t|d}t|_|jj|_|t|dS)N)r%) superr:r0r!rZ_PktHdr _pack_hdrr,r5)r.r/r%fh __class__rr r0s   zWriter.__init__c Cs^t|}d|d@}|||tj||dt|t|d|j}|||d|dS)zWrite single packet and its timestamp to file. Args: pkt (bytes): Some `bytes` to write to the file ts (float): Timestamp in seconds r rrrN)lenr<r __hdr_len__intrprecision_multiplierr,)r.r7r8pkt_lenpad_len pkt_headerrrr r4s  zWriter.writepkt_timec Cst|j}|j}|D]^\}}t|}d|d@}|||tj||dt|t|d|j}|||d|qdS)zWrite an iterable of packets to file. Timestamps should be in seconds. Packets must be of type `bytes` as they will not be cast. Args: pkts: iterable containing (ts, pkt) r rrrr@N)r,r<rArrBrCrrD) r.pktsr,Zpack_hdrr8r7rErFrGrrr writepktss    zWriter.writepkts) rrrrrDr(r0r4rI __classcell__rrr>r r:|s  r:c@sReZdZddZeddZddZddd Zd d Zd d Z ddZ ddZ dS) FileReadercCs&t|dd|jj|_||_d|_dS)Nnamez<%s>)getattrr?rrLr+filterr-rrr r0szFileReader.__init__cCs |jSr*)r+filenor2rrr fdsz FileReader.fdcCs|jSr*)rQr2rrr rPszFileReader.filenorcCstdSr*)NotImplementedError)r.valueoptimizerrr setfilterszFileReader.setfiltercCst|Sr*)listr2rrr readpktsszFileReader.readpktsc Gsd}|dkr`t|D]H}zt|\}}Wntk rBYqYnX|||f||d7}qn&|D] \}}|||f||d7}qd|S)aCollect and process packets with a user callback. Return the number of packets processed, or 0 for a savefile. Arguments: cnt -- number of packets to process; or 0 to process all packets until EOF callback -- function with (timestamp, pkt, *args) prototype *args -- optional arguments passed to callback on execution rr)rangenext StopIteration)r.Zcntcallbackargs processed_r8r7rrr dispatchs      zFileReader.dispatchcGs|jd|f|S)a$ Convenience method which will apply the callback to all packets. Returns the number of packets processed. Arguments: callback -- function with (timestamp, pkt, *args) prototype *args -- optional arguments passed to callback on execution r)r_)r.r[r\rrr loops zFileReader.loopcCs|Sr*rr2rrr __iter__szFileReader.__iter__N)r) rrrr0propertyrQrPrUrWr_r`rarrrr rKs   rKcs4eZdZdZfddZddZddZeZZS)ReaderzwSimple pypcap-compatible snoop file reader. TODO: Longer class information.... Attributes: TODO. csTtt|||jtj}t||_t|_ |jj t krBt dt |jj|_dS)Ninvalid snoop header)r;rcr0r+readr!rB_fhr_phr"r& ValueErrordltoffr%dloff)r.r/bufr>rr r0s  zReader.__init__cCs|jjSr*)rfr%r2rrr datalinkszReader.datalinkcCsV|j|jj}|st||}|j|j|jj}|j|jd|d|jfS)Ng.A) r+rergrBrZrrrr)r.rkhdrrrr __next__s  zReader.__next__) rrrrr0rlrnrYrJrrr>r rcs  rccCsddlm}|d}t|}|jdks*t|jdks8t|jdksFt|jdksTt|jdksbt|j d ksptt ||kstdS) Nr unhexlify0000000010000000200000003000000040000000500000006rrrr r r ) binasciirprrAssertionErrorrrrrrr5)rprkr7rrr test_snoop_pkt_header"s rtcCsJddlm}|d}t|}|jdks*t|jdks8t|jdksFtdS)NrroZ 000000000000000b000000160000014d iM)rrrpr!r"rsr$r%)rprkrmrrr test_snoop_file_header3s rwc@s@eZdZeddZddZddZddZd d Zd d Z d S)TestSnoopWritercCsNddlm}ddlm}||_t|j|_|d|_|d|_|d|_ dS)NrBytesIOrro 736e6f6f700000000000000200000004rqZ`000000180000001800000030000000000000000000000000000000010000000200000003000000040000000500000006) compatrzrrrpfobjr:writer file_headerr7pkt_and_header)clsrzrprrr setup_class@s   zTestSnoopWriter.setup_classcCs(|jd|j}||jks$tdSNr)r}seekrerrsr.rkrrr test_snoop_file_writer_filehdr]s  z.TestSnoopWriter.test_snoop_file_writer_filehdrcCsn|j}|j|j|j||j}|dd|jddksLt|dd|jddksjtdS)N) r}tellr~r9r7rrerrsr.locrkrrr test_writepktcs    zTestSnoopWriter.test_writepktcCsB|j}|j|jd|j||j}||jks>tdSr) r}rr~r4r7rrerrsrrrr test_writepkt_timeos    z"TestSnoopWriter.test_writepkt_timecCs|j}|jd|jfd|jfd|jfg|j||j}t|j}t ddD]v}||||d|}|dd|jddkst |ddt j d|kst |dd|jddksXt qXdS)Nrrrrrz>I)r}rr~rIr7rrerArrXrsrstructpack)r.rrkrEidxr7rrr test_writepktsws    zTestSnoopWriter.test_writepktscCs&|jjr t|j|jjs"tdSr*r}closedrsr~r1r2rrr test_snoop_writer_closes  z'TestSnoopWriter.test_snoop_writer_closeN) rrr classmethodrrrrrrrrrr rx?s  rxc@s@eZdZeddZddZddZddZd d Zd d Z d S)TestSnoopReadercCs.ddlm}|d|_|d|_|d|_dS)Nrror{Z0000000180000001800000030000000000000000000000000rq)rrrpheaderrG pkt_bytes)rrprrr rs  zTestSnoopReader.setup_classcCs4ddlm}||j|j|j|_t|j|_dSNrry)r|rzrrGrr}rcreaderr.rzrrr setup_methods  zTestSnoopReader.setup_methodcCs&|jjdkst|jtks"tdS)Nr)rrjrsrlr(r2rrr test_openszTestSnoopReader.test_openc CsTddl}|jd|jd|jd|jtddt|jW5QRXdS)Nrsrd)match)pytestr}rr,raisesrhrcr.rrrr test_invalid_magics    z"TestSnoopReader.test_invalid_magiccCs,t|j\}}|dkst||jks(tdSr)rYrrsr)r.r8r7rrr test_read_pkts zTestSnoopReader.test_read_pktcCsD|j}t|dkst|d\}}|dks2t||jks@tdS)Nrr)rrWrArsr)r.rHr8rkrrr test_readpktss    zTestSnoopReader.test_readpktsN) rrrrrrrrrrrrrr rs  rc@s$eZdZddZddZddZdS)TestFileWritercCs$ddlm}||_t|j|_dSr)r|rzr}r)r~rrrr rs zTestFileWriter.setup_methodcCs2d}|j||jd|j|ks.tdS)Ns r)r~r,r}rrersrrrr test_writes  zTestFileWriter.test_writecCs&|jjr t|j|jjs"tdSr*rr2rrr test_closes  zTestFileWriter.test_closeN)rrrrrrrrrr rsrc@sreZdZdZdddgZGdddeZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZdS)TestFileReaderzK Testing for the FileReader superclass which Reader inherits from. )rs000001)rs000002)rs000003cs,eZdZdZfddZddZeZZS)zTestFileReader.SampleReaderzk Very simple class which returns index as timestamp, and unparsed buffer as packet cs"ttj||ttj|_dSr*)r;r SampleReaderr0iterrH_iter)r.r}r>rr r0sz$TestFileReader.SampleReader.__init__cCs t|jSr*)rYrr2rrr rnsz$TestFileReader.SampleReader.__next__)rrrrr0rnrYrJrrr>r rs rcCs$ddl}||_||j|_dSr)tempfile TemporaryFilerQrr)r.rrrr rs zTestFileReader.setup_methodc Csddl}|jj|jjkst|jj|jks2t|j|jksJt|jjdksZt|t|j ddW5QRXdS)NrrMrr) rrrLrQrsrPrOrrRrUrrrr test_attributess zTestFileReader.test_attributescCsR|j}tt|t|D].\}\}}||ks6t||j|dkstqdSNr)rrWprintrA enumeratersrH)r.rHrr8rkrrr test_readpkts_lists    z!TestFileReader.test_readpkts_listcCs>t|jD].\}\}}||ks"t||j|dks tq dSr)rrrsrH)r.rr8rkrrr test_readpkts_iters z!TestFileReader.test_readpkts_itercCs|jddddkstdS)NrcSsdSr*rr8r7rrr z2TestFileReader.test_dispatch_all..rrr_rsr2rrr test_dispatch_allsz TestFileReader.test_dispatch_allcCs|jddddkstdS)NrcSsdSr*rrrrr rrz3TestFileReader.test_dispatch_some..rr2rrr test_dispatch_somesz!TestFileReader.test_dispatch_somecCs|jddddkstdS)NrcSsdSr*rrrrr rrz:TestFileReader.test_dispatch_termination..rrr2rrr test_dispatch_terminationsz(TestFileReader.test_dispatch_terminationcs<Gddd|jfdddks*tjdks8tdS)Nc@seZdZdZeddZdS)z'TestFileReader.test_loop..CountrcSs|jd7_dSr)counter)rrrr inc!sz+TestFileReader.test_loop..Count.incN)rrrrrrrrrr CountsrcsSr*)rrrrr r%rz*TestFileReader.test_loop..r)rr`rsrr2rrr test_loopszTestFileReader.test_loopcCs4t|j\}}|dkst||jddks0tdS)Nrr)rYrrsrH)r.r8rkrrr test_next(s zTestFileReader.test_nextN)rrrrrHrKrrrrrrrrrrrrrr rs  r)%r __future__rr3abcrrMrr|rr&r'ZSDL_8023ZSDL_8024ZSDL_8025ZSDL_8026r(ZSDL_HDLCZ SDL_CHSYNCZ SDL_IBMCCZSDL_FDDIZ SDL_OTHERriZPacketrr!objectr)r:rKrcrtrwrxrrrrrrr s<    +D?# S: