
    h0                        d Z ddlmZ ddl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 ddlmZmZmZ ddlmZ  G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z i 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/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDZ!i Z"dE Z# G dF dGe          Z$ G dH dIe          Z%i Z&i Z'i Z( G dJ dKe          Z) G dL dMe          Z* G dN dOe          Z+ G dP dQe          Z, G dR dSe          Z- G dT dUe          Z. G dV dWe          Z/e/e"d%<    G dX dYe          Z0e0e"d'<    G dZ d[e          Z1e1e"d)<    G d\ d]e          Z2e2e"d+<    G d^ d_e          Z3e3e"d<    G d` dae          Z4e4e"d<    G db dce          Z5e5e"d<    G dd dee          Z6e6e"d<    G df dge          Z7e7e"d<    G dh die          Z8e8e"d<    G dj dke          Z9 G dl dme          Z:e:e"d!<    G dn doe          Z;e;e"d#<    G dp dqe          Z<e<e'dr<    G ds dte          Z=e=e'du<    G dv dwe          Z>e>e(dr<    G dx dye          Z?e?e(du<    ee$e$            eee$dz{            eee$dz|           d}S )~zR
Secure Shell (SSH) Transport Layer Protocol

RFC 4250, 4251, 4252, 4253 and 4254
    )conf)	plain_str)BitLenField	ByteFieldByteEnumFieldIntEnumFieldIntFieldPacketFieldPacketListFieldPacketLenFieldFieldLenFieldFieldListFieldStrLenFieldStrFixedLenFieldStrNullFieldYesNoByteField)Packetbind_bottom_upbind_layers)TCPc                       e Zd ZdZdS )StrCRLFFields   
N)__name__
__module____qualname__	DELIMITER     T/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/ssh.pyr   r   #   s        IIIr   r   c                       e Zd Zd ZdS )_SSHHeaderFieldc                     g }|rG| j                             ||          \  }}|                    |           |d d         dk    r||fS |G||fS N   s   SSH-)fieldgetfieldappend)selfpktsvalvs        r   r&   z_SSHHeaderField.getfield(   sj     	:&&sA..DAqJJqMMM!u#v	  	
 #vr   N)r   r   r   r&   r   r   r   r!   r!   '   s#            r   r!   c                   ,     e Zd ZdZ fdZ fdZ xZS )_ComaStrField   c                 |    t          t          |                               ||                              d          S N   ,)superr.   m2isplitr(   r)   x	__class__s      r   r4   z_ComaStrField.m2i;   s1    ]D))--c155;;DAAAr   c                 |    t          t          |                               |d                    |                    S r1   )r3   r.   i2mjoinr6   s      r   r:   z_ComaStrField.i2m>   s-    ]D))--c499Q<<@@@r   )r   r   r   islistr4   r:   __classcell__r8   s   @r   r.   r.   8   sd        FB B B B BA A A A A A A A Ar   r.   c                   P    e Zd Z edddd           eddd           gZd	 ZdS )
	SSHStringlengthNvalue!I	length_offmtr   c                     | j         S NrA   r)   s    r   <lambda>zSSHString.<lambda>E   s    
 r   length_fromc                     t           j        S rH   r   padding_layerr(   payloads     r   default_payload_classzSSHString.default_payload_classH       !!r   )r   r   r   r   r   fields_descrS   r   r   r   r@   r@   B   sX        hTBBBGQ,B,BCCCK
" " " " "r   r@   c                   .     e Zd ZdgZ fdZ fdZ xZS )SSHPacketStringFieldsub_clsc                     || _         t          t          |                               |t	                      t                     d S rH   )rX   r3   rW   __init__r@   )r(   namerX   r8   s      r   rZ   zSSHPacketStringField.__init__O   s7    "D))224iPPPPPr   c                     t          t          |                               ||          }|                     |j                  |_        |S rH   )r3   rW   r4   rX   rB   r6   s      r   r4   zSSHPacketStringField.m2iS   s=    &--11#q99,,qw''r   )r   r   r   	__slots__rZ   r4   r=   r>   s   @r   rW   rW   L   s]        IQ Q Q Q Q        r   rW   c                   P    e Zd Z edddd           edg d           gZd ZdS )	NameListrA   NnamesrC   rD   c                     | j         S rH   rI   rJ   s    r   rK   zNameList.<lambda>\   s    3: r   rL   c                     t           j        S rH   rO   rQ   s     r   rS   zNameList.default_payload_class_   rT   r   )r   r   r   r   r.   rU   rS   r   r   r   r_   r_   Y   sX        hTBBBgr/E/EFFFK
" " " " "r   r_   c                   P    e Zd Z edddd           eddd           gZd	 ZdS )
MpintrA   NrB   rC   rD   r   c                     | j         dz  S )N   rI   rJ   s    r   rK   zMpint.<lambda>f   s    
Q r   rL   c                     t           j        S rH   rO   rQ   s     r   rS   zMpint.default_payload_classi   rT   r   )r   r   r   r   r   rU   rS   r   r   r   rd   rd   c   sX        hTBBBGQ,F,FGGGK
" " " " "r   rd   r/   SSH_MSG_DISCONNECT   SSH_MSG_IGNORE   SSH_MSG_UNIMPLEMENTEDr$   SSH_MSG_DEBUG   SSH_MSG_SERVICE_REQUEST   SSH_MSG_SERVICE_ACCEPT   SSH_MSG_EXT_INFOrf   SSH_MSG_NEWCOMPRESS   SSH_MSG_KEXINIT   SSH_MSG_NEWKEYS   SSH_MSG_KEXDH_INIT   SSH_MSG_KEXDH_REPLY2   SSH_MSG_USERAUTH_REQUEST3   SSH_MSG_USERAUTH_FAILURE4   SSH_MSG_USERAUTH_SUCCESS5   SSH_MSG_USERAUTH_BANNERP   SSH_MSG_GLOBAL_REQUESTSSH_MSG_REQUEST_SUCCESSSSH_MSG_REQUEST_FAILURESSH_MSG_CHANNEL_OPEN!SSH_MSG_CHANNEL_OPEN_CONFIRMATIONSSH_MSG_CHANNEL_OPEN_FAILURESSH_MSG_CHANNEL_WINDOW_ADJUSTSSH_MSG_CHANNEL_DATASSH_MSG_CHANNEL_EXTENDED_DATASSH_MSG_CHANNEL_EOFSSH_MSG_CHANNEL_CLOSESSH_MSG_CHANNEL_REQUESTSSH_MSG_CHANNEL_SUCCESSSSH_MSG_CHANNEL_FAILURE)Q   R   Z   [   \   ]   ^   _   `   a   b   c   d   c                 l    t                              | o| d         t          j                  |           S )Nr   )_SSH_messagesgetr   	raw_layer)r7   kwargss     r   _SSHPayloadr      s*    QZ1Q488;;;r   c                       e Zd ZdZ edd           edd           edded            edd	d
           gZ	e
dd            Zd ZdS )SSHzSSH - Binary Packetpacket_lengthNpadding_lengthpayc                 &    | j         | j        z
  dz
  S )Nr/   )r   r   rJ   s    r   rK   zSSH.<lambda>   s    C$58J$JQ$N r   rL   random_paddingr   c                     | j         S rH   )r   rJ   s    r   rK   zSSH.<lambda>   s	    3CU r   c                 Z    |r(t          |          dk    r|d d         dk    rt          S | S r#   )lenSSHVersionExchange)cls_pktargskargss       r   dispatch_hookzSSH.dispatch_hook   s5     	&CIINNtBQBx7':':%%
r   c                 $   | j         rzt          | j         t          j                  r0dt	          | j         j        d                   z   t          t          gfS d| j                             d          z   t          t          gfS dt          t          gfS )Nz	SSH type r   zSSH z%type%r   )	r   
isinstancer   r   strloadr   r   sprintfr(   s    r   	mysummaryzSSH.mysummary   s|    8 	C$(DN33 G"Sq)9%:%::S#JFFDH,,X666c
BBsCj  r   rH   )r   r   r   r[   r	   r   r   r   r   rU   classmethodr   r   r   r   r   r   r      s         D$''	"D))NN		
 	
 	
 	$c7U7UVVVK    [
! ! ! ! !r   r   c                   H    e Zd ZdZ edg  edd                    gZd ZdS )r   zSSH - Protocol Version Exchangelines r   c                 L    dt          | j        d                   z  t          gfS )NzSSH - Version Exchange %s)r   r   r   r   s    r   r   zSSHVersionExchange.mysummary   s"    *Ytz"~-F-FFMMr   N)r   r   r   r[   r!   r   rU   r   r   r   r   r   r      sX        ,DLS!!	
 	
KN N N N Nr   r   c                       e Zd Zd ZdS )_SSHCertificatec                 f    t                              |j        j        | j                  |          S rH   )_SSH_certificatesr   format_identifierrB   r   r(   r)   r7   s      r   r4   z_SSHCertificate.m2i   s(     $$S%:%@$(KKANNNr   Nr   r   r   r4   r   r   r   r   r      s(        O O O O Or   r   c                       e Zd Zd ZdS )_SSHPublicKeyc                 f    t                              |j        j        | j                  |          S rH   )_SSH_publickeysr   r   rB   r   r   s      r   r4   z_SSHPublicKey.m2i   (    ""3#8#>II!LLLr   Nr   r   r   r   r   r      (        M M M M Mr   r   c                       e Zd Zd ZdS )_SSHSignaturec                 f    t                              |j        j        | j                  |          S rH   )_SSH_signaturesr   r   rB   r   r   s      r   r4   z_SSHSignature.m2i   r   r   Nr   r   r   r   r   r      r   r   r   c                   b    e Zd Z ed e            e           eddej                  gZd Z	dS )SSHCertificater   dataNc                     t           j        S rH   rO   rQ   s     r   rS   z$SSHCertificate.default_payload_class   rT   r   )
r   r   r   r
   r@   r   r   r   rU   rS   r   r   r   r   r      sU        'i@@dn55K
" " " " "r   r   c                   b    e Zd Z ed e            e           eddej                  gZd Z	dS )SSHPublicKeyr   r   Nc                     t           j        S rH   rO   rQ   s     r   rS   z"SSHPublicKey.default_payload_class   rT   r   )
r   r   r   r
   r@   r   r   r   rU   rS   r   r   r   r   r      U        'i@@fdDN33K
" " " " "r   r   c                   b    e Zd Z ed e            e           eddej                  gZd Z	dS )SSHSignaturer   r   Nc                     t           j        S rH   rO   rQ   s     r   rS   z"SSHSignature.default_payload_class   rT   r   )
r   r   r   r
   r@   r   r   r   rU   rS   r   r   r   r   r      r   r   r   c                       e Zd Z edde           eddd           ed e            e           ed e            e           ed	 e            e           ed
 e            e           ed e            e           ed e            e           ed e            e           ed e            e           ed e            e           ed e            e           edd           e	dd          gZ
dS )
SSHKexInittyperu   cookier      rI   kex_algorithmsserver_host_key_algorithms&encryption_algorithms_client_to_server&encryption_algorithms_server_to_clientmac_algorithms_client_to_servermac_algorithms_server_to_client'compression_algorithms_client_to_server'compression_algorithms_server_to_clientlanguages_client_to_serverlanguages_server_to_clientfirst_kex_packet_followsr   reservedN)r   r   r   r   _SSH_message_numbersr   r
   r_   r   r	   rU   r   r   r   r   r     sK       fb"6773r222$hhjj(;;0((**hGG<hhjj(SS<hhjj(SS5xxzz8LL5xxzz8LL=xxzz8TT=xxzz8TT0((**hGG0((**hGG1155QKKKr   r   c                   *    e Zd Z edde          gZdS )
SSHNewKeysr   rw   Nr   r   r   r   r   rU   r   r   r   r   r     s'        fb"677KKKr   r   c                   R    e Zd Z edde           ed e            e          gZdS )SSHKexDHInitr   ry   eN)r   r   r   r   r   r
   rd   rU   r   r   r   r   r   &  s>        fb"677C%((KKKr   r   c                   ~    e Zd Z edde           ede           ed e            e           ede	          gZ
dS )SSHKexDHReplyr   r{   K_SfH_hashN)r   r   r   r   r   rW   r   r
   rd   r   rU   r   r   r   r   r   0  s^        fb"677UL11C%((X|44	KKKr   r   c                   R    e Zd Z edde           ed e            e          gZdS )SSHServiceRequestr   rn   service_nameNr   r   r   r   r   r
   r@   rU   r   r   r   r   r   >  >        fa!566NIIKK;;KKKr   r   c                   R    e Zd Z edde           ed e            e          gZdS )SSHServiceAcceptr   rp   r   Nr   r   r   r   r  r  H  r  r   r  c                       e Zd Z edde           eddddddd	d
dddddddddd           ed e            e           ed e            e          gZdS )SSHDisconnectr   r/   reason_coder   *SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECTSSH_DISCONNECT_PROTOCOL_ERROR"SSH_DISCONNECT_KEY_EXCHANGE_FAILEDSSH_DISCONNECT_RESERVEDSSH_DISCONNECT_MAC_ERROR SSH_DISCONNECT_COMPRESSION_ERROR$SSH_DISCONNECT_SERVICE_NOT_AVAILABLE-SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED&SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLESSH_DISCONNECT_CONNECTION_LOSTSSH_DISCONNECT_BY_APPLICATION#SSH_DISCONNECT_TOO_MANY_CONNECTIONS%SSH_DISCONNECT_AUTH_CANCELLED_BY_USER-SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE SSH_DISCONNECT_ILLEGAL_USER_NAME)r/   ri   rk   r$   rn   rp   rr   rf   	   
                  descriptionlanguage_tagN)	r   r   r   r   r   r   r
   r@   rU   r   r   r   r  r  T  s        fa!566?27,-59B;439;C6 	
 	
* 	M99;;	::NIIKK;;1KKKr   r  c                   R    e Zd Z edde           ed e            e          gZdS )	SSHIgnorer   ri   r   Nr   r   r   r   r   r   v  s>        fa!566FIIKK33KKKr   r   c                       e Zd Z edde           edd           ed e            e           ed e            e          gZdS )SSHServiceDebugr   r$   always_displayr   messager  N)	r   r   r   r   r   r   r
   r@   rU   r   r   r   r"  r"    se        fa!566'++Iyy{{I66NIIKK;;	KKKr   r"  c                   @    e Zd Z edde           edd          gZdS )SSHUnimplementedr   rk   seq_numr   N)r   r   r   r   r   r	   rU   r   r   r   r&  r&    s6        fa!566AKKKr   r&  c                   h    e Zd Z ed e            e           ed e            e          gZd ZdS )SSHExtensionextension_nameextension_valuec                     t           j        S rH   rO   rQ   s     r   rS   z"SSHExtension.default_payload_class  rT   r   Nr   r   r   r
   r@   rU   rS   r   r   r   r)  r)    sZ        $iikk9==%yy{{I>>K
" " " " "r   r)  c                   \    e Zd Z edde           eddd           edg e          gZdS )
SSHExtInfor   rr   nr_extensionsN
extensions)rE   )	r   r   r   r   r   r   r   r)  rU   r   r   r   r/  r/    sL        fa!566ot|DDDb,77KKKr   r/  c                   *    e Zd Z edde          gZdS )SSHNewCompressr   rk   Nr   r   r   r   r3  r3    s'        fa!566KKKr   r3  c                   @    e Zd Z ed e            e          gZd ZdS )SSHPublicKeyEd25519keyc                     t           j        S rH   rO   rQ   s     r   rS   z)SSHPublicKeyEd25519.default_payload_class  rT   r   Nr-  r   r   r   r5  r5    A        E99;;	22K" " " " "r   r5  s   ssh-ed25519c                   @    e Zd Z ed e            e          gZd ZdS )SSHPublicKeyEd448r6  c                     t           j        S rH   rO   rQ   s     r   rS   z'SSHPublicKeyEd448.default_payload_class  rT   r   Nr-  r   r   r   r:  r:    r8  r   r:  s	   ssh-ed448c                   @    e Zd Z ed e            e          gZd ZdS )SSHSignatureEd25519r6  c                     t           j        S rH   rO   rQ   s     r   rS   z)SSHSignatureEd25519.default_payload_class  rT   r   Nr-  r   r   r   r=  r=    r8  r   r=  c                   @    e Zd Z ed e            e          gZd ZdS )SSHSignatureEd448r6  c                     t           j        S rH   rO   rQ   s     r   rS   z'SSHSignatureEd448.default_payload_class  rT   r   Nr-  r   r   r   r@  r@    r8  r   r@     )sport)dportN)@__doc__scapy.configr   scapy.compatr   scapy.fieldsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   scapy.packetr   r   r   scapy.layers.inetr   r   r!   r.   r@   rW   r_   rd   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)  r/  r3  r5  r:  r=  r@  r   r   r   <module>rK     s          " " " " " "                                 = < < < < < < < < < ! ! ! ! ! !    <       n   "A A A A AK A A A" " " " " " " "
 
 
 
 
; 
 
 
" " " " "v " " "" " " " "F " " "## # 	#
 #  # # # # # # # #  "!#" "##$ "%#& !'#*  +#, 	"!+&''!!	"E# # # N < < <! ! ! ! !& ! ! !@N N N N N N N N   O O O O Ok O O O
M M M M MK M M M
M M M M MK M M M
" " " " "V " " "" " " " "6 " " "" " " " "6 " " "       & b 
        b     6    !b     F    "b 
        %a     v    $a 
    F   : !a 
        a 
    f    #a 
    v    $a 
" " " " "6 " " "        a 
    V    "a 
" " " " "& " " " #6 " " " " " " " " !2 " " " " "& " " " #6 " " " " " " " " !2  C    sCr " " " " CB      r   