U v`=@sVdZddlmZddlmZddlmZddlmZGdddejZ d Z d Z d Z d Z d Ze eZdZe ZdZdZdZdZdZdZdZdZd Zd Zd ZdZdZd ZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*d Z+dZ,e,Z-dZ.d Z/d!Z0d Z1d"Z2d#Z3d$Z4dZ5d%Z6d&Z7d'Z8d(Z9d)Z:d*Z;d+Zd-Z?d.Z@d ZAd/ZBd0ZCd1ZDd2ZEd3ZFd4ZGd5ZHd6ZId7ZJd8ZKd9ZLd ZMd:ZNd;ZOdZRd?ZSd@ZTd ZUdAZVdBZWdCZXdDZYdEZZdFZ[dGZ\dHZ]dIZ^dJZ_dKZ`dLZadMZbdNZcdOZddPZedQZfdRZgdSZhdTZidUZjdVZkdZldWZmdXZndYZodZZpd[Zqd\Zrd]Zsd^Ztd_Zud`ZvdaZwdbZxdcZyddZzdeZ{dfZ|dgZ}dhZ~diZdjZdkZdlZdmZdnZdoZdpZdqZdrZdsZdtZduZdZdvZdwZdxZdyZdzZd{Zd|Zd}Zd~ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd ZeZd ZddZddZddZddZddZddZddZddZddZddZddZdS)zInternet Protocol.)print_function)absolute_import)dpkt) iteritemscseZdZdZdZiZdZfddZeddZ e j ddZ ed d Z e j d d Z ed d Z e j dd Z eddZ e j ddZ eddZej ddZeddZej ddZddZddZddZeddZed d!ZZS)"IPzInternet Protocol. TODO: Longer class information.... Attributes: __hdr__: Header fields of IP. TODO. ) )_v_hlBE)Ztosr r)lenH)idr r)offr r)Zttlr @)pr r)sumr r)src4s)dstrrcs,tt|j|||s(d|kr(||_dS)Nr )superr__init____len__r )selfargskwargs __class___/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/ip.pyr$s z IP.__init__cCs |jd?S)Nrrr r r!v,szIP.vcCs|d>|jd@B|_dS)Nr"r#)rr%r r r!r%0scCs |jd@SNr&r#r$r r r!hl4szIP.hlcCs|jd@|B|_dS)Nr#)rr(r r r!r(8scCs|jd?d@S)Nr&rrr$r r r!rf<szIP.rfcCs|jt@|d>B|_dSr')rIP_RF)rr+r r r!r+@scCs|jd?d@S)Nrr*r$r r r!dfDszIP.dfcCs|jt@|d>B|_dS)Nr-)rIP_DF)rr.r r r!r.HscCs|jd?d@S)N rr*r$r r r!mfLszIP.mfcCs|jt@|d>B|_dS)Nr0)rIP_MF)rr1r r r!r1PscCs|jt@d>SNr IP_OFFMASKr$r r r!offsetTsz IP.offsetcCs|jt@|d?B|_dSr3r5)rr7r r r!r7XscCs|jt|jt|jSN) __hdr_len__r optsdatar$r r r!r\sz IP.__len__cCs||_|jdkrt|t|j|_|jdksB|jdkr|j t t B@dkrt |j tjr|j jdkrt|j }tjd|j|j|jt|}td|}t||}t||j _|jdkr|j jdkrd|j _|t|jt|j S)Nrz>4s4sxBH)rr rrZin_cksumZpack_hdrbytesr:rrr2r6 isinstancer;PacketstructpackrrZ in_cksum_addZ in_cksum_done)rrsr r r! __bytes___s&  &     z IP.__bytes__c Cstj|||jd@d>|j}|dkr4td||j|j||_|jrf||j||j}n||j|d}z<|jdkr|j |j |n||_ t ||j j j|j Wn ttjfk r||_ YnXdS)Nr&rzinvalid header length)rrAunpackrr9 UnpackErrorr:r r7_protoswrr;setattrr__name__lowerKeyError)rbufolr r r!rGxs  z IP.unpackcCs||j|<dSr8rI)clsrZpktclassr r r! set_protosz IP.set_protocCs |j|Sr8rP)rQrr r r! get_protosz IP.get_proto)rK __module__ __qualname____doc__Z__hdr__rIr:rpropertyr%setterr(r+r.r1r7rrErG classmethodrRrS __classcell__r r rr!r sH                rr" r rF(r>zuÿÿÿÿzuàuàÿr`ii@i ir4r< r0r-r&r=!"#$%&')*+,./0123456789:;<=>?ABCDr FGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~c Cs|t}t|D]h\}}|dr|dd}z(t||dd}t|t||Wqt t fk rtYqYqXqdS)NZ IP_PROTO_rgr)level) globalsr startswithrL __import__rrRgetattrupper ImportErrorAttributeError)gkr%namemodr r r! __load_protosPs rcCstjs tdS)zAPost-initialization called when all dpkt modules are fully loadedN)rrIrr r r r! _mod_init\srcCsddlm}d}tddddd}|jdd d }d |_|jt|j7_||_|jt|7_t||kspt|j d ks~t|j d kstt|}t||kst|jj dkst|jjd kstdS)Nr)udps"E"@ro5foobarrr=rrrrrsportdportsfoobarr"re) rrUDPr;Zulenr r?AssertionErrorr%r(r)rrDipur r r!test_ipbs rcCs\tddddd}t|}|ddks(t|ddks8t|ddksHt|ddksXtdS) Nrrr=rrrrr)rdictr)rdr r r! test_dictvs rcCs,d}z t|Wntjk r&YnXdS)Ns-BB켥"0)rrrH)rDr r r!test_hls  rcCs&d}t|}d|_t||ks"tdS)Ns<O<@ & 'r)rrr?r)rDrr r r!test_optsrcCsFddlm}d}d|}t|}t|j|js2t|jj|ksBtdS)Nr)tcpsXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs(E4@N 8`N_P@):)rrrr@r;ZTCPr)rrrDrr r r! test_zerolens rcCsztdd}tddd}tt|}tt|}t|t|ksBtt|dksRtt|t|ksftt|dksvtdS)Ns Hello world!)r;r)r;r s E @zHello world!)rr?r)Zip1Zip2Zip3Zip4r r r!test_constuctors    rcCsddlm}d}||j}|jdks*t|jdks8t|jdksFt|jdksTtd|_d|_d|_d|_|jdkszt|jdkst|jdkst|jdkstdS)Nr)ethernetsb# *# *ET@@% .#s HJMx !"#$%&'()*+,-./01234567ri) rrZEthernetrr+rr.r1r7)rrDrr r r! test_frags  rcCsNt}|jdkstd|_|jdks(t|jdks6td|_|jdksJtdS)Nr"r<rerf)rr%rr()rr r r!test_property_setterssrcCsbddlm}|ddd}tddd|d}|jdks6t|jjdksFtt||jjd ks^tdS) Nr)rrirsr=)rrrr;r>)Zdpkt.udprrrrr;rr?)rrrr r r!test_default_udp_checksums  rN)rV __future__rrrrcompatrrArZ IP_ADDR_LENZ IP_ADDR_BITSZ IP_HDR_LENZ IP_OPT_LENZIP_OPT_LEN_MAXZIP_HDR_LEN_MAXZ IP_LEN_MAXZ IP_LEN_MINZ IP_ADDR_ANYZIP_ADDR_BROADCASTZIP_ADDR_LOOPBACKZIP_ADDR_MCAST_ALLZIP_ADDR_MCAST_LOCALZIP_TOS_DEFAULTZIP_TOS_LOWDELAYZIP_TOS_THROUGHPUTZIP_TOS_RELIABILITYZIP_TOS_LOWCOSTZ IP_TOS_ECTZ IP_TOS_CEZIP_TOS_PREC_ROUTINEZIP_TOS_PREC_PRIORITYZIP_TOS_PREC_IMMEDIATEZIP_TOS_PREC_FLASHZIP_TOS_PREC_FLASHOVERRIDEZIP_TOS_PREC_CRITIC_ECPZIP_TOS_PREC_INTERNETCONTROLZIP_TOS_PREC_NETCONTROLr,r/r2r6ZIP_TTL_DEFAULTZ IP_TTL_MAXZ IP_PROTO_IPZIP_PROTO_HOPOPTSZ IP_PROTO_ICMPZ IP_PROTO_IGMPZ IP_PROTO_GGPZ IP_PROTO_IPIPZ IP_PROTO_STZ IP_PROTO_TCPZ IP_PROTO_CBTZ IP_PROTO_EGPZ IP_PROTO_IGPZIP_PROTO_BBNRCCZ IP_PROTO_NVPZ IP_PROTO_PUPZIP_PROTO_ARGUSZIP_PROTO_EMCONZ IP_PROTO_XNETZIP_PROTO_CHAOSZ IP_PROTO_UDPZ IP_PROTO_MUXZIP_PROTO_DCNMEASZ IP_PROTO_HMPZ IP_PROTO_PRMZ IP_PROTO_IDPZIP_PROTO_TRUNK1ZIP_PROTO_TRUNK2ZIP_PROTO_LEAF1ZIP_PROTO_LEAF2Z IP_PROTO_RDPZ IP_PROTO_IRTPZ IP_PROTO_TPZIP_PROTO_NETBLTZIP_PROTO_MFPNSPZIP_PROTO_MERITINPZ IP_PROTO_SEPZ IP_PROTO_3PCZ IP_PROTO_IDPRZ IP_PROTO_XTPZ IP_PROTO_DDPZ IP_PROTO_CMTPZ IP_PROTO_TPPPZ IP_PROTO_ILZ IP_PROTO_IP6Z IP_PROTO_SDRPZIP_PROTO_ROUTINGZIP_PROTO_FRAGMENTZ IP_PROTO_RSVPZ IP_PROTO_GREZ IP_PROTO_MHRPZ IP_PROTO_ENAZ IP_PROTO_ESPZ IP_PROTO_AHZIP_PROTO_INLSPZIP_PROTO_SWIPEZ IP_PROTO_NARPZIP_PROTO_MOBILEZ IP_PROTO_TLSPZ IP_PROTO_SKIPZIP_PROTO_ICMP6Z IP_PROTO_NONEZIP_PROTO_DSTOPTSZIP_PROTO_ANYHOSTZ IP_PROTO_CFTPZIP_PROTO_ANYNETZIP_PROTO_EXPAKZIP_PROTO_KRYPTOLANZ IP_PROTO_RVDZ IP_PROTO_IPPCZIP_PROTO_DISTFSZIP_PROTO_SATMONZ IP_PROTO_VISAZ IP_PROTO_IPCVZ IP_PROTO_CPNXZ IP_PROTO_CPHBZ IP_PROTO_WSNZ IP_PROTO_PVPZIP_PROTO_BRSATMONZIP_PROTO_SUNNDZIP_PROTO_WBMONZIP_PROTO_WBEXPAKZ IP_PROTO_EONZ IP_PROTO_VMTPZIP_PROTO_SVMTPZIP_PROTO_VINESZ IP_PROTO_TTPZIP_PROTO_NSFIGPZ IP_PROTO_DGPZ IP_PROTO_TCFZIP_PROTO_EIGRPZ IP_PROTO_OSPFZIP_PROTO_SPRITERPCZ IP_PROTO_LARPZ IP_PROTO_MTPZ IP_PROTO_AX25ZIP_PROTO_IPIPENCAPZ IP_PROTO_MICPZIP_PROTO_SCCSPZIP_PROTO_ETHERIPZIP_PROTO_ENCAPZIP_PROTO_ANYENCZ IP_PROTO_GMTPZ IP_PROTO_IFMPZ IP_PROTO_PNNIZ IP_PROTO_PIMZ IP_PROTO_ARISZ IP_PROTO_SCPSZ IP_PROTO_QNXZ IP_PROTO_ANZIP_PROTO_IPCOMPZ IP_PROTO_SNPZIP_PROTO_COMPAQPEERZIP_PROTO_IPXIPZ IP_PROTO_VRRPZ IP_PROTO_PGMZIP_PROTO_ANY0HOPZ IP_PROTO_L2TPZ IP_PROTO_DDXZ IP_PROTO_IATPZ IP_PROTO_STPZ IP_PROTO_SRPZ IP_PROTO_UTIZ IP_PROTO_SMPZ IP_PROTO_SMZ IP_PROTO_PTPZ IP_PROTO_ISISZ IP_PROTO_FIREZ IP_PROTO_CRTPZIP_PROTO_CRUDPZIP_PROTO_SSCOPMCEZ IP_PROTO_IPLTZ IP_PROTO_SPSZ IP_PROTO_PIPEZ IP_PROTO_SCTPZ IP_PROTO_FCZIP_PROTO_RSVPIGNZ IP_PROTO_RAWZIP_PROTO_RESERVEDZ IP_PROTO_MAXrrrrrrrrrrrr r r r!sz