U v`?@sdZddlmZddlmZddlZddlZddlmZddlm Z ddl m Z d Z d Z d Zd Zd ZdZdZdZd ZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)d#Z*d$Z+d%Z,d&Z-d'Z.d(Z/d)Z0d*Z1d+Z2d,Z3d-Z4d.Z5d/Z6d0Z7d1Z8d2Z9d3Z:d4Z;d5Zd8Z?d9Z@d:ZAd;ZBdZEd?ZFd@ZGdAZHdBZIdCZJdDZKdEZLdFZMdGZNdHZOdIZPdJZQdKZRdLZSdMZTdNZUdOZVdPZWdQZXdRZYdSZZdTZ[dUZ\dVZ]dWZ^dXZ_dYZ`dZZad[Zbd\Zcd]Zdd^Zed_Zfd`ZgdaZhdbZidcZjddZkdeZldfZmdgZndhZodiZpdjZqdkZrdkZsdlZtdmZudnZvdoZwdpZxdqZydrZzdsZ{dtZ|duZ}dvZ~ejdwdxkr8dyZ%dzZ!ndZ%dyZ!ededzed{eded|eded}e(d~ede%de&d|e~di ZGddde jZGdddeZGddde jZGdddeZGdddeZGdddeZGdddZeeddddZddZGdddZddZddZeeddddZddZGdddZeddZeddidddZeddidddZeddZeddidddZeddZeddZeddZdS)zLibpcap file format.)print_function)absolute_importN)Decimal)dpkt)introundlCeClMinvalid tcpdump headerrg.AZ1E9)getattr __class__rwr _Reader__freadr __hdr_len__ _Reader__fhrq _Reader__phr PMUDPCT_MAGICPMUDPCT_MAGIC_NANOrr~rr ValueErrorrdltoffdloffr_divisorrfilteriter _Reader__iter)rrbufr|r|r}rs"    zReader.__init__cCs |jSr)rfilenorr|r|r}r*sz Reader.fdcCs|jSr)rrr|r|r}r.sz Reader.filenocCs|jjSr)rrrr|r|r}datalink1szReader.datalinkrcCstdSr)NotImplementedError)rvalueoptimizer|r|r} setfilter4szReader.setfiltercCst|Sr)listrr|r|r}readpkts7szReader.readpktscCs t|jSr)nextrrr|r|r}__next__:szReader.__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)rZcntcallbackargs processed_rrr|r|r}dispatch>s      zReader.dispatchcGs|jd|f|dSNr)r)rrrr|r|r}loopYsz Reader.loopccsJ|jtj}|sqF||}|j|j}|j|j|j|fVqdSr) rrrqrrrurrrtr)rrhdrr|r|r}__iter__\s  zReader.__iter__N)r)rwrxryrzrpropertyrrrrrrrrrrr|r|r|r}r s   rc@seZdZdddZddZdS)TryExceptExceptionrcCs||_||_dSr)exception_typemsg)rrrr|r|r}rjszTryExceptException.__init__csfdd}|S)Nc sTz Wn<jk rF}zjr6t|jks6tW5d}~XYn XtddS)N*There should have been an Exception raised)rrstrAssertionError Exception)rkwargsefrr|r}wrapperos  $z,TryExceptException.__call__..wrapperr|rrrrrr|rr}__call__nszTryExceptException.__call__N)r)rwrxryrrr|r|r|r}ris rr)rc CsFttdd}z |Wn&tk r@}z|W5d}~XYnXdS)z[Check that we can catch a function which does not throw an exception when it is supposed tocSsdSrr|r|r|r|r}fun}sz$test_TryExceptException..funN)rrr)rrr|r|r}test_TryExceptExceptionzs   rcCs,d}d}t|}t|}|j|jks(tdS)Ns`sò`)rrrr)beleZbefhZlefhr|r|r}test_pcap_endians rc@seZdZdZdS)TestDatasRògJBFF2A E8@@eG5$N)rwrxrypcapr|r|r|r}rsrc sxddl}tj}ddlm}||}t|}|jdks:ttt |\}}||t j t j dksft| dksvt|t|ddW5QRX|dt|}|ddddkst|dt|}|dd ddkst|dt|}|dd ddkst|dd ddks2t|dt|}Gd d d |fddjdksttdS)NrrBytesIOz rcSsdSrr|rrr|r|r}ztest_reader..r cSsdSrr|rr|r|r}rrcSsdSrr|rr|r|r}rrcSsdSrr|rr|r|r}rrc@seZdZdZeddZdS)ztest_reader..CountrcSs|jd7_dS)Nr)counter)clsr|r|r}incsztest_reader..Count.incN)rwrxryr classmethodrr|r|r|r}CountsrcsSr)rrrr|r}rr)pytestrrcompatrrrrrrrrrqrZraisesrrseekrrr)rdatarfobjreaderrZbuf1r|rr} test_readers4      rcCsbddlm}|d}|d}ddlm}|||d}t|}|jdksNtt|dks^tdS) Nr) unhexlifyZ0a1b2c3d40001000200000000000000000000010000000023Z 00000003000000050000000400000004rr)g@r)binasciirrrrrrr)rZ buf_filehdrZ buf_pkthdrrrrr|r|r}test_reader_dloffs   rrcCs ddlm}|d}t|}dS)Nrrs)rrr)rrrr|r|r}test_reader_badheaders rc Csjtj}ddl}|H}|||dt|}|j|ksHt ||ks\t W5QRXdSr) rrtempfile TemporaryFilerrrrrr)rrrrr|r|r}test_reader_fds   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||_||_dSr)rr)rrrr|r|r}rszWriterTestWrap.__init__csfdd}|S)Nc sddlm}dD]}|}tj}|t_t|fjdijd<|jd<||}||d|spt t |t | D](\\}}\} } || kst || kst qt |t_qdS)Nrr)TFwriterrr)rrrrrget __globals__flushrrziprrrr) rrrZ little_endianrZ_syslerZts_outZpkt_outZts_inZpkt_inrr|r}r s     " z(WriterTestWrap.__call__..wrapperr|rr|rr}r szWriterTestWrap.__call__N)rwrxryrzrrr|r|r|r}rsrcCs d\}}tj||d||fgS)N)现VAfoorrrrr|r|r}test_writer_precision_normal!srrT)rcCs&tdd}}tj||d||fgS)N1454725786.010203045r rrrrrr|r|r}test_writer_precision_nano(srFcCs&tdd}}tj||dd|fgS)zJif writer is not set to nano, supplying this timestamp should be truncatedrr rg*VArrr|r|r}test_writer_precision_nano_fail/srcs6d\}tj}fddt_t||t_|fgS)Nr sfoooocsSrr|r|rr|r}r;rz'test_writepkt_no_time..)rrr)rZ_tmpr|rr}test_writepkt_no_time7s  rrcCsd\}}t||||fgSNrrrr|r|r}test_writepkt_snaplenAs rcCsd\}}t||||fgSrrrr|r|r}test_writepkt_with_timeHs rcCsd\}}t||||fgSr)rrrr|r|r}test_writepkt_timeOs rcCsddddg}t||S)z$writing multiple packets from a list)r sfooo)gVAsbarr)g)Asgrill)gaVAslol)rr)rr|r|r}test_writepktsVs r)rz __future__rrrrdecimalrrrrrrrrrrrZDLT_NULLrZ DLT_EN3MBZDLT_AX25Z DLT_PRONETZ DLT_CHAOSZ DLT_IEEE802Z DLT_ARCNETZDLT_SLIPZDLT_PPPZDLT_FDDIZ DLT_PFSYNCZDLT_PPP_SERIALZ DLT_PPP_ETHERZDLT_ATM_RFC1483ZDLT_RAWZ DLT_C_HDLCZDLT_IEEE802_11Z DLT_FRELAYZDLT_LOOPZ DLT_LINUX_SLLZ DLT_LTALKZ DLT_PFLOGZDLT_PRISM_HEADERZDLT_IP_OVER_FCZ DLT_SUNATMZDLT_IEEE802_11_RADIOZDLT_ARCNET_LINUXZDLT_APPLE_IP_OVER_IEEE1394ZDLT_MTP2_WITH_PHDRZDLT_MTP2ZDLT_MTP3ZDLT_SCCPZ DLT_DOCSISZDLT_LINUX_IRDAZ DLT_USER0Z DLT_USER1Z DLT_USER2Z DLT_USER3Z DLT_USER4Z DLT_USER5Z DLT_USER6Z DLT_USER7Z DLT_USER8Z DLT_USER9Z DLT_USER10Z DLT_USER11Z DLT_USER12Z DLT_USER13Z DLT_USER14Z DLT_USER15ZDLT_IEEE802_11_RADIO_AVSZDLT_BACNET_MS_TPZ DLT_PPP_PPPDZ DLT_GPRS_LLCZ DLT_GPF_TZ DLT_GPF_FZDLT_LINUX_LAPDZDLT_BLUETOOTH_HCI_H4Z DLT_USB_LINUXZDLT_PPIZDLT_IEEE802_15_4ZDLT_SITAZDLT_ERFZDLT_BLUETOOTH_HCI_H4_WITH_PHDRZ DLT_AX25_KISSZDLT_LAPDZDLT_PPP_WITH_DIRZDLT_C_HDLC_WITH_DIRZDLT_FRELAY_WITH_DIRZDLT_IPMB_LINUXZDLT_IEEE802_15_4_NONASK_PHYZDLT_USB_LINUX_MMAPPEDZDLT_FC_2ZDLT_FC_2_WITH_FRAME_DELIMSZ DLT_IPNETZDLT_CAN_SOCKETCANZDLT_IPV4ZDLT_IPV6ZDLT_IEEE802_15_4_NOFCSZDLT_DBUSZ DLT_DVB_CIZ DLT_MUX27010ZDLT_STANAG_5066_D_PDUZ DLT_NFLOGZDLT_NETANALYZERZDLT_NETANALYZER_TRANSPARENTZ DLT_IPOIBZ DLT_MPEG_2_TSZDLT_NG40Z DLT_NFC_LLCPZDLT_INFINIBANDZDLT_SCTPZ DLT_USBPCAPZDLT_RTAC_SERIALZDLT_BLUETOOTH_LE_LLZ DLT_NETLINKZDLT_BLUETOOTH_LINUX_MONITORZDLT_BLUETOOTH_BREDR_BBZDLT_BLUETOOTH_LE_LL_WITH_PHDRZDLT_PROFIBUS_DLZ DLT_PKTAPZDLT_EPONZDLT_IPMI_HPM_2ZDLT_ZWAVE_R1_R2Z DLT_ZWAVE_R3ZDLT_WATTSTOPPER_DLMZ DLT_ISO_14443ZDLT_LINUX_SLL2platformfindrZPacketrqr~rrobjectrrrrrrrrrrrrrrrrrrrrrr|r|r|r}sd     M]   4   %