a
    kÄ#dDE  ã                …   @   sX  d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ 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/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddededfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒœ„Zd�dŽd�d�d‘œZd’d“iZd”d•d–œZd—d˜d–œZd™dšiZG d›dœ„ dœeƒZG d�dž„ džeƒZG dŸd	„ d	eƒZG d dU„ dUeƒZG d¡d„ deƒZG d¢d„ deƒZG d£d`„ d`eƒZ G d¤d"„ d"eƒZ!G d¥d;„ d;eƒZ"d¦d§d§d¨d©dªœZ#G d«d9„ d9eƒZ$G d¬d:„ d:eƒZ%G d­d>„ d>eƒZ&G d®d<„ d<eƒZ'G d¯d_„ d_eƒZ(G d°da„ daeƒZ)G d±de„ deeƒZ*G d²dI„ dIeƒZ+G d³db„ dbeƒZ,G d´d„ deƒZ-G dµdl„ dleƒZ.g d¶¢d·d¸„ e/d¹dºƒD ƒ Z0G d»dD„ dDeƒZ1G d¼d½„ d½eƒZ2d§d§d§d§d¾d¿œZ3dÀdÁdÂœZ4G dÃdZ„ dZeƒZ5dÄdÅdÂœZ6G dÆd„ deƒZ7dÇdÈdÂœZ8G dÉdÊ„ dÊeƒZ9G dËd@„ d@eƒZ:G dÌd[„ d[eƒZ;G dÍd€„ d€eƒZ<G dÎdÏ„ dÏeƒZ=dÐdÑ„ Z>e ?¡ D ]$\Z@ZAe>eAeƒZBee=eBdÒe@iƒ �qêeee=dÓdÔiƒ eee=dÕdÔiƒ eCdÖk�rTdd×lDmEZE eEeFƒ dØdÙ� dS )Úz/
Skinny Call Control Protocol (SCCP) extension
é    )Úabsolute_importN)ÚPacketÚbind_layers)Ú
FlagsFieldÚIPFieldÚLEIntEnumFieldÚ
LEIntFieldÚStrFixedLenField)ÚTCP)Ú	RandShort)ÚconfÚSkinnyMessageKeepAliveZSkinnyMessageRegisterZSkinnyMessageIpPortÚSkinnyMessageKeypadButtonZSkinnyMessageEnblocCallZSkinnyMessageStimulusÚSkinnyMessageOffHookÚSkinnyMessageOnHookZSkinnyMessageHookFlashZSkinnyMessageForwardStatReqZSkinnyMessageSpeedDialStatReqZSkinnyMessageLineStatReqZSkinnyMessageConfigStatReqZSkinnyMessageTimeDateReqZSkinnyMessageButtonTemplateReqZSkinnyMessageVersionReqZSkinnyMessageCapabilitiesResZSkinnyMessageMediaPortListZSkinnyMessageServerReqZSkinnyMessageAlarmZ'SkinnyMessageMulticastMediaReceptionAckÚ"SkinnyMessageOpenReceiveChannelAckZ$SkinnyMessageConnectionStatisticsResZSkinnyMessageOffHookWithCgpnZSkinnyMessageSoftKeySetReqÚSkinnyMessageSoftKeyEventZSkinnyMessageUnregisterZSkinnyMessageSoftKeyTemplateReqZSkinnyMessageRegisterTokenReqZ%SkinnyMessageMediaTransmissionFailureZSkinnyMessageHeadsetStatusZ&SkinnyMessageMediaResourceNotificationZ#SkinnyMessageRegisterAvailableLinesZSkinnyMessageDeviceToUserDataZ%SkinnyMessageDeviceToUserDataResponseZSkinnyMessageUpdateCapabilitiesZ,SkinnyMessageOpenMultiMediaReceiveChannelAckZSkinnyMessageClearConferenceZSkinnyMessageServiceURLStatReqZSkinnyMessageFeatureStatReqZ SkinnyMessageCreateConferenceResZ SkinnyMessageDeleteConferenceResZ SkinnyMessageModifyConferenceResZSkinnyMessageAddParticipantResZSkinnyMessageAuditConferenceResZ SkinnyMessageAuditParticipantResZ%SkinnyMessageDeviceToUserDataVersion1ZSkinnyMessageRegisterAckÚSkinnyMessageStartToneÚSkinnyMessageStopToneÚSkinnyMessageSetRingerÚSkinnyMessageSetLampZSkinnyMessageSetHkFDetectÚSkinnyMessageSpeakerModeZSkinnyMessageSetMicroModeÚ#SkinnyMessageStartMediaTransmissionZ"SkinnyMessageStopMediaTransmissionZ SkinnyMessageStartMediaReceptionZSkinnyMessageStopMediaReceptionÚSkinnyMessageCallInfoZSkinnyMessageForwardStatZSkinnyMessageSpeedDialStatZSkinnyMessageLineStatZSkinnyMessageConfigStatÚSkinnyMessageTimeDateZ%SkinnyMessageStartSessionTransmissionZ$SkinnyMessageStopSessionTransmissionZSkinnyMessageButtonTemplateZSkinnyMessageVersionZSkinnyMessageDisplayTextZSkinnyMessageClearDisplayZSkinnyMessageCapabilitiesReqZSkinnyMessageEnunciatorCommandZSkinnyMessageRegisterRejectZSkinnyMessageServerResZSkinnyMessageResetÚSkinnyMessageKeepAliveAckZ)SkinnyMessageStartMulticastMediaReceptionZ,SkinnyMessageStartMulticastMediaTransmissionZ(SkinnyMessageStopMulticastMediaReceptionZ+SkinnyMessageStopMulticastMediaTransmissionÚSkinnyMessageOpenReceiveChannelÚ SkinnyMessageCloseReceiveChannelZ$SkinnyMessageConnectionStatisticsReqZSkinnyMessageSoftKeyTemplateResZSkinnyMessageSoftKeySetResÚ)SkinnyMessageStationSelectSoftKeysMessageÚSkinnyMessageCallStateÚSkinnyMessagePromptStatusÚSkinnyMessageClearPromptStatusZSkinnyMessageDisplayNotifyZSkinnyMessageClearNotifyÚSkinnyMessageCallPlaneZSkinnyMessageUnregisterAckZSkinnyMessageBackSpaceReqZSkinnyMessageRegisterTokenAckZ SkinnyMessageRegisterTokenRejectZ-SkinnyMessageDeviceToUserDataResponseVersion1Z'SkinnyMessageStartMediaFailureDetectionÚSkinnyMessageDialedNumberZSkinnyMessageUserToDeviceDataZSkinnyMessageFeatureStatZSkinnyMessageDisplayPriNotifyZSkinnyMessageClearPriNotifyZSkinnyMessageStartAnnouncementZSkinnyMessageStopAnnouncementZSkinnyMessageAnnouncementFinishZSkinnyMessageNotifyDtmfToneZSkinnyMessageSendDtmfToneZ$SkinnyMessageSubscribeDtmfPayloadReqZ$SkinnyMessageSubscribeDtmfPayloadResZ$SkinnyMessageSubscribeDtmfPayloadErrZ&SkinnyMessageUnSubscribeDtmfPayloadReqZ&SkinnyMessageUnSubscribeDtmfPayloadResZ&SkinnyMessageUnSubscribeDtmfPayloadErrZSkinnyMessageServiceURLStatZSkinnyMessageCallSelectStatZ"SkinnyMessageOpenMultiMediaChannelZ(SkinnyMessageStartMultiMediaTransmissionÚ'SkinnyMessageStopMultiMediaTransmissionZ!SkinnyMessageMiscellaneousCommandZSkinnyMessageFlowControlCommandZ*SkinnyMessageCloseMultiMediaReceiveChannelZ SkinnyMessageCreateConferenceReqZ SkinnyMessageDeleteConferenceReqZ SkinnyMessageModifyConferenceReqZSkinnyMessageAddParticipantReqZSkinnyMessageDropParticipantReqZSkinnyMessageAuditConferenceReqZ SkinnyMessageAuditParticipantReqZ%SkinnyMessageUserToDeviceDataVersion1)„r   é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é@   éA   é�   é‚   éƒ   é…   é†   é‡   éˆ   é‰   éŠ   é‹   éŒ   é�   é�   é�   é‘   é’   é“   é”   é•   é–   é—   é˜   é™   éš   é›   éœ   é�   éž   éŸ   é   i  i  i  i  i  i  i  i  i	  i  i  i  i  i  i  i  i  i  i  i  i  éB   i  i  i  i  i   i!  i"  i#  i$  i'  i(  i)  i*  i+  i,  i-  i.  i/  i0  i1  i2  i3  i4  i5  i6  i7  i8  i9  i:  i;  i<  i=  i?  úOff HookúOn HookzRing outZ
Proceeding)r%   r&   r'   r0   r%   zRing offz
Speaker onzSpeaker off)r%   r&   zOff (?)ZOnr-   ZLinec                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚSkinnyDateTimeFieldc                 C   s   t  | ||d¡ d S )Nr7   )r	   Ú__init__)ÚselfÚnameÚdefault© ry   úK/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/skinny.pyru   Æ   s    zSkinnyDateTimeField.__init__c                 C   s,   t  d|¡\}}}}}}}	}
||||||	fS )Nú<8I)ÚstructÚunpack)rv   ÚpktÚsÚyearÚmonthZdowÚdayÚhourÚminÚsecZmillisecondry   ry   rz   Úm2iÉ   s    zSkinnyDateTimeField.m2ic                 C   sH   t |tƒr|  ||¡}|d d… d |dd…  d }tjdg|¢R Ž S )Nr&   )r   r+   r{   )Ú
isinstanceÚstrÚh2ir|   Úpack)rv   r~   ÚvalZtmp_lstry   ry   rz   Úi2mÍ   s    
 zSkinnyDateTimeField.i2mc                 C   s&   t |tƒr|S t t |d ¡¡S d S )N)r   r   r   )r‡   rˆ   ÚtimeÚctimeÚmktime©rv   r~   Úxry   ry   rz   Úi2hÓ   s    
zSkinnyDateTimeField.i2hc                 C   s   |   ||¡S ©N)r’   r�   ry   ry   rz   Úi2reprÙ   s    zSkinnyDateTimeField.i2reprc              	   C   sp   d}t |tƒr2t |¡}|d d… |dd…  }n:|sht t ¡ ¡\	}}}}}}	}
}
}
||||||	f}n|}|S )Nry   r&   éýÿÿÿ)r‡   rˆ   r�   ÚstrptimeÚgmtime)rv   r~   r   ÚtÚyÚmÚdÚhr„   r…   Úrestry   ry   rz   r‰   Ü   s    

 zSkinnyDateTimeField.h2iN)	Ú__name__Ú
__module__Ú__qualname__ru   r†   rŒ   r’   r”   r‰   ry   ry   ry   rz   rt   Å   s   rt   c                   @   s   e Zd ZdZdS )ÚSkinnyMessageGenericzGeneric messageN©rž   rŸ   r    rw   ry   ry   ry   rz   r¡   î   s   r¡   c                   @   s   e Zd ZdZdS )r   z
keep aliveNr¢   ry   ry   ry   rz   r   ò   s   c                   @   s   e Zd ZdZdS )r   zkeep alive ackNr¢   ry   ry   ry   rz   r   ö   s   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )r   rr   Úunknown1r   Úunknown2N©rž   rŸ   r    rw   r   Úfields_descry   ry   ry   rz   r   ú   s   ÿc                   @   s   e Zd ZdZdS )r   rs   Nr¢   ry   ry   ry   rz   r      s   c                   @   sF   e Zd ZdZeddeƒeddƒeddƒeddƒed	dƒed
dƒgZdS )r   zSkinny Call state messageÚstater%   ÚinstanceÚcallidr   r£   r(   r¤   Úunknown3N)rž   rŸ   r    rw   r   Úskinny_callstatesr   r¦   ry   ry   ry   rz   r     s   
ûc                   @   s,   e Zd ZdZeddƒeddƒeddƒgZdS )r   zSoft Key EventÚkeyr   r¨   r%   r©   Nr¥   ry   ry   ry   rz   r     s
   þc                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZdS )	r   zRing messageÚringr%   r£   r   r¤   rª   N)rž   rŸ   r    rw   r   Úskinny_ring_typer   r¦   ry   ry   ry   rz   r     s   
ýzInside dial toneZxxxzAlerting tonezReorder Tone)r8   r9   r:   r;   r<   c                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZd	S )
r   z
Start toneZtoner8   r£   r   r¨   r%   r©   N)rž   rŸ   r    rw   r   Ú_skinny_tonesr   r¦   ry   ry   ry   rz   r   &  s   
ýc                   @   s$   e Zd ZdZeddƒeddƒgZdS )r   z	stop toner¨   r%   r©   r   Nr¥   ry   ry   ry   rz   r   .  s   ÿc                   @   s   e Zd ZdZeddeƒgZdS )r   zSpeaker mdoer­   r%   N)rž   rŸ   r    rw   r   Úskinny_speaker_modesr¦   ry   ry   ry   rz   r   4  s   c                   @   s0   e Zd ZdZeddeƒeddƒeddeƒgZdS )	r   z!Lamp message (light of the phone)Zstimulusr)   r¨   r%   Úmoder&   N)	rž   rŸ   r    rw   r   Úskinny_stimulusr   Úskinny_lamp_moder¦   ry   ry   ry   rz   r   9  s
   

þc                   @   s4   e Zd ZdZeddƒeddƒeddƒeddƒgZd	S )
r   z Station Select Soft Keys Messager¨   r%   r©   r   ÚsetÚmapiÿÿ  Nr¥   ry   ry   ry   rz   r   @  s   ýc                   @   s6   e Zd ZdZeddƒedddƒeddƒed	dƒgZd
S )r    zPrompt statusÚtimeoutr   Útexts                                    r7   r¨   r%   r©   N)rž   rŸ   r    rw   r   r	   r¦   ry   ry   ry   rz   r    H  s   
ýc                   @   s   e Zd ZdZeddƒgZdS )r"   z&Activate/Deactivate Call Plane Messager¨   r%   Nr¥   ry   ry   ry   rz   r"   P  s   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )r   zSetting date and timeZsettimeNÚ	timestampr   )rž   rŸ   r    rw   rt   r   r¦   ry   ry   ry   rz   r   U  s   ÿc                   @   s$   e Zd ZdZeddƒeddƒgZdS )r!   zclear prompt statusr¨   r%   r©   r   Nr¥   ry   ry   ry   rz   r!   [  s   ÿc                   @   s,   e Zd ZdZeddƒeddƒeddƒgZdS )r   zkeypad buttonr¬   r   r¨   r%   r©   Nr¥   ry   ry   ry   rz   r   a  s
   þc                   @   s.   e Zd ZdZedddƒeddƒeddƒgZd	S )
r#   zdialed numberÚnumberÚ1337é   r¨   r%   r©   r   N)rž   rŸ   r    rw   r	   r   r¦   ry   ry   ry   rz   r#   h  s
   
þ)Z
CallerNameZCallerNumberZ
CalledNameZCalledNumberZOriginalCalledNameZOriginalCalledNumberZLastRedirectNameZLastRedirectNumberc                 C   s   g | ]}d | ‘qS )zBit%dry   )Ú.0Úiry   ry   rz   Ú
<listcomp>o  ó    r¾   r,   r3   c                   @   sÈ   e Zd ZdZedddƒedddƒedd	dƒed
ddƒeddƒeddƒedd	dƒedddƒedd	dƒedddƒeddƒeddƒedddƒedddƒedddƒedddƒeddƒedddeƒeddƒgZdS ) r   zcall informationZ
callernamezJean Valjeanr?   Z	callernumrº   r»   Z
callednameZCausetteZ	callednumZ1034Zlineinstancer%   r©   r   ZoriginalcallednameZoriginalcallednumZlastredirectingnameZlastredirectingnumZoriginalredirectreasonZlastredirectreasonZvoicemailboxGs                           ZvoicemailboxDZoriginalvoicemailboxDZlastvoicemailboxDÚsecurityZrestrictionr4   ÚunknownN)	rž   rŸ   r    rw   r	   r   r   Ú%_skinny_message_callinfo_restrictionsr¦   ry   ry   ry   rz   r   r  s*   











îc                   @   s   e Zd Zdd„ ZdS )ÚSkinnyRateFieldc                 C   s   |d u rd}d| S )Nr   z	%d ms/pktry   r�   ry   ry   rz   r”   Š  s    zSkinnyRateField.i2reprN©rž   rŸ   r    r”   ry   ry   ry   rz   rÃ   ‰  s   rÃ   zG711 ulaw 64k)r   r%   r&   r'   r(   zecho cancellation offzecho cancellation on)r   r%   c                	   @   sX   e Zd ZdZeddƒeddƒeddƒeddeƒed	deƒed
dƒeddƒgZ	dd„ Z
dS )r   úopen receive channelÚ
conferencer   ÚpassthruÚrateé   Úcodecr(   Zechor£   r©   c                 C   s   t jS r“   ©r   Zpadding_layer©rv   Úpry   ry   rz   Úguess_payload_class¨  s    z3SkinnyMessageOpenReceiveChannel.guess_payload_classN)rž   rŸ   r    rw   r   rÃ   r   Ú_skinny_codecsÚ_skinny_echor¦   rÎ   ry   ry   ry   rz   r   ž  s   

úÚokÚkoc                   @   s@   e Zd ZdZeddeƒeddƒedeƒ ƒeddƒeddƒgZ	d	S )
r   rÅ   Ústatusr   Úremoteú0.0.0.0ÚportrÇ   r©   N)
rž   rŸ   r    rw   r   Ú_skinny_receive_channel_statusr   r   r   r¦   ry   ry   ry   rz   r   ²  s   

üzsilence suppression offzsilence suppression onc                   @   s   e Zd Zdd„ ZdS )ÚSkinnyFramePerPacketFieldc                 C   s   |d u rd}d| S )Nr   z%d frames/pktry   r�   ry   ry   rz   r”   Â  s    z SkinnyFramePerPacketField.i2reprNrÄ   ry   ry   ry   rz   rØ   Á  s   rØ   c                   @   sz   e Zd ZdZeddƒeddƒeddƒedeƒ ƒedd	ƒed
de	ƒeddƒedde
ƒeddƒeddƒeddƒgZdd„ ZdS )r   zstart multimedia transmissionrÆ   r   rÇ   rÔ   rÕ   rÖ   rÈ   rÉ   rÊ   r(   Ú
precedenceéÈ   ÚsilenceZ	maxframesr£   r©   c                 C   s   t jS r“   rË   rÌ   ry   ry   rz   rÎ   Ö  s    z7SkinnyMessageStartMediaTransmission.guess_payload_classN)rž   rŸ   r    rw   r   r   r   rÃ   r   rÏ   Ú_skinny_silencerØ   r¦   rÎ   ry   ry   ry   rz   r   È  s   


öc                   @   sb   e Zd ZdZeddƒeddƒeddƒedeƒ ƒedd	ƒed
de	ƒeddƒedde
ƒeddƒg	ZdS )r   zclose receive channelrÆ   r   rÇ   rÔ   rÕ   rÖ   rÈ   rÉ   rÊ   r(   rÙ   rÚ   rÛ   r©   N)rž   rŸ   r    rw   r   r   r   rÃ   r   rÏ   rÜ   r¦   ry   ry   ry   rz   r   Ú  s   


øc                   @   s,   e Zd ZdZeddƒeddƒeddƒgZdS )r$   zstop multimedia transmissionrÆ   r   rÇ   r©   Nr¥   ry   ry   ry   rz   r$   ç  s
   þc                   @   s6   e Zd Zd ZeddƒeddƒeddeƒgZdd„ ZdS )ÚSkinnyÚlenNÚresr   Úmsgc                 C   s>   | j d u r6t |ƒt |ƒ d }t d|¡|dd …  }|| S )Nr,   z@Ir(   )rÞ   r|   rŠ   )rv   r~   rÍ   Ztmp_lenry   ry   rz   Ú
post_buildô  s    
zSkinny.post_build)	rž   rŸ   r    rw   r   r   Úskinny_messages_clsr¦   rá   ry   ry   ry   rz   rÝ   î  s   
þrÝ   c                 C   s   t ƒ  | |¡S r“   )ÚglobalsÚget)rw   Zfallback_clsry   ry   rz   Úget_clsþ  s    rå   rà   ÚdportiÐ  ZsportÚ__main__)ÚinteractzWelcome to Skinny add-on)ZmydictZmybanner)GÚ__doc__Ú
__future__r   r�   r|   Zscapy.packetr   r   Zscapy.fieldsr   r   r   r   r	   Zscapy.layers.inetr
   Zscapy.volatiler   Zscapy.configr   râ   r«   r®   r°   r³   r²   rt   r¡   r   r   r   r   r   r   r   r¯   r   r   r   r   r   r    r"   r   r!   r   r#   ÚrangerÂ   r   rÃ   rÏ   rÐ   r   r×   r   rÜ   rØ   r   r   r$   rÝ   rå   ÚitemsÚmsgidZstrclsÚclsrž   Z
scapy.mainrè   rã   ry   ry   ry   rz   Ú<module>
   s´  € ú ü	ÿþþÿ	)
	û	û	þþ
þ

