U v`_@sFdZddlmZddlmZddlmZdZdZdZdZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZdZdZdZdZdZd ZdZdZdZdZd Zd Z d Z!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:d Z;d!ZdZ?dZ@dZAd ZBd!ZCGd"d#d#ejDZEd$d%ZFd&d'ZGd(S))z"Internet Control Message Protocol.)print_function)absolute_import)dpkt  !"#$%&'(c@seZdZdZdZGdddejZGdddejZGdddeZ Gd d d eZ Gd d d eZ Gd ddeZ GdddeZ ee e e ee dZddZddZdS)ICMPzInternet Control Message Protocol. TODO: Longer class information.... Attributes: __hdr__: Header fields of ICMP. TODO. ))typeBr )coder$r)sumHrc@seZdZdZdS)z ICMP.Echo))idr'r)seqr'rN__name__ __module__ __qualname____hdr__r/r/a/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/icmp.pyEcho\sr1c@seZdZdZddZdS)z ICMP.Quote))padIrcCs2tj||ddlm}||j|_|_dS)Nr)ip)rPacketunpackr4ZIPdata)selfbufr4r/r/r0r6bs zICMP.Quote.unpackN)r+r,r-r.r6r/r/r/r0Quote_sr;c@seZdZdZdS)z ICMP.Unreach))r2r'r)Zmtur'rNr*r/r/r/r0Unreachgsr<c@s eZdZdS)z ICMP.QuenchNr+r,r-r/r/r/r0Quenchjsr>c@seZdZdZdS)z ICMP.Redirect))Zgwr3rNr*r/r/r/r0Redirectmsr?c@seZdZdZdS)zICMP.ParamProbe))ptrr$r)Zpad1r$r)Zpad2r'rNr*r/r/r/r0 ParamProbepsrAc@s eZdZdS)zICMP.TimeExceedNr=r/r/r/r0 TimeExceedssrB)rrrr r rc Cs^tj||z0|j|j|j|_t||jjj |jWnt tj fk rXYnXdSN) rr5r6_typeswr#r8setattr __class__r+lowerKeyErrorZ UnpackError)r9r:r/r/r0r6xs z ICMP.unpackcCs&|jsttj||_tj|SrC)r&rZin_cksumr5 __bytes__)r9r/r/r0rIszICMP.__bytes__N)r+r,r-__doc__r.rr5r1r;r<r>r?rArBrDr6rIr/r/r/r0r"Ls r"cCsd}t|}t||kstd}tddtjddddd }t||ksJttdtjddddd }t||ksrt|jdkstdS) Ns0 kE(#+$ގBP5) "eks(SABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIriSris ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHI)r(r)r8)r#r&r8)r#r8)r"bytesAssertionErrorr1r&)srpr/r/r0 test_icmps4 rPcCs6ddlm}|d}t|}t|ttks2tdS)Nr) unhexlifyZ 01000000abcd)binasciirQr"dirrL)rQr:Zicmpr/r/r0test_invalid_datas  rTN)HrJ __future__rrr7rZICMP_CODE_NONEZICMP_ECHOREPLYZ ICMP_UNREACHZICMP_UNREACH_NETZICMP_UNREACH_HOSTZICMP_UNREACH_PROTOZICMP_UNREACH_PORTZICMP_UNREACH_NEEDFRAGZICMP_UNREACH_SRCFAILZICMP_UNREACH_NET_UNKNOWNZICMP_UNREACH_HOST_UNKNOWNZICMP_UNREACH_ISOLATEDZICMP_UNREACH_NET_PROHIBZICMP_UNREACH_HOST_PROHIBZICMP_UNREACH_TOSNETZICMP_UNREACH_TOSHOSTZICMP_UNREACH_FILTER_PROHIBZICMP_UNREACH_HOST_PRECEDENCEZICMP_UNREACH_PRECEDENCE_CUTOFFZICMP_SRCQUENCHZ ICMP_REDIRECTZICMP_REDIRECT_NETZICMP_REDIRECT_HOSTZICMP_REDIRECT_TOSNETZICMP_REDIRECT_TOSHOSTZICMP_ALTHOSTADDRZ ICMP_ECHOZICMP_RTRADVERTZICMP_RTRADVERT_NORMALZICMP_RTRADVERT_NOROUTE_COMMONZICMP_RTRSOLICITZICMP_TIMEXCEEDZICMP_TIMEXCEED_INTRANSZICMP_TIMEXCEED_REASSZICMP_PARAMPROBZICMP_PARAMPROB_ERRATPTRZICMP_PARAMPROB_OPTABSENTZICMP_PARAMPROB_LENGTHZ ICMP_TSTAMPZICMP_TSTAMPREPLYZ ICMP_INFOZICMP_INFOREPLYZ ICMP_MASKZICMP_MASKREPLYZICMP_TRACEROUTEZICMP_DATACONVERRZICMP_MOBILE_REDIRECTZICMP_IP6_WHEREAREYOUZICMP_IP6_IAMHEREZICMP_MOBILE_REGZICMP_MOBILE_REGREPLYZICMP_DNSZ ICMP_DNSREPLYZ ICMP_SKIPZ ICMP_PHOTURISZICMP_PHOTURIS_UNKNOWN_INDEXZICMP_PHOTURIS_AUTH_FAILEDZICMP_PHOTURIS_DECOMPRESS_FAILEDZICMP_PHOTURIS_DECRYPT_FAILEDZICMP_PHOTURIS_NEED_AUTHNZICMP_PHOTURIS_NEED_AUTHZZ ICMP_TYPE_MAXr5r"rPrTr/r/r/r0s   :&