a
    kÄ#dðe  ã                ;   @   s*  d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  dd	l!m"Z" dd
l#m$Z$m%Z% ddl&m'Z'm(Z(m)Z) dZ*g d¢Z+dd„ Z,dddddœZ-dddddddddddd d!d"d#d$d%œZ.d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d%œZ/d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJœZ0dKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^dJœZ1G d_d`„ d`ƒZ2G dadb„ dbe2eƒZ3G dcdd„ dde3ƒZ4G dedf„ dfeƒZ5G dgdh„ dhƒZ6G did6„ d6e6eƒZ7G djd7„ d7e6eƒZ8G dkd8„ d8e6eƒZ9G dld9„ d9e6eƒZ:G dmd:„ d:e6eƒZ;G dnd;„ d;e6eƒZ<G dod<„ d<e6eƒZ=G dpd=„ d=e6eƒZ>G dqd>„ d>e6eƒZ?G drd?„ d?e6eƒZ@G dsd@„ d@e6eƒZAG dtdA„ dAe6eƒZBG dudB„ dBe6eƒZCG dvdC„ dCe6eƒZDG dwdD„ dDe6eƒZEG dxdE„ dEeEƒZFG dydF„ dFe6eƒZGG dzdG„ dGeEƒZHG d{dH„ dHe6eƒZIG d|dI„ dIe6eƒZJd}d~dd€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒd�dŽd�d�d‘d’d“d”d•d–d—d˜d™dšd›dœd�dždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d—d®d¯d°d±d²d³d´dµd¶œ:ZKG d·d„ de2eƒZLG d¸d„ de2eƒZMG d¹d„ deMƒZNG dºd»„ d»eƒZOG d¼d„ de2eƒZPG d½d„ de2eƒZQG d¾d„ deQƒZRG d¿d„ de2eƒZSG dÀd„ de2eƒZTG dÁd„ de2eƒZUG dÂd„ de2eƒZVG dÃd„ deVƒZWG dÄd „ d e2eƒZXG dÅd!„ d!e2eƒZYG dÆd"„ d"e2eƒZZG dÇd$„ d$e2eƒZ[G dÈd#„ d#e[ƒZ\ee$e3e*dÉ� ee%e4e*dÉ� ee(e3e*dÊ� ee)e4e*dÉ� dS )Ëz.
SCTP (Stream Control Transmission Protocol).
é    )Úabsolute_importN)ÚorbÚraw)ÚRandBin)Úconf)ÚPacketÚbind_layers)ÚBitFieldÚByteEnumFieldÚFieldÚFieldLenFieldÚFieldListFieldÚIPFieldÚIntEnumFieldÚIntFieldÚMultipleTypeFieldÚPacketListFieldÚPadFieldÚShortEnumFieldÚ
ShortFieldÚStrFixedLenFieldÚStrLenFieldÚ
XByteFieldÚ	XIntFieldÚXShortField)ÚSCTP_SERVICES)ÚIPÚIPerror)ÚIP6FieldÚIPv6ÚIPerror6é„   (   r   l   ×d l   ÷pvB iôóPl   5 iñ5ièç¡&l   ëd”) l   ÏX² iÌÛ²xi8(âkl   ;+3 iÐÏCMl   ÓLP~ l   '?ñX i$<^ioÇ^l   lDjD l   ˜7Ëb i›4l   pPˆ/ isÓ¯%i‡ ÿ6l   „#)	 l    5 i£ìhiWï¼{l   Tl® i¿]l   ¼í^ l   HxLx iKûMNiÞŽ½ l   Ý¬% l   )~ i*}í3l   ÁNN iÂšLi6il   5jïh l   VÉT iUXiæ¦_Kl   å%hr iAþml   B+? l   ù1Š iú²®~i±Iã0l   ²J l   F9°# iEº³#l   ®^ón i­]iY®Bl   Z-RH l   ~tt i}’QHi‰a[l   ŠbÕR ia† }l   b– l   –v79 i•uðni¼{Al   ¿!f l   Km€@ iHî+Rl   £
Ã i 	ŠtiTúÚgl   Wyb+ l   sED ipÆÉ9i„5™*l   ‡6å1 ilÒ8l   oQ¦| l   ›"Z i˜!hiÓÚ%Ql   ÐYœF l   $*=` i')uBl   ÌM~- iÏÎÔdi;=„wl   8>ß l   ù7 i—)iëòÇ:l   èqX ifl    \ l   ôeºz i÷æ6ib“Æal   aZ' l   •cû i–`–rl   }¸L i~‡7TiŠtgGl   ‰wj l   ­K?V i®HtiZ»$
l   Y8žp i²\…,l   ±_Ý= l   E,| iF¯Õ?iT˜ql   Wç l   ú$F! iù§Èbl   Cl i@iDiå³9Wl   æ0¤J l   Â‚v iÁ�*	i5|zl   6#P iÝ›Û<l   Þ` l   *kÁ; i)h‹/l   x;ì i{¸�pi�KÍcl   ŒHM# ig¬lEl   d/n l   �\¯H i“_<Vi·c/l   ´`‰t l   @(R iC�l   ¨tk i«wÞ=i_„Ž.l   \Ê9 l   |Q% iÃ`iàŒ“sl   ãð ik2Ul   h³N l   ÿh iü˜bFiØ¤ql   Û'4T l   /T•r i,W!l   Ç3Ö? iÄ°€-i0CÐ>l   3@w l   ¦5—D i¥6 PiQÅpCl   RF6b i¹"Ñel   º!u/ l   NRÔ	 iMÑ�viií’(l   jnò5 l   žS i�Â;l   vz^ iuùci�
3l   ‚	±x l   Ér*d iÊñ~@i>.Sl   =‹B iÖå�ul   ÕfÈ l   !i) i"ßfi*Ì8l   )O l   ñZî3 iòÙœ+l   =­~ i>=iîÍml   íNX l   Ä& iÇ¥æ1i3V¶"l   0U»! iÛ±l   Ø2øl l   ,AYJ i/BGi~TIl   }v l   üÞP iÿ�Zl   i� ij¥|iã™õol   à<; l   «a§' i¨b¸!i\‘è2l   _ i´vIl   ·uEL l   Cäj i@…id¹
Yl   g:ÂV l   “Icp i�JZJl   {. = ix­ûliŒ^«l   �]� l   (aF i+[iíØl   î[À` i?ª$l   <ƒ- l   òO" iñÌú7iÕðéil   Ös7 l   " ¥ i!¹zl   Êgæ\ iÉä\i=HOl   >Gz l   uoÜf ivìi‚Ul   �}@ ijøô4l   i{> l   �Ÿ+ iž¤'iº7·yl   ¹4¹ l   MG1 iNÄçjl   ¥ [| i¦#FLiRÐ_l   QSúZ c                 C   sL   d}| D ] }|d? t |t|ƒA d@  A }q| d@ }t dt d|¡¡d S )Nl   ÿÿ é   éÿ   ú>Iz<Ir   )Úcrc32c_tabler   ÚstructÚunpackÚpack)ÚbufÚcrcÚc© r,   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/sctp.pyÚcrc32cq   s
    
r.   Z	Reserved1úSHA-1Z	Reserved2zSHA-256)r   é   é   é   ÚSCTPChunkDataÚSCTPChunkInitÚSCTPChunkInitAckÚSCTPChunkSACKÚSCTPChunkHeartbeatReqÚSCTPChunkHeartbeatAckÚSCTPChunkAbortÚSCTPChunkShutdownÚSCTPChunkShutdownAckÚSCTPChunkErrorÚSCTPChunkCookieEchoÚSCTPChunkCookieAckÚSCTPChunkShutdownCompleteÚSCTPChunkAuthenticationÚSCTPChunkAddressConfAckÚSCTPChunkAddressConf)r   r0   r1   r2   é   é   é   é   r"   é	   é
   é   é   é   é€   éÁ   ÚdataÚinitzinit-ackZsackzheartbeat-reqzheartbeat-ackÚabortÚshutdownzshutdown-ackÚerrorzcookie-echoz
cookie-ackzshutdown-completeÚauthenticationúaddress-configuration-ackúaddress-configurationÚSCTPChunkParamHeartbeatInfoÚSCTPChunkParamIPv4AddrÚSCTPChunkParamIPv6AddrÚSCTPChunkParamStateCookieÚSCTPChunkParamUnrocognizedParamÚ SCTPChunkParamCookiePreservativeÚSCTPChunkParamHostnameÚ SCTPChunkParamSupportedAddrTypesÚSCTPChunkParamECNCapableÚSCTPChunkParamRandomÚSCTPChunkParamChunkListÚ$SCTPChunkParamRequestedHMACFunctionsÚ!SCTPChunkParamSupportedExtensionsÚSCTPChunkParamFwdTSNÚSCTPChunkParamAddIPAddrÚSCTPChunkParamDelIPAddrÚSCTPChunkParamErrorIndicationÚSCTPChunkParamSetPrimaryAddrÚSCTPChunkParamSuccessIndicationÚSCTPChunkParamAdaptationLayer)r0   rD   rE   rF   r"   rG   rI   é   é €  é€  é€  é€  é€  é À  éÀ  éÀ  éÀ  éÀ  éÀ  éÀ  zheartbeat-infoÚIPv4r   zstate-cookiezunrecognized-paramzcookie-preservativeÚhostnameZ	addrtypeszecn-capableÚrandomz
chunk-listzrequested-HMAC-functionszsupported-extensionszfwd-tsn-supportedzadd-IPzdel-IPzerror-indicationzset-primary-addrzsuccess-indicationzadaptation-layerc                   @   s   e Zd Zdd„ ZdS )Ú_SCTPChunkGuessPayloadc                 C   s:   t |ƒdk rtjS t|d ƒ}tƒ  t |d¡tj¡S d S )NrC   r   ÚRaw)Úlenr   Zpadding_layerr   ÚglobalsÚgetÚsctpchunktypesclsÚ	raw_layer)ÚselfÚpÚtr,   r,   r-   Údefault_payload_classî   s    z,_SCTPChunkGuessPayload.default_payload_classN)Ú__name__Ú
__module__Ú__qualname__r„   r,   r,   r,   r-   rz   í   s   rz   c                   @   sD   e Zd ZeddeƒeddeƒeddƒeddƒgZdd„ Zd	d
„ ZdS )ÚSCTPÚsportr   ÚdportÚtagÚchksumNc                 C   s4   t |tƒsdS tjr0| j|jkr,| j|jks0dS dS ©Nr   r0   ©Ú
isinstancerˆ   r   Z
checkIPsrcr‰   rŠ   ©r�   Úotherr,   r,   r-   Úanswersü   s    

ÿzSCTP.answersc                 C   sF   ||7 }| j d u rBtt|ƒƒ}|d d… t d|¡ |dd …  }|S )Nr"   r$   rj   )rŒ   r.   r   r&   r(   )r�   r‚   Úpayr*   r,   r,   r-   Ú
post_build  s
    
$zSCTP.post_build)	r…   r†   r‡   r   r   r   Úfields_descr’   r”   r,   r,   r,   r-   rˆ   ö   s   

ý	rˆ   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú	SCTPerrorzSCTP in ICMPc                 C   s4   t |tƒsdS tjr0| j|jkr,| j|jks0dS dS r�   rŽ   r�   r,   r,   r-   r’     s    

ÿzSCTPerror.answersc                 C   s
   t  | ¡S ©N)r   Ú	mysummary)r�   r,   r,   r-   r˜     s    zSCTPerror.mysummaryN)r…   r†   r‡   Únamer’   r˜   r,   r,   r,   r-   r–     s   	r–   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚChunkParamFieldNc                 C   s   t j| ||tj||d� d S )N)Ú
count_fromÚlength_from)r   Ú__init__r   r€   )r�   r™   Údefaultr›   rœ   r,   r,   r-   r�   !  s    zChunkParamField.__init__c                 C   sN   t j}t|ƒdkrFt|d ƒd t|d ƒ }tƒ  t |d¡t j¡}||ƒS )NrC   r   é   r0   r{   )r   r€   r|   r   r}   r~   Úsctpchunkparamtypescls)r�   r‚   ÚmÚclsrƒ   r,   r,   r-   Úm2i$  s
    zChunkParamField.m2i)NN)r…   r†   r‡   r�   r£   r,   r,   r,   r-   rš      s   
rš   c                   @   s   e Zd Zdd„ ZdS )Ú_SCTPChunkParamc                 C   s   d|d d … fS )Nó    r,   )r�   Úsr,   r,   r-   Úextract_padding/  s    z_SCTPChunkParam.extract_paddingN)r…   r†   r‡   r§   r,   r,   r,   r-   r¤   .  s   r¤   c                   @   sF   e Zd Zeddeƒeddddd„ d�eedd	d
d„ d�ddd�gZdS )rV   Útyper0   r|   NrN   c                 C   s   |d S ©NrC   r,   ©ÚpktÚxr,   r,   r-   Ú<lambda>6  r¥   z$SCTPChunkParamHeartbeatInfo.<lambda>©Z	length_ofÚadjustÚ c                 C   s
   | j d S r©   ©r|   ©r«   r,   r,   r-   r­   8  r¥   ©rœ   rC   ó    ©Zpadwith©	r…   r†   r‡   r   Úsctpchunkparamtypesr   r   r   r•   r,   r,   r,   r-   rV   3  s   
ÿÿþýc                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )rW   r¨   rD   r|   r"   Úaddrú	127.0.0.1N)r…   r†   r‡   r   r·   r   r   r•   r,   r,   r,   r-   rW   <  s   
þc                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )rX   r¨   rE   r|   é   r¸   ú::1N)r…   r†   r‡   r   r·   r   r   r•   r,   r,   r,   r-   rX   B  s   
þc                   @   sF   e Zd Zeddeƒeddddd„ d�eedd	d
d„ d�ddd�gZdS )rY   r¨   rF   r|   NÚcookiec                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   K  r¥   z"SCTPChunkParamStateCookie.<lambda>r®   r°   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   M  r¥   r³   rC   r´   rµ   r¶   r,   r,   r,   r-   rY   H  s   
ÿÿþýc                   @   sF   e Zd Zeddeƒeddddd„ d�eedd	d
d„ d�ddd�gZdS )rZ   r¨   r"   r|   NÚparamc                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   T  r¥   z(SCTPChunkParamUnrocognizedParam.<lambda>r®   r°   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   V  r¥   r³   rC   r´   rµ   r¶   r,   r,   r,   r-   rZ   Q  s   
ÿÿþýc                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )r[   r¨   rG   r|   r"   Zsug_cookie_incN©r…   r†   r‡   r   r·   r   r   r•   r,   r,   r,   r-   r[   Z  s   
þc                   @   sF   e Zd Zeddeƒeddddd„ d�eedd	d
d„ d�ddd�gZdS )r\   r¨   rI   r|   Nrx   c                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   c  r¥   zSCTPChunkParamHostname.<lambda>r®   r°   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   e  r¥   r³   rC   r´   rµ   r¶   r,   r,   r,   r-   r\   `  s   
ÿÿþýc                
   @   sR   e Zd Zeddeƒeddddd„ d�eedd	ged
deƒdd„ d�ddd�gZdS )r]   r¨   rj   r|   NZaddr_type_listc                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   l  r¥   z)SCTPChunkParamSupportedAddrTypes.<lambda>r®   rw   Ú	addr_typerD   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   o  r¥   r³   rC   r´   rµ   )	r…   r†   r‡   r   r·   r   r   r   r•   r,   r,   r,   r-   r]   i  s   
ÿ

þýýc                   @   s"   e Zd ZeddeƒeddƒgZdS )r^   r¨   rk   r|   rC   N©r…   r†   r‡   r   r·   r   r•   r,   r,   r,   r-   r^   s  s   
ÿc                   @   sJ   e Zd Zeddeƒeddddd„ d�eeded	ƒd
d„ d�ddd�gZ	dS )r_   r¨   rl   r|   Nry   c                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   {  r¥   zSCTPChunkParamRandom.<lambda>r®   é    c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   }  r¥   r³   rC   r´   rµ   )
r…   r†   r‡   r   r·   r   r   r   r   r•   r,   r,   r,   r-   r_   x  s   
ÿÿþýc                
   @   sP   e Zd Zeddeƒeddddd„ d�eedded	de	ƒd
d„ d�ddd�gZ
dS )r`   r¨   rm   r|   NZ
chunk_listc                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   „  r¥   z SCTPChunkParamChunkList.<lambda>r®   Úchunkc                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   ‡  r¥   r³   rC   r´   rµ   ©r…   r†   r‡   r   r·   r   r   r   r
   Úsctpchunktypesr•   r,   r,   r,   r-   r`   �  s   
ÿ
þýýc                
   @   sR   e Zd Zeddeƒeddddd„ d�eedd	ged
deƒdd„ d�ddd�gZ	dS )ra   r¨   rn   r|   NZHMAC_functions_listc                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   Ž  r¥   z-SCTPChunkParamRequestedHMACFunctions.<lambda>r®   r/   ÚHMAC_functionr0   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   ‘  r¥   r³   rC   r´   rµ   )
r…   r†   r‡   r   r·   r   r   r   Ú	hmactypesr•   r,   r,   r,   r-   ra   ‹  s   
ÿ

þýýc                
   @   sT   e Zd Zeddeƒeddddd„ d�eedg d	¢edde	ƒd
d„ d�ddd�gZ
dS )rb   r¨   ro   r|   NZsupported_extensionsc                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   ˜  r¥   z*SCTPChunkParamSupportedExtensions.<lambda>r®   )rS   rU   rT   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   Ÿ  r¥   r³   rC   r´   rµ   rÃ   r,   r,   r,   r-   rb   •  s   
ÿÿúùýc                   @   s"   e Zd ZeddeƒeddƒgZdS )rc   r¨   rp   r|   rC   NrÀ   r,   r,   r,   r-   rc   £  s   
ÿc                   @   s†   e Zd Zeddeƒeddddd„ d�ed	dƒed
deƒeddddd„ d�eeddƒdd„ fe	ddƒdd„ fge
dddd„ d�ƒgZdS )rd   r¨   rq   r|   Nr¸   c                 C   s   |d S )Nrj   r,   rª   r,   r,   r-   r­   «  r¥   z SCTPChunkParamAddIPAddr.<lambda>r®   Úcorrelation_idr¿   rD   Úaddr_lenc                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   ¯  r¥   r¹   c                 C   s
   | j dkS )NrD   ©r¿   ©r‚   r,   r,   r-   r­   ³  r¥   r»   c                 C   s
   | j dkS )NrE   rÉ   rÊ   r,   r,   r-   r­   µ  r¥   r°   c                 C   s   | j S r—   )rÈ   r²   r,   r,   r-   r­   ¸  r¥   r³   )r…   r†   r‡   r   r·   r   r   r   r   r   r   r•   r,   r,   r,   r-   rd   ¨  s,   
ÿ
ÿÿÿýÿùùc                   @   s   e Zd ZdZdS )re   rr   N©r…   r†   r‡   r¨   r,   r,   r,   r-   re   ¼  s   c                	   @   sN   e Zd Zeddeƒeddddd„ d�ed	dƒeedd
dd„ d�ddd�gZ	dS )rf   r¨   rs   r|   NÚerror_causesc                 C   s   |d S ©Nr"   r,   rª   r,   r,   r-   r­   Ã  r¥   z&SCTPChunkParamErrorIndication.<lambda>r®   rÇ   r°   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   Æ  r¥   r³   rC   r´   rµ   )
r…   r†   r‡   r   r·   r   r   r   r   r•   r,   r,   r,   r-   rf   À  s   
ÿÿþüc                   @   s   e Zd ZdZdS )rg   rt   NrË   r,   r,   r,   r-   rg   Ê  s   c                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )rh   r¨   ru   r|   r"   rÇ   Nr¾   r,   r,   r,   r-   rh   Î  s   
þc                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )ri   r¨   rv   r|   r"   Z
indicationNr¾   r,   r,   r,   r-   ri   Ô  s   
þÚReservedZIUAZM2UAZM3UAZSUAZM2PAZV5UAzH.248zBICC/Q.2150.3ZTALIZDUAZASAPZENRPzH.323zQ.IPC/Q.2150.3ZSIMCOzDDP Segment ChunkzDDP Stream Session ControlZS1APZRUAZHNBAPz	ForCES-HPz	ForCES-MPz	ForCES-LPzSBc-APZNBAPZ
UnassignedZX2APZIRCPzLCS-APZMPICH2ZSABPZFGPZPPPZCALCAPPZSSPzNPMP-CONTROLz	NPMP-DATAÚECHOZDISCARDZDAYTIMEZCHARGENz3GPP RNAz	3GPP M2APz	3GPP M3APzSSH/SCTPzDiameter/SCTPzDiameter/DTLS/SCTPZR14PzWebRTC DCEPzWebRTC StringzWebRTC Binary PartialzWebRTC BinaryzWebRTC String Partialz3GPP PUAzWebRTC String EmptyzWebRTC Binary Empty):r   r0   r1   r2   rC   rD   rE   rF   r"   rG   rH   rI   rj   é   rJ   rK   é   é   é   é   rº   é   é   é   é   é   é   é   é   é   é   é   rÁ   é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   c                   @   sš   e Zd Zeddeƒedddƒedddƒedddƒed	ddƒed
ddƒeddddd„ d�eddƒeddƒeddƒe	dde
ƒeedddd„ d�ddd�gZdS )r3   r¨   r   ÚreservedNrC   Z
delay_sackr0   Ú	unorderedZ	beginningÚendingr|   rN   c                 C   s   |d S ©NrÑ   r,   rª   r,   r,   r-   r­   #  r¥   zSCTPChunkData.<lambda>r®   ZtsnZ	stream_idZ
stream_seqZproto_idc                 C   s
   | j d S rü   r±   r²   r,   r,   r-   r­   (  r¥   r³   r´   rµ   )r…   r†   r‡   r
   rÄ   r	   r   r   r   r   Ú"SCTP_PAYLOAD_PROTOCOL_INDENTIFIERSr   r   r•   r,   r,   r,   r-   r3     s   






ÿõc                   @   sl   e Zd Zeddeƒeddƒeddddd„ d	�ed
dƒeddƒe	ddƒe	ddƒeddƒe
dddd„ d�g	ZdS )r4   r¨   r0   ÚflagsNr|   Úparamsc                 C   s   |d S ©Nrº   r,   rª   r,   r,   r-   r­   0  r¥   zSCTPChunkInit.<lambda>r®   Zinit_tagÚa_rwndZn_out_streamsZn_in_streamsZinit_tsnc                 C   s
   | j d S r   r±   r²   r,   r,   r-   r­   6  r¥   r³   )r…   r†   r‡   r
   rÄ   r   r   r   r   r   rš   r•   r,   r,   r,   r-   r4   -  s   
øc                   @   s   e Zd ZdZdS )r5   r1   NrË   r,   r,   r,   r-   r5   :  s   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚGapAckFieldc                 C   s   t  | ||d¡ d S )NZ4s)r   r�   )r�   r™   rž   r,   r,   r-   r�   ?  s    zGapAckField.__init__c                 C   s<   |d u rdS dd„ |  d¡D ƒ\}}td||gƒ}tj|Ž S )Ns       c                 S   s   g | ]}t |ƒ‘qS r,   )Úint)Ú.0Úer,   r,   r-   Ú
<listcomp>E  r¥   z#GapAckField.i2m.<locals>.<listcomp>ú:ú>HH)ÚsplitÚtupler&   r(   )r�   r«   r¬   ZstaÚendÚargsr,   r,   r-   Úi2mB  s
    zGapAckField.i2mc                 C   s   dt  d|¡ S )Nú%d:%dr  )r&   r'   ©r�   r«   r¬   r,   r,   r-   r£   I  s    zGapAckField.m2ic                 C   s"   t |tƒrt|ƒdkrd| S |S )Nr1   r  )r�   r
  r|   r  r,   r,   r-   Úany2iL  s    zGapAckField.any2iN)r…   r†   r‡   r�   r  r£   r  r,   r,   r,   r-   r  >  s   r  c                   @   sŠ   e Zd Zeddeƒeddƒeddƒeddƒeddƒe	ddd	d
�e	dddd
�e
d	g eddƒdd„ d�e
dg eddƒdd„ d�g	Zdd„ ZdS )r6   r¨   r2   rþ   Nr|   Úcumul_tsn_ackr  Ú	n_gap_ackZgap_ack_list)Zcount_ofÚ	n_dup_tsnZdup_tsn_listZgap_ackc                 C   s   | j S r—   )r  r²   r,   r,   r-   r­   Z  r¥   zSCTPChunkSACK.<lambda>)r›   Zdup_tsnc                 C   s   | j S r—   )r  r²   r,   r,   r-   r­   [  r¥   c                 C   s:   | j d u r2|d d… t dt |ƒ¡ |dd …  }|| S )Nr1   z>HrC   )r|   r&   r(   )r�   r‚   r“   r,   r,   r-   r”   ^  s    
(zSCTPChunkSACK.post_build)r…   r†   r‡   r
   rÄ   r   r   r   r   r   r   r  r•   r”   r,   r,   r,   r-   r6   R  s   
øc                   @   sD   e Zd Zeddeƒeddƒeddddd„ d	�eddd
d„ d�gZdS )r7   r¨   rC   rþ   Nr|   rÿ   c                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   g  r¥   zSCTPChunkHeartbeatReq.<lambda>r®   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   h  r¥   r³   )	r…   r†   r‡   r
   rÄ   r   r   rš   r•   r,   r,   r,   r-   r7   d  s
   
ýc                   @   s   e Zd ZdZdS )r8   rD   NrË   r,   r,   r,   r-   r8   l  s   c                
   @   sZ   e Zd Zeddeƒedddƒedddƒed	dd
dd„ d�eed
ddd„ d�ddd�gZ	dS )r9   r¨   rE   rù   NrF   ÚTCBr   r0   r|   rÌ   c                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   t  r¥   zSCTPChunkAbort.<lambda>r®   r°   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   u  r¥   r³   rC   r´   rµ   )
r…   r†   r‡   r
   rÄ   r	   r   r   r   r•   r,   r,   r,   r-   r9   p  s   


ÿüc                   @   s2   e Zd ZeddeƒeddƒeddƒeddƒgZdS )r:   r¨   rF   rþ   Nr|   r"   r  )	r…   r†   r‡   r
   rÄ   r   r   r   r•   r,   r,   r,   r-   r:   z  s
   
ýc                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )r;   r¨   r"   rþ   Nr|   rC   ©r…   r†   r‡   r
   rÄ   r   r   r•   r,   r,   r,   r-   r;   ‚  s   
þc                	   @   sN   e Zd Zeddeƒeddƒeddddd„ d	�eedd
dd„ d�ddd�gZ	dS )r<   r¨   rG   rþ   Nr|   rÌ   c                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   Œ  r¥   zSCTPChunkError.<lambda>r®   r°   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   �  r¥   r³   rC   r´   rµ   ©
r…   r†   r‡   r
   rÄ   r   r   r   r   r•   r,   r,   r,   r-   r<   ‰  s   
ÿýc                	   @   sN   e Zd Zeddeƒeddƒeddddd„ d	�eedd
dd„ d�ddd�gZ	dS )r=   r¨   rH   rþ   Nr|   r¼   c                 C   s   |d S r©   r,   rª   r,   r,   r-   r­   •  r¥   zSCTPChunkCookieEcho.<lambda>r®   r°   c                 C   s
   | j d S r©   r±   r²   r,   r,   r-   r­   –  r¥   r³   rC   r´   rµ   r  r,   r,   r,   r-   r=   ’  s   
ÿýc                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )r>   r¨   rI   rþ   Nr|   rC   r  r,   r,   r,   r-   r>   ›  s   
þc                   @   s6   e Zd Zeddeƒedddƒedddƒed	d
ƒgZdS )r?   r¨   rJ   rù   NrF   r  r   r0   r|   rC   )r…   r†   r‡   r
   rÄ   r	   r   r•   r,   r,   r,   r-   r?   ¢  s
   


ýc                   @   s^   e Zd Zeddeƒeddƒeddddd„ d	�ed
dƒeddƒee	dddd„ d�ddd�gZ
dS )r@   r¨   rK   rþ   Nr|   ÚHMACc                 C   s   |d S rÍ   r,   rª   r,   r,   r-   r­   ®  r¥   z SCTPChunkAuthentication.<lambda>r®   Zshared_key_idrÅ   r°   c                 C   s
   | j d S rÍ   r±   r²   r,   r,   r-   r­   ±  r¥   r³   rC   r´   rµ   )r…   r†   r‡   r
   rÄ   r   r   r   r   r   r•   r,   r,   r,   r-   r@   ª  s   
ÿÿúc                	   @   sL   e Zd Zeddeƒeddƒeddddd„ d	�ed
dƒedddd„ d�gZ	dS )rB   r¨   rM   rþ   Nr|   rÿ   c                 C   s   |d S rÍ   r,   rª   r,   r,   r-   r­   º  r¥   zSCTPChunkAddressConf.<lambda>r®   Úseqr   c                 C   s
   | j d S rÍ   r±   r²   r,   r,   r-   r­   ¼  r¥   r³   )
r…   r†   r‡   r
   rÄ   r   r   r   rš   r•   r,   r,   r,   r-   rB   ¶  s   
ÿûc                   @   s   e Zd ZdZdS )rA   rL   NrË   r,   r,   r,   r-   rA   À  s   )Úproto)Znh)]Ú__doc__Ú
__future__r   r&   Zscapy.compatr   r   Zscapy.volatiler   Zscapy.configr   Zscapy.packetr   r   Zscapy.fieldsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z
scapy.datar   Zscapy.layers.inetr   r   Zscapy.layers.inet6r   r   r    ÚIPPROTO_SCTPr%   r.   rÆ   r   rÄ   r    r·   rz   rˆ   r–   rš   r¤   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rý   r3   r4   r5   r  r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rB   rA   r,   r,   r,   r-   Ú<module>   sŽ  PDüððìì					
	



Æ>
		
