U v`=@sTdZddlmZddlmZddlmZmZddl m a ddl Z ddl m Z dd l mZmZd Zd ZdZdZdZd Zd ZdZdZdZdZd Zd ZdZd Zd ZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,d Z-d Z.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:e j;nd!Z=dZ>e+de,de1d"e2de3d#e4de5d$e9d%e6de=de8d#i Z?d&d'Z@d(d)ZAd*d+ZBd,d-ZCd.d/ZDGd0d1d1e jEZFGd2d3d3eFZGGd4d5d5e jEZHGd6d7d7eHZIGd8d9d9eFZJGd:d;d;eJZKGdd?d?eLZMGd@dAdAeFZNGdBdCdCeNZOGdDdEdEePZQGdFdGdGePZRdHdIZSdJdKZTdLdMZUdNdOZVdPdQZWdRdSZXdTdUZYGdVdWdWZZGdXdYdYZ[e[dZe\d[d\eYd]d^Z]e[dZe\d_d\eYd`daZ^e[dZe\dbd\eYdcddZ_e[dZe\ded\eYdfdgZ`e[dhdidjeYdkdlZae[dhdmdjeYdndoZbdpdqZceYdrdsZde[dtdudveYdwdxZee[dtdydveYdzd{ZfeYd|d}ZgeYd~dZhddZiddZjddZkeYddZleYddZmeYddZneYddZoeZddZpeZddidddZqeZddZreZddZsddZtddZuddZvddZwddZxddZyddZzdS)z pcap Next Generation file format)print_function)absolute_import)packunpack)timeN)dpkt)BytesIOintroundiM<+i+Ir) struct_unpack struct_pack)ir&c/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/pcapng.py_swap32bTsr(cCs|d}|s|S|d|S)z-Return int `i` aligned to the 32-bit boundaryrr&)r%rr&r&r' _align32bYsr*cCstdtt||S)zCReturn bytes `s` padded with zeroes to align to the 32-bit boundary%ss)r$r*lensr&r&r'_padded_sr/cCstd||S)zKReturn bytes `s` padded with `tolen` zeroes to align to the 32-bit boundaryr+)r$)r.Ztolenr&r&r' _padded_tolendsr0cCstt|t|S)zGReturn size of padding required to align str `s` to the 32-bit boundary)r*r,r-r&r&r'_padlenisr1c@sFeZdZdZdZddZddZddd Zd d Zd d Z ddZ dS) _PcapngBlockz*Base class for a pcapng block with Options))typeIr)r,r4r)_lenr4rcCstj||dSN)rPacketrselfbufr&r&r' unpack_hdrxsz_PcapngBlock.unpack_hdrcCs0tj|||jt|kr"tj||dSr6)rr7rr,NeedData_do_unpack_optionsr8r&r&r'r{sz_PcapngBlock.unpackNcCsg|_d|_|p|jd}|j|d}||||}|r|jddkrRt|nt|}|j||t|d}|jt kr8qq8t |jdd|ddd|_ |j |jkrt ddS)Nrrsz0_PcapngBlock._do_pack_options..)getattrrBrIrJr PackErrorjoinr9r&r&r'_do_pack_optionss   z_PcapngBlock._do_pack_optionscCsR|}t||j}||_||_||j||}d|dd||ddgSNrOr@)rZr,rDr5 _pack_hdrr3rXr9rMnhdr_bufr&r&r' __bytes__s z_PcapngBlock.__bytes__cCs0t|dds|jStdd|jD}|j|S)NrBcss|]}t|VqdSr6r,rRr&r&r'rUsz'_PcapngBlock.__len__..)rVrDsumrBr9opts_lenr&r&r'__len__s z_PcapngBlock.__len__)N) __name__ __module__ __qualname____doc____hdr__r;rr=rZr`rer&r&r&r'r2ns  r2c@seZdZdZdS) PcapngBlockLEr?NrfrgrhZ__byte_order__r&r&r&r'rksrkc@s>eZdZdZddefdfZddZddZd d Zd d Z d S)rGzA single OptionrIH)r,rmrcCsBtj||||j|j|j|_|jtkr>|jd|_ dS)Nutf-8) rr7rrDr,rCrIPCAPNG_OPT_COMMENTdecodetextr8r&r&r'rs zPcapngOption.unpackcCs\|jtkr2t|d|j}t|ts,|dn||_t|j|_||j|j}|t |jS)Nrqrn) rIrorVrC isinstancerQencoder,r\r/)r9rqhdrr&r&r'r`s   zPcapngOption.__bytes__cCs|jt|jt|jSr6)rDr,rCr1rYr&r&r'reszPcapngOption.__len__cCs(|jtkrd|jjStj|SdS)Nz{0}(opt_endofopt))rIrJformat __class__rfrr7__repr__rYr&r&r'rws zPcapngOption.__repr__N) rfrgrhrirJrjrr`rerwr&r&r&r'rGs rGc@seZdZdZdS)rFr?Nrlr&r&r&r'rFsrFc@sBeZdZdZddefdddefddefddefd d fZd d Z d S)SectionHeaderBlockzSection Header blockr3r4)r,r4bomv_majorrmv_minor)sec_lenqr)r5r4ryc Csb|}t||j}||_||_||j||j|j|j|j |}d |dd||ddgSr[) rZr,rDr5r\r3rzr{r|r}rXr]r&r&r'r`s zSectionHeaderBlock.__bytes__N) rfrgrhri PCAPNG_BT_SHBBYTE_ORDER_MAGICPCAPNG_VERSION_MAJORPCAPNG_VERSION_MINORrjr`r&r&r&r'rxs rxc@seZdZdZdS)SectionHeaderBlockLEr?Nrlr&r&r&r'rsrc@s4eZdZdZddefdddefddd fZd d Zd S) InterfaceDescriptionBlockzInterface Description blockr3r4)r,r4linktyperm) _reservedrmr)snaplenr4)r5r4rcCs^|}t||j}||_||_||j||j|j|j|}d |dd||ddgSr[) rZr,rDr5r\r3rrrrXr]r&r&r'r`sz#InterfaceDescriptionBlock.__bytes__N)rfrgrhri PCAPNG_BT_IDB DLT_EN10MBrjr`r&r&r&r'rs rc@seZdZdZdS)InterfaceDescriptionBlockLEr?Nrlr&r&r&r'r src@sBeZdZdZddefdddddd d fZd d Zd dZddZdS)EnhancedPacketBlockzEnhanced Packet blockr3r4)r,r4@)iface_idr4r)ts_highr4r)ts_lowr4r)caplenr4r)pkt_lenr4r)r5r4rcCs^tj|||jt|kr"tj|jd}||||j|_|t|j}| ||dS)Nr) rr7rr,r<rDrpkt_datar*r=)r9r:ZpoZ opts_offsetr&r&r'r4s zEnhancedPacketBlock.unpackc Cs|j}t|}||_||_|}|jt|jt|}||_||_||j ||j |j |j |||}d |ddt|||ddgSr[)rr,rrrZrDr*r5r\r3rrrrXr/)r9Zpkt_bufrrMr^r_r&r&r'r`As& zEnhancedPacketBlock.__bytes__cCs(tdd|jD}|jt|j|S)Ncss|]}t|VqdSr6rarRr&r&r'rU\sz.EnhancedPacketBlock.__len__..)rbrBrDr*rrcr&r&r're[szEnhancedPacketBlock.__len__N) rfrgrhri PCAPNG_BT_EPBrjrr`rer&r&r&r'r$s  rc@seZdZdZdS)EnhancedPacketBlockLEr?Nrlr&r&r&r'r`src@sVeZdZdZejdkZdeddfddZddZ dd d Z d d Z d dZ ddZ dS)WriterzSimple pcapng dumpfile writer.littlerNc Cs||_|r|d|t|rfz|D]}|d|tq"Wn,ttfk rd|d|t|g}YnX|jr|ptt}|pt||dg}t |_ n"|pt}|pt||dg}t |_ |j t ||D]}|j t |qdS)z Create a pcapng dumpfile writer for the given fileobj. shb can be an instance of SectionHeaderBlock(LE) idb can be an instance of InterfaceDescriptionBlock(LE) (or sequence of them) shbidbrrN) _Writer__f_validate_blockrxr TypeError ValueError _Writer__lerrr_klsrwriterQ)r9fileobjrrrrZidb_r&r&r'__init__is(   zWriter.__init__cCstt||std||j|jrB|jddkrBtd||j|jsp|jddkrptd||jddd S) z:Check a user-defined block for correct type and endiannessz{0}: expecting class {1}r>z4{0}: expecting class {1}LE on a little-endian systemr?z/{0}: expecting class {1} on a big-endian systemZLEr>N)rrrrurfrrEreplace)r9Zarg_nameZblkZ expected_clsr&r&r'rs  zWriter._validate_blockcCst|tr|d|t|dk r.t|d}n*|j|jkrFdkrXnnttd}|dk rt|d?|_|d@|_|jt |dS|dkrt}| ||dS)z Write a single packet with an optional timestamp. Args: pkt: buffer or instance of EnhancedPacketBlock(LE) ts: Unix timestamp in seconds since Epoch (e.g. 1454725786.99) pktN.Ar ) rrrrr rrrrrrQ writepkt_time)r9rtsr&r&r'writepkts   zWriter.writepktcCsHt|d}|}t|}|j|d?|d@|||d}|jt|dS)z Write a single packet with a mandatory timestamp. Args: pkt: a buffer ts: Unix timestamp in seconds since Epoch (e.g. 1454725786.99) rrr)rrrrrN)r r,rrrrQ)r9rrr.r^epbr&r&r'rs zWriter.writepkt_timec Cs|}|j}|j}|j}|j}|}t|}|j} | |} |D]|\} } t| d} t| } t | }| |}||||| d?| d@| | |}d |ddt | |||ddg}| |qBdS)zC Take an iterable of (ts, pkt), and write to file. rrrrONr@) rr\rrr3rZr,rDr r*rXr0r)r9pktsZklsphfdrZpkt_typerMrdZhdr_lenZ precalc_nrrrZ pkt_len_alignr^r_r:r&r&r' writepktss>     zWriter.writepktscCs|jdSr6)rcloserYr&r&r'rsz Writer.close)N)rfrgrhrisys byteorderrrrrrrrrr&r&r&r'rds   )rc@sjeZdZdZddZeddZddZdd Zdd d Z d dZ ddZ e Z ddZ ddZddZdS)Readerz,Simple pypcap-compatible pcapng file reader.c CsFt|dd|jj|_||_t}|j|j}t ||jkrHt d| ||j t krdt d|jtkrd|_||jt|j |j7}t|}n:|jtkrd|_||j|j |j7}t|}nt d|jtkrt d|j|jd}|jd }t |d krqht|jr"d nd |\}}||j|d 7}|tkr|jrZt|nt|}qhq|dkrzt d td |_d|_|jD]r}|jt krtd|j!d}|d@rdnd} t| |d@|_n*|jt"krt|jrdnd|j!d|_q|j#t$krt$|j#|_%nd|_%||_&|j'|_'d|_(t)||_*dS)Nnamez<{0}>zinvalid pcapng header invalid pcapng header: not a SHBTFunknown endiannesszunknown pcapng version {0}.{1}rII IDB not foundrrbr rrqr>)+rVrurvrfr _Reader__frxreadrDr,rr;r3rrzBYTE_ORDER_MAGIC_LE _Reader__ler(rrr{rr|r#rrrfloat_divisor _tsoffsetrBrIPCAPNG_OPT_IF_TSRESOLrCPCAPNG_OPT_IF_TSOFFSETrdltoffdloffrrfilteriter _Reader__iter) r9rrr:rblk_typeblk_lenrNZopt_valZpow_numr&r&r'rsb             " zReader.__init__cCs |jSr6)rfilenorYr&r&r'rDsz Reader.fdcCs|jSr6)rrYr&r&r'rHsz Reader.filenocCs|jjSr6)rrrYr&r&r'datalinkKszReader.datalinkrcCstdSr6)NotImplementedError)r9valueoptimizer&r&r' setfilterNszReader.setfiltercCst|Sr6)listrYr&r&r'readpktsQszReader.readpktscCs t|jSr6)nextrrYr&r&r'__next__TszReader.__next__c Gsd}|dkrdt|D]L}ztt|\}}Wntk rFYqYnX|||f||d7}qn&|D] \}}|||f||d7}qh|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)rangerr StopIteration)r9Zcntcallbackargs processed_rrr&r&r'dispatchXs      zReader.dispatchcGs|jd|f|dSNr)r)r9rrr&r&r'loopssz Reader.loopccs|jd}t|dkrqt|jr&dnd|\}}||j|d7}|tkr|jr\t|nt|}|j|j d>|j B|j }||j fVqdS)Nrrrr) rrr,r#rrrrrrrrr)r9r:rrrrr&r&r'__iter__vs  zReader.__iter__N)r)rfrgrhrirpropertyrrrrrrrrrrr&r&r&r'rsK  rcCs|d}d}t|}|jtkst|jtks,t|jdks:t|jdksHt|jdksVt|j dksdtt |j dksvt|j dj t kst|j dj dkst|j dj t |j dj kst|j dj tkst|j dj dkstt|j dt|kstt |j dt |kstt|j dd ks6tt|t|ksLtt|t|ksbtt |t |ksxtd S) zTest SHB with optionssX XM<+1TShark 1.10.0rc2 (SVN Rev 49526 from /trunk-1.10)Xs81TShark 1.10.0rc2 (SVN Rev 49526 from /trunk-1.10)rrrr>r s1TShark 1.10.0rc2 (SVN Rev 49526 from /trunk-1.10)N)rr3rAssertionErrorrzrr{r|r}rCr,rBrIPCAPNG_OPT_SHB_USERAPPLrJstrrQ)r:Zopt_bufrr&r&r'test_shbs, rcCsBd}t|}|jtkst|jtks(t|jdks6t|jdksDtt|j dksVt|j dj t ksjt|j djdks~t|j djdkst|j dj t kst|j djdkstt |j ddkstt|j dd kstt |j dd kstt |t |kstt|t|ks(tt|t|ks>td S) zTest IDB with optionss    ir>r rrs rrN)rr3rrrrrrCr,rBrIrrJrQr)r:rr&r&r'test_idbs&rcCshd}t|}|jtkst|jt|jks.t|jt|jksBt|jdksPt|jdks^t|j dkslt|j dksztt|j dkst|j dj t kst|j djdkst|j d j tkst|j d jdkstt|j dd kstt|j dd ks tt|j d d ks"tt|t|ks8tt|t|ksNtt|t|ksdtd S)z(Test EPB with a non-ascii comment optionss7JJE<]@@4N-:0 p пакетJisi7r>r ru пакетrs пакетr rN)rr3rrrr,rrrrrCrBrIrorqrJrQr)r:rr&r&r'test_epbs* rcCst}t|dtd}|jddd||dt|}|jdksJt| tksZtt t |\}}|dksvt|dkst|dt|}| ddd dkst| dd d dkst| d S) z/Test writing a basic pcapng and then reading iti rsfoo现VArrrcSsdSr6r&rrr&r&r'rOz(test_simple_write_read..cSsdSr6r&rr&r&r'rrON)r r DLT_LINUX_SLLrflushseekrrrrrrrr)fobjwriterreaderrbuf1r&r&r'test_simple_write_reads     rc CsHt}z t|Wn0tk rB}zt|ts2tW5d}~XYnXdS)zAReading an empty file will fail as the header length is incorrectN)r r Exceptionrrrr)rer&r&r'test_pcapng_headers  rcCsGdddt}|S)Nc@s,eZdZddZeddZeddZdS)z!define_testdata..TestDatacSsttdddtdddtgd|_ttdddtdddtgd|_tdtdd dtd d dtd ddtgd |_tdtdd dtd d dtd ddtgd |_ d|_ dg|_ t tdddtgdd|_ ttdddtgdd|_dS)Nr s64-bit Windows 8.1, build 9600rIrCrs4Dumpcap 1.12.7 (v1.12.7-0-g7fc8978 from master-1.12))rBr s2\Device\NPF_{3BBF21A7-91AE-4DDB-AB2C-C782999C22D5}rrr)rrBs| |M<+64-bit Windows 8.1, build 96004Dumpcap 1.12.7 (v1.12.7-0-g7fc8978 from master-1.12)||2\Device\NPF_{3BBF21A7-91AE-4DDB-AB2C-C782999C22D5}  64-bit Windows 8.1, build 9600|c ī JJ'|RT5E<@'( VmABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIdpkt is awesome)_~MAJ'|RT5E<@'( VmABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIrsdpkt is awesome)rIrqr)rBr)rrF valid_shb_lerxrG valid_shb_ber valid_idb_ler valid_idb_be valid_pcapng valid_pktsr valid_epb_ber valid_epb_lerYr&r&r'rsL                 z*define_testdata..TestData.__init__cSs|j|j|jfSr6)rrrrYr&r&r'shb_idb_epb_lessz0define_testdata..TestData.shb_idb_epb_lecSs|j|j|jfSr6)rrrrYr&r&r'shb_idb_epb_bewsz0define_testdata..TestData.shb_idb_epb_beN)rfrgrhrrr r r&r&r&r'TestDatas T r )object)r r&r&r'define_testdatas]r csfdd}|S)Ncs0t}|jd<||}||d|S)Nrr)r __globals__rr)rkwargsrretfr&r'wrappers    zpre_test..wrapperr&)rrr&rr'pre_test~s rc@s eZdZdZddZddZdS)WriterTestWrapa. Decorate a writer test function with an instance of this class. The test will be provided with a writer object, which it shoud write some pkts to. After the test has run, the BytesIO object will be passed to a Reader, which will compare each pkt to the return value of the test. cOs||_||_dSr6rrr9rrr&r&r'rszWriterTestWrap.__init__csfdd}|S)Nc sddlm}dD]}|}tj}|t_t|fjdijd<|jd<||}||d|stt dt |t t |D](\\}}\} } || kst || kst qt |t_jd=jd=qdS)Nr)r )TFrrrz,You must return the input data from the test)compatr rrrgetrrrrziprrrr) rrr Z little_endianr_syslerZts_outZpkt_outZts_inZpkt_inrr9r&r'rs$     " z(WriterTestWrap.__call__..wrapperr&r9rrrrr&rr'__call__szWriterTestWrap.__call__N)rfrgrhrirrr&r&r&r'rsrc@seZdZddZddZdS)PostTestcOs||_||_dSr6rrr&r&r'rszPostTest.__init__csfdd}|S)Nc s||}jd}jd}|dkrd}z t|WnPtk r}z2d}t|jdsbtt|jdksxtW5d}~XYnX|stdnv|d krΈjd }t|}t|tt ||kstn@|d krjd } t|}t || } | |kstntd dS)Nrtest assertionFTr3msgzNo assertion raised!compare_propertyrcompare_methodmethodNo test type specified) rrrrrrrrrrQrV) rrrrZ test_typeZ isexceptionrproprr%comprr&r'rs,    (    z"PostTest.__call__..wrapperr&rr&rr'rszPostTest.__call__N)rfrgrhrrr&r&r&r'rsrr!r)r r3r"cCs tj}d|_tt|dS)N[)r rr3rrrQrr&r&r'test_shb_headersr+rcCs tj}d|_tt|dS)NiBa)r rrzrrrQr*r&r&r' test_shb_bomsr,zunknown pcapng version 123.45cCs&tj}d|_d|_tt|dS)N{-)r rr{r|rrrQr*r&r&r'test_shb_versionsr/rcCstj}tt|ddS)Nsaaaa)r rrrrQr*r&r&r' test_no_idbsr0r#r)r rcCsFtj}tj}|jdtttdddt t |t ||S)z.callbackr) rrr rrrrrrrrr&r&r' test_dispatch:s  r@cCs>ttjttddd}tt}||dS)NrcWs||ftjdkstdSrr<r=r&r&r'rMsztest_loop..callback)rrr rrrrrr?r&r&r' test_loopGs  rAc Csdtj}|jd=z t|WnBtk r^}z$t|tjs>tt |dksNtW5d}~XYnXdS)z'Test that options end with opt_endofoptrrPN) r rrBrQrrrrrWrr)rrr&r&r'test_idb_opt_errTs rBc Csjtj}t|}t|}|jdks&t|tks6t|jj dj ddksRt|jj dj ddksntt t |\}}|dkstt|dkst|d st|d st|tjd krtj\}}}ntj\}}}t}t|||d }|j|dd ||kst|d|_d|_t}t|||d }||||ks^t|dS)z*Test a full pcapng file with 1 ICMP packetrrrnz2\Device\NPF_{3BBF21A7-91AE-4DDB-AB2C-C782999C22D5}r z64-bit Windows 8.1, build 9600rrs'sFGHIrr2ric iī N)r rr rrrrrrrBrCrprrr, startswithendswithrrrr r rrgetvaluerr) r:rrrrrrrrr&r&r'test_custom_read_write_s8   rFcCsVt}tj\}}}t||||gd}||||dt||dS)zJTest writing multiple interface description blocks into pcapng and read itr2rN) r r r rrrrrr)rrrrrr&r&r'test_multi_idb_writers  rGc CsZd}ztt|d}Wn@tk rT}z"t|ts4tt|dksDtW5d}~XYnXdS)1System endianness and shb endianness should matchrr*z'shb: expecting class SectionHeaderBlockN)rrrrrrrr)rrrr&r&r'test_writer_validate_instances rIcsrtj\}}}tt||d}d|_|_dt}fdda|||ad\}}|j|ks`t|j|ksntdS)z8writepkt should assign ts_high/low for epb if they are 0r2rrcsSr6r&r&rr&r'rsr)i+lb{N) r r rrrrrrr)rrrr_tmprrr&rr'test_writepkt_epb_tss   rKc Csptj}tj}dt_ztt|d}Wn@tk rd}z"t|tsDtt |dksTtW5d}~XYnX|t_dS)rHTr*zCshb: expecting class SectionHeaderBlockLE on a little-endian systemN) r rrrrrrrrrrrrrrr&r&r'test_writer_validate_les"rMc Csptj}tj}dt_ztt|d}Wn@tk rd}z"t|tsDtt |dksTtW5d}~XYnX|t_dS)rHFr*z>shb: expecting class SectionHeaderBlock on a big-endian systemN) r rrrrrrrrrrrLr&r&r'test_writer_validate_bes"rNcs0d\}t}fddat||a|fgS)NrsfoooocsSr6r&r&rr&r'rsr)rrr)rrJr&rr'test_writepkt_no_times   rPr)rcCsd\}}t||||fgS)N)rsfoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooofoooorrrr&r&r'test_writepkt_snaplens rRcCsd\}}t||||fgS)NrOrQrr&r&r'test_writepkt_with_times rScCsddddg}t||S)z$writing multiple packets from a list)rsfooo)gVAsbarr)g)Asgrill)gaVAslol)rr)rr&r&r'test_writepktss rTcCsttstdSr6)rQr2rr&r&r&r'test_pcapng_block_packsrUc CsPt}d}z||Wn2tk rJ}zt|tjs:tW5d}~XYnXdS)Ns 012345678901)r2rrrrrr<r)blockr:rr&r&r'test_pcapng_block_unpacks rWc CsXtj\}}}d}z||Wn2tk rR}zt|tjsBtW5d}~XYnXdS)zNEnhancedPacketBlock can only unpack data >64 bytes, the length of their headers*quite-long-but-not-long-enough-at-least-32N)r r rrrrrr<r)rrrr:rr&r&r'test_epb_unpacks rXc Cs|tj\}}}t|}|ddd}z||WnBtk rv}z$t|tjsVtt |dksftW5d}~XYnXdS)zPForce calculated len to be 0 when unpacking epb, this should fail when unpackingNr@rrA) r r rQrrrrrrKrr)rrrZunpackmerr&r&r'test_epb_unpack_length_mismatchsrYcCst}t|dkstdS)zC_PcapngBlock should return its own header __len__ if it has no optsrN)r2r,r)rVr&r&r'test_pcapng_block_len_no_opts(srZc Csjtj}ddl}|H}|||dt|}|j|ksHt ||ks\t W5QRXdS)zdReader has .fd and .fileno() convenience members. Compare them to the actual fobj that was passed inrN) r rtempfile TemporaryFilerrrrrr)Zpcapngr[rrr&r&r'test_reader_file_descriptor.s   r]c CsTttdd}z |Wn2tk rN}zt|dks>tW5d}~XYnXdS)z1Check that PostTest wrapper doesn't fail silentlycSsdSr6r&r&r&r&r'fun=sztest_posttest..funr&N)rrrrr)r^rr&r&r' test_posttest;s  r_){ri __future__rrstructrr$rr#rrr>rrr r rrrrrZ PCAPNG_BT_PBZ PCAPNG_BT_SPBrrrJroZPCAPNG_OPT_SHB_HARDWAREZPCAPNG_OPT_SHB_OSrZPCAPNG_OPT_IF_NAMEZPCAPNG_OPT_IF_DESCRIPTIONZPCAPNG_OPT_IF_IPV4ADDRZPCAPNG_OPT_IF_IPV6ADDRZPCAPNG_OPT_IF_MACADDRZPCAPNG_OPT_IF_EUIADDRZPCAPNG_OPT_IF_SPEEDrZPCAPNG_OPT_IF_TZONEZPCAPNG_OPT_IF_FILTERZPCAPNG_OPT_IF_OSZPCAPNG_OPT_IF_FCSLENrZDLT_NULLrZ DLT_EN3MBZDLT_AX25Z DLT_PRONETZ DLT_CHAOSZ DLT_IEEE802Z DLT_ARCNETZDLT_SLIPZDLT_PPPZDLT_FDDIZ DLT_PFSYNCZDLT_IEEE802_11rZ DLT_PFLOGZDLT_IEEE802_11_RADIOplatformfindZDLT_LOOPZDLT_RAWrr(r*r/r0r1r7r2rkrGrFrxrrrrrr rrrrrrrr rrrrr+r,r/r0r3r4r7r8r:r;r@rArBrFrGrIrKrMrNrPrRrSrTrUrWrXrYrZr]r_r&r&r&r's8    A%!<'!' a '"                  ,