
    hO                        d dl Z d dlmZmZ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 d dlmZ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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	e e f                   Z!d Z" G d  d!e          Z# G d" d#e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* G d0 d1e%          Z+d2d3d4d5Z, G d6 d7e%          Z- G d8 d9e%          Z. G d: d;e%          Z/ G d< d=e%          Z0i d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`daiZ1 G db dce          Z2 G dd dee%          Z3 G df dge%          Z4 G dh die%          Z5 G dj dke%          Z6 G dl dme%          Z7dndodpZ8 G dq dre%          Z9 G ds dte%          Z: G du dve%          Z; G dw dxe%          Z< G dy dze%          Z= G d{ d|e%          Z> G d} d~e%          Z? G d de%          Z@ G d de%          ZA G d de%          ZB G d de%          ZC G d de%          ZD G d de%          ZE G d de%          ZF G d de%          ZG G d de%          ZH G d de%          ZI G d de%          ZJ G d de%          ZK G d de%          ZL G d de          ZM G d de          ZN G d de%          ZO G d de%          ZP G d de%          ZQe6e9eJeKeLe;eCe=e5eBeDe)eAe4dZRi d`e'de+de7de:dBe*dXeJdVeKdeOdHePdPeQdFe0de<de3d@eHdeGdZe>deEeFeIe(e?e@e-e/dZS G d de$          ZT G d de$          ZU eeeTd            eeeUd           dS )    N)OptionalCallableAnyTuple)	ByteFieldCharEnumFieldFieldFieldLenFieldFieldListFieldIntEnumFieldPacketListField
ShortFieldSignedIntFieldSignedShortFieldStrFieldStrLenFieldStrNullField)Packetbind_layers)TCP)
TCPSessionAuthenticationOkAuthenticationKerberosV4AuthenticationKerberosV5AuthenticationCleartextPasswordAuthenticationCryptPasswordAuthenticationMD5PasswordAuthenticationSCMCredentialAuthenticationGSSAuthenticationGSSContinueAuthenticationSSPIAuthenticationSASLAuthenticationSASLContinueAuthenticationSASLFinal)r                           	   
         c                   ,    e Zd ZdZ edd          gZdS )	KeepAlivez
Keep Alivelenr(   N__name__
__module____qualname__namer   fields_desc     Z/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/postgres.pyr2   r2   4   s)        Dua  KKKr;   r2   c                   F    e Zd ZdZ eddd           edd          gZdS )
SSLRequestzSSL request code messagelengthNIfmtrequest_codei/)r5   r6   r7   r8   r
   r   r9   r:   r;   r<   r>   r>   ;   s=        %Dh#...~x00KKKr;   r>   c                   (     e Zd ZdZ fdZd Z xZS )_DictStrFieldzDTakes a dictionary as an argument and packs back into a byte string.c                 $   t          |t                    r|S t          |t                    r;t                      }|                                D ]\  }}||dz   |z   dz   z  }|dz   S t	          t
          |                               ||          S )N    )
isinstancebytesdictitemssuperrE   i2m)selfpktxresultkv	__class__s         r<   rM   z_DictStrField.i2mF   s    a 	Ha 	:WWF		 4 41!g+/G33G##--11#q999r;   c                 P    |dS t          |                     ||                    S Nr   )r3   rM   )rN   rO   rP   s      r<   i2lenz_DictStrField.i2lenQ   s(    91488C##$$$r;   )r5   r6   r7   __doc__rM   rW   __classcell__rT   s   @r<   rE   rE   C   sM        NN	: 	: 	: 	: 	:% % % % % % %r;   rE   c                   x    e Zd ZdZ eddddd            edd	           ed
d           edd          gZdS )StartupzStartup Request Packetr3   Noptionsr@   c                     |dz   S Nr,   r:   rO   rP   s     r<   <lambda>zStartup.<lambda>\   s    QQRU r;   	length_ofrB   adjustprotocol_version_majorr'   protocol_version_minorr   )r5   r6   r7   r8   r
   r   rE   r9   r:   r;   r<   r\   r\   X   sn        #D49#>R>R	
 	
 	
 	
+Q//
+Q//i&&KKKr;   r\   c                   :     e Zd ZdZddgZddd f fd	Zd Z xZS )	_FieldsLenFieldz@Same as FieldLenField but takes a tuple of fields for length_of.rc   rd   NHc                     |S Nr:   r`   s     r<   ra   z_FieldsLenField.<lambda>o   s    a r;   c                 x    t          t          |                               |||           || _        || _        d S rk   )rL   rh   __init__rc   rd   )rN   r8   defaultrc   rB   rd   rT   s         r<   rm   z_FieldsLenField.__init__i   s9     	ot$$--dGSAAA"r;   c                     |m|k| j         >d}| j         D ]3}|                    |          \  }}||                    ||          z  }4nt          d          |                     ||          }n|d}|S )Nr   z.Field should have either length_of or count_of)rc   getfield_and_valrW   
ValueErrorrd   )rN   rO   rP   flength_of_fieldfldfvals          r<   rM   z_FieldsLenField.i2mv   s    9~)'+~ . .O # 4 4_ E EIC3---AA. !!QRRRC##AAYAr;   )r5   r6   r7   rX   	__slots__rm   rM   rY   rZ   s   @r<   rh   rh   d   sj        JJh'I            r;   rh   c                    d}|r
|dd         }|| j         v r| j         |         S |dd         dk    rWt          |          dk    rDt          j        d|dd                   d         }|dk    rt          S |dk    rt
          S t          S d S )	Nr;   r   r%   rG   r(   !Ir'   r,   )cls_mappingr3   structunpackr2   r>   r\   )rO   lstcurremainkeyr?   s         r<   determine_pg_fieldr      s    
C QqSk
cos##	!		CKK1$4$4tVAaC[11!4Q;;q[[Ntr;   c                   $     e Zd Z fdZd Z xZS )ByteTagFieldc                 t    t          t          |                               dt          |                     d S )Ntag)rL   r   rm   ord)rN   rn   rT   s     r<   rm   zByteTagField.__init__   s1     	lD!!**5#g,,?????r;   c                 *    t          | j                  S rk   )r   rn   )rN   s    r<   randvalzByteTagField.randval   s    4<   r;   )r5   r6   r7   rm   r   rY   rZ   s   @r<   r   r      sL        @ @ @ @ @
! ! ! ! ! ! !r;   r   c                   F    e Zd ZdZ edg e          gZed             ZdS )_BasePostgreszRegular packetcontents)next_cls_cbc                     |rU|dd         dk    rGt          j        d|dd                   d         }|dk    rt          |          S t          |          S  | |          S )Nr   r%   rG   rx   r'   r,   )rz   r{   r>   r\   )clsdatametadatar?   s       r<   tcp_reassemblez_BasePostgres.tcp_reassemble   sk     	D1I((]4ac33A6F{{!$'''t}}$3t99r;   N)	r5   r6   r7   r8   r   r   r9   classmethodr   r:   r;   r<   r   r      sL        D"?:r?QRRRSK  [  r;   r   c                       e Zd Zd ZdS )_ZeroPaddingc                 
    d|fS )Nr;   r:   )rN   ps     r<   extract_paddingz_ZeroPadding.extract_padding   s    Avr;   N)r5   r6   r7   r   r:   r;   r<   r   r      s#            r;   r   c                   N    e Zd ZdZ edddd           eddd	 
          gZdS )SignedIntStrPairz
Bytes datar3   r   ivaluerB   rc   r   Nc                 *    | j         dk    r| j         ndS rV   r3   rO   s    r<   ra   zSignedIntStrPair.<lambda>   s    SWq[[#''a r;   length_from)r5   r6   r7   r8   r
   r   r9   r:   r;   r<   r   r      sO        DeQC7;;;D&O&O	
 	
 	
KKKr;   r   c                       e Zd ZdZ ed           eddddd            ed	d
e           eddd           gZ	dS )AuthenticationzAuthentication Request   Rr3   Noptionalr@   c                     |dz   S r_   r:   r`   s     r<   ra   zAuthentication.<lambda>       aRSe r;   rb   methodr   )rn   enumc                     | j         dz
  S r_   r   r   s    r<   ra   zAuthentication.<lambda>       cgk r;   r   )
r5   r6   r7   r8   r   r
   r   
AUTH_CODESr   r9   r:   r;   r<   r   r      sx        #DT4:3?S?S	
 	
 	
 	Xqz:::J2I2IJJJKKKr;   r   c                   v    e Zd ZdZ ed           eddddd            ed	d
           edd
          gZdS )ParameterStatuszParameter Status   Sr3   Nr@   )	parameterr   c                     |dz   S Nr(   r:   r`   s     r<   ra   zParameterStatus.<lambda>   
    !a% r;   rB   rc   rd   r    r   r5   r6   r7   r8   r   r
   r   r9   r:   r;   r<   r   r      s{        DT,''	
 	
 	
 		
 	
 		
 	
KKKr;   r   c                   `    e Zd ZdZ ed           eddddd            edd          gZdS )	QueryzSimple Query   Qr3   Nqueryr@   c                     |dz   S Nr)   r:   r`   s     r<   ra   zQuery.<lambda>   s
    1q5 r;   rb   r   r:   r;   r<   r   r      s[        DT47<P<P	
 	
 	
 	Wd##KKKr;   r   c                   f    e Zd ZdZ ed           eddddd            edd	d
           gZdS )CommandCompletezCommand Completion Response   Cr3   Ncmdtagr@   c                     |dz   S r   r:   r`   s     r<   ra   zCommandComplete.<lambda>       APQE r;   rb   r   c                     | j         dz
  S r   r   r   s    r<   ra   zCommandComplete.<lambda>       #'A+ r;   r   r5   r6   r7   r8   r   r
   r   r9   r:   r;   r<   r   r      sd        (DT48=Q=Q	
 	
 	
 	Hb.E.EFFFKKKr;   r   c                   p    e Zd ZdZ ed           eddd           edd           ed	d          gZdS )
BackendKeyDatazBackend Key Data   Kr3   Nr@   rA   pidr   r   )r5   r6   r7   r8   r   r
   r   r9   r:   r;   r<   r   r      sY        DTeTs+++ua  ua  	KKKr;   r   InFailedTransactionIdleInTransaction)   E   I   Tc                   X    e Zd ZdZ ed           edd           edde          gZdS )ReadyForQueryzReady Signal   Zr3   r*   statusr   N)	r5   r6   r7   r8   r   r   r   STATUS_TYPEr9   r:   r;   r<   r   r   
  sG        DTua  hk22KKKr;   r   c            
           e Zd ZdZ edd           edd           edd           edd           edd           ed	d           ed
d          gZdS )ColumnDescriptionzColumn DescriptioncolNtableoidr   colnotypeoidtypelentypemodformat)r5   r6   r7   r8   r   r   r   r9   r:   r;   r<   r   r     s        DUD!!z1%%!$$y!$$A&&y!$$1%%KKKr;   r   c            
           e Zd ZdZ ed           eddddd            ed	d
           edg ed d           gZ	dS )RowDescriptionzRow Descriptionr   r3   Nr@   colsc                     |dz   S Nr*   r:   r`   s     r<   ra   zRowDescription.<lambda>%  
    !a% r;   r   	numfieldsr   c                     | j         S rk   r   r   s    r<   ra   zRowDescription.<lambda>,      3= r;   c                     | j         dz
  S r   r   r   s    r<   ra   zRowDescription.<lambda>-      CGaK r;   )pkt_cls
count_fromr   )
r5   r6   r7   r8   r   r
   r   r   r   r9   r:   r;   r<   r   r      s        DT4SF;O;O	
 	
 	
 	a((%00//	
 	
 	
KKKr;   r   c            	       ~    e Zd ZdZ ed           eddddd            ed	d
           edg ed           gZdS )DataRowzData Row   Dr3   Nr@   r   c                 &    t          |           dz
  S Nr%   r   r`   s     r<   ra   zDataRow.<lambda>7      #c((UV, r;   r   r   r   c                     | j         S rk   r   r   s    r<   ra   zDataRow.<lambda>>  r   r;   r   )	r5   r6   r7   r8   r   r
   r   r   r9   r:   r;   r<   r   r   2  s~        DT4SF;V;V	
 	
 	
 	k1%%00		
 	
 	
KKKr;   r   r   Severity   VSeverityNonLocalizedr   Code   MMessager   Detail   HHint   PPosition   pInternalPosition   qInternalQuery   WWhere   s
SchemaName   t	TableName   c
ColumnName   dDataTypeName   nConstraintName   FFile   LLiner   Routinec                        e Zd Z fdZ xZS )ErrorResponseFieldc                     t          t          |                               ||          }|dd         }t                              ||          |dd         fS )z$Unpack into a tuple of Field, Value.r   r%   N)rL   r  m2iERROR_FIELDget)rN   rO   rP   r   i_coderT   s        r<   r  zErrorResponseField.m2i[  sQ    $d++//Q771Q3//12277r;   )r5   r6   r7   r  rY   rZ   s   @r<   r  r  Z  s8        8 8 8 8 8 8 8 8 8r;   r  c            
           e Zd ZdZ ed           eddddd            edg  ed	d          d
            edd          gZ	dS )ErrorResponsezError Responser   r3   Nerror_fieldsr@   c                     |dz   S r   r:   r`   s     r<   ra   zErrorResponse.<lambda>g  s    RSVWRW r;   rb   r   c                     | j         dz
  S r   r   r   s    r<   ra   zErrorResponse.<lambda>m  r   r;   r   
terminator
r5   r6   r7   r8   r   r
   r   r  r   r9   r:   r;   r<   r  r  b  s        DT4>sCWCW	
 	
 	
 	w--//		
 	
 	
 		,%%KKKr;   r  c                   @    e Zd ZdZ ed           edd          gZdS )	TerminatezTermination Request   Xr3   r(   Nr5   r6   r7   r8   r   r   r9   r:   r;   r<   r"  r"  s  s6         DTua  KKKr;   r"  c                   b    e Zd ZdZ ed           edddd           eddd 	          gZdS )
_TodozUnsupported message   ?r3   Nr@   bodyr   c                     | j         dz
  S r   r   r   s    r<   ra   z_Todo.<lambda>  r   r;   r   r   r:   r;   r<   r&  r&  {  sU         DTeTsf===FD.E.EFFFKKKr;   r&  c                   L   e Zd ZdZ ed           eddddd            ed	d
           edd
           edddd           edg  ed
d          d            edddd           e	dg e
d            edddd           edg  ed
d          d           g
ZdS )BindzBind Requestr'  r3   Nr@   r(  c                 &    t          |           dz
  S r   r   r`   s     r<   ra   zBind.<lambda>  r   r;   r   destinationr   	statementcodes_countr   ri   codesrB   count_ofc                     | j         S rk   )r/  r   s    r<   ra   zBind.<lambda>  s    3? r;   r   values_countvaluesc                     | j         S rk   )r4  r   s    r<   ra   zBind.<lambda>  s	    3CS r;   results_countresultsc                     | j         S rk   )r7  r   s    r<   ra   zBind.<lambda>  s	    SEV r;   )r5   r6   r7   r8   r   r
   r   r   r   r   r   r9   r:   r;   r<   r+  r+    s,       DT4SF;V;V	
 	
 	
 	]B''["%%mQC'BBBRB**7R7R	
 	
 	
 	naS8DDDb*7S7S	
 	
 	
 	oqcIFFFr::b!,,9V9V	
 	
 	
!KKKr;   r+  c                   @    e Zd ZdZ ed           edd          gZdS )BindCompletezBind Complete   2r3   r(   Nr$  r:   r;   r<   r;  r;    6        DTua  KKKr;   r;  PreparedStatementPortal)r   r   c                   z    e Zd ZdZ ed           eddddd            ed	d
e           edd          gZ	dS )ClosezClose Requestr   r3   Nr@   r.  c                     |dz   S r   r:   r`   s     r<   ra   zClose.<lambda>      qSTu r;   r   
close_typer   r   r   
r5   r6   r7   r8   r   r
   r   CLOSE_DESCRIBE_TYPEr   r9   r:   r;   r<   rA  rA    sv        DT4SK@T@T	
 	
 	
 	lD/BCCC	
 	

KKKr;   rA  c                   @    e Zd ZdZ ed           edd          gZdS )CloseCompletezClose Complete   3r3   r(   Nr$  r:   r;   r<   rI  rI    s6        DTua  KKKr;   rI  c                   z    e Zd Zd Z ed           eddddd            edd	e
           edd          gZ	dS )Describer   r3   Nr@   r.  c                     |dz   S r   r:   r`   s     r<   ra   zDescribe.<lambda>  rC  r;   r   rD  r   rE  r   rF  r:   r;   r<   rL  rL    sp        DT4SK@T@T	
 	
 	
 	lD/BCCC["%%KKKr;   rL  c                   @    e Zd ZdZ ed           edd          gZdS )EmptyQueryResponsezEmpty Query Responser   r3   r(   Nr$  r:   r;   r<   rO  rO    s6        !DTua  KKKr;   rO  c                   @    e Zd ZdZ ed           edd          gZdS )FlushzFlush Requestr   r3   r(   Nr$  r:   r;   r<   rQ  rQ    r=  r;   rQ  c                   @    e Zd ZdZ ed           edd          gZdS )NoDatazNo Data Responser  r3   r(   Nr$  r:   r;   r<   rS  rS    s6        DTua  KKKr;   rS  c                   @    e Zd ZdZ ed           edd          gZdS )ParseCompletezParse Complete Response   1r3   r(   Nr$  r:   r;   r<   rU  rU    s6        $DTua  KKKr;   rU  c                   @    e Zd ZdZ ed           edd          gZdS )PortalSuspendedzPortal Suspended Responser  r3   r(   Nr$  r:   r;   r<   rX  rX    s6        &DTua  KKKr;   rX  c                   @    e Zd ZdZ ed           edd          gZdS )SynczSync Requestr   r3   r(   Nr$  r:   r;   r<   rZ  rZ    s6        DTua  KKKr;   rZ  c                       e Zd ZdZ ed           edddd            edd	           ed
d	           edddd           edg  edd          d           gZ	dS )ParsezParse Requestr   r3   Nr@   c                 &    t          |           dz
  S r   r   r`   s     r<   ra   zParse.<lambda>  s    #c((Q, r;   )rB   rd   r-  r   r   num_param_dtypesri   paramsr1  paramc                     | j         S rk   )r^  r   s    r<   ra   zParse.<lambda>  s	    3#7 r;   r   )
r5   r6   r7   r8   r   r
   r   r   r   r9   r:   r;   r<   r\  r\    s        DTeTs3N3NOOO]B''Wb!!($C(KKKN7D))77		
 	
 	
KKKr;   r\  c                   v    e Zd ZdZ ed           eddddd            edd	           ed
d          gZdS )ExecutezExecute Requestr   r3   Nr@   portalc                     |dz   S )Nr-   r:   r`   s     r<   ra   zExecute.<lambda>  r   r;   r   r   rowsr   )	r5   r6   r7   r8   r   r
   r   r   r9   r:   r;   r<   rc  rc    sr        DT4SH=Q=Q	
 	
 	
 		
 	
 	vq!!
KKKr;   rc  c                   j    e Zd ZdZdZ ed           eddddd 	           eddd
           gZdS )PasswordMessagez
    Identifies the message as a password response.
    Note that this is also used for GSSAPI, SSPI and SASL
    response messages. The exact message type can be deduced
    from the context.
    Password Request Responser   r3   Nr@   passwordc                     |dz   S r   r:   r`   s     r<   ra   zPasswordMessage.<lambda>&  r   r;   r   c                     | j         dz
  S r   r   r   s    r<   ra   zPasswordMessage.<lambda>(  r   r;   r   )	r5   r6   r7   rX   r8   r   r
   r   r9   r:   r;   r<   rh  rh    sp          'DT4SJ?S?S	
 	
 	
 	J2I2IJJJKKKr;   rh  c            
           e Zd ZdZ ed           eddddd            edg  ed	d          d
            edd          gZ	dS )NoticeResponsezNotice Response   Nr3   Nnotice_fieldsr@   c                     |dz   S r   r:   r`   s     r<   ra   zNoticeResponse.<lambda>1  s    STWXSX r;   rb   r   c                     | j         dz
  S r   r   r   s    r<   ra   zNoticeResponse.<lambda>7  r   r;   r   r  r   r:   r;   r<   rn  rn  ,  s        DT4?DXDX	
 	
 	
 	w--//		
 	
 	
 		,%%KKKr;   rn  c                       e Zd ZdZ ed           eddddd            ed	d
           edd           edd          gZdS )NotificationResponseri     Ar3   Nr@   )channelpayloadc                     |dz   S r_   r:   r`   s     r<   ra   zNotificationResponse.<lambda>F  r   r;   r   
process_idr   rv  rw  )	r5   r6   r7   r8   r   rh   r   r   r9   r:   r;   r<   rt  rt  =  s|        &DT,''	
 	
 	
 	|Q''Y%%Y%%KKKr;   rt  c                       e Zd ZdZ ed           eddddd            ed	d
           edd
           edd          gZdS )NegotiateProtocolVersionz#Negotiate Protocol Version Response   vr3   Nr@   optionc                     |dz   S )Nr0   r:   r`   s     r<   ra   z!NegotiateProtocolVersion.<lambda>S  s    APRF r;   r   min_minor_versionr   unrecognized_options)	r5   r6   r7   r8   r   r
   r   r   r9   r:   r;   r<   r{  r{  N  s{        0DT4SH=R=R	
 	
 	
 	*A..-q11Xt$$KKKr;   r{  c                       e Zd ZdZ ed           eddddd            ed	dd
           eddd           gZdS )FunctionCallResponsezFunction Call Responser   r3   Nr@   rQ   c                     |dz   S r_   r:   r`   s     r<   ra   zFunctionCallResponse.<lambda>`  r   r;   r   
result_len)rc   c                     | j         S rk   )r  r   s    r<   ra   zFunctionCallResponse.<lambda>c  s    CN r;   r   r   r:   r;   r<   r  r  [  sx        #DT4SH=Q=Q	
 	
 	
 	lDH===Hd0J0JKKKKKKr;   r  c                       e Zd ZdZ ed           eddddd            ed	d
           edg  edd          d           gZ	dS )ParameterDescriptionzParameter Descriptionr  r3   Nr@   dtypesc                     |dz   S r   r:   r`   s     r<   ra   zParameterDescription.<lambda>l  r   r;   r   
dtypes_lenr   dtypec                     | j         S rk   )r  r   s    r<   ra   zParameterDescription.<lambda>s  s    3> r;   r   )
r5   r6   r7   r8   r   r
   r   r   r   r9   r:   r;   r<   r  r  g  s        "DT4SH=Q=Q	
 	
 	
 	q))N7D))11		
 	
 	
KKKr;   r  c                   f    e Zd ZdZ ed           eddddd            eddd	 
          gZdS )CopyDataz	Copy Datar
  r3   Nr@   r   c                     |dz   S r   r:   r`   s     r<   ra   zCopyData.<lambda>}  r   r;   r   c                     | j         dz
  S r   r   r   s    r<   ra   zCopyData.<lambda>  r   r;   r   r   r:   r;   r<   r  r  x  sd        DT4SF;O;O	
 	
 	
 	FD.E.EFFFKKKr;   r  c                   @    e Zd ZdZ ed           edd          gZdS )CopyDonez	Copy Doner  r3   r(   Nr$  r:   r;   r<   r  r    s6        DTua  KKKr;   r  c                   f    e Zd ZdZ ed           eddddd            eddd	 
          gZdS )CopyFailzCopy Fail Reason   fr3   Nr@   reasonc                     |dz   S r   r:   r`   s     r<   ra   zCopyFail.<lambda>  r   r;   r   c                     | j         dz
  S r   r   r   s    r<   ra   zCopyFail.<lambda>  s    CGaK r;   r   r   r:   r;   r<   r  r    sd        DT4SH=Q=Q	
 	
 	
 	Hd0G0GHHHKKKr;   r  c                   n    e Zd ZdZ edd           edd           edd           edd          gZd	S )
CancelRequestzCancel Requestr3      rC   i.ry  r   secretNr4   r:   r;   r<   r  r    sV        Dub!!~x00|Q''x##	KKKr;   r  c                   B    e Zd ZdZ edd           edd          gZdS )GSSENCRequestzGSSENC Requestr3   r,   rC   i0Nr4   r:   r;   r<   r  r    s8        Dua  ~x00KKKr;   r  c                       e Zd ZdZ ed           eddddd            ed	d
           edd
           edg  ed	d          d           gZ	dS )CopyInResponsezCopy in Response   Gr3   Nr@   r   c                     |dz   S Nr+   r:   r`   s     r<   ra   zCopyInResponse.<lambda>  r   r;   r   r   r   ncolsc                     | j         S rk   r  r   s    r<   ra   zCopyInResponse.<lambda>      39 r;   r   
r5   r6   r7   r8   r   r
   r   r   r   r9   r:   r;   r<   r  r    s        DT4SF;O;O	
 	
 	
 		(A
7AJx&&,,		
 	
 	
KKKr;   r  c                       e Zd ZdZ ed           eddddd            ed	d
           edd
           edg  ed	d          d           gZ	dS )CopyOutResponsezCopy out Responser   r3   Nr@   r   c                     |dz   S r  r:   r`   s     r<   ra   zCopyOutResponse.<lambda>  r   r;   r   r   r   r  c                     | j         S rk   r  r   s    r<   ra   zCopyOutResponse.<lambda>  r  r;   r   r  r:   r;   r<   r  r    s        DT4SF;O;O	
 	
 	
 		(A
7AJx&&,,		
 	
 	
KKKr;   r  c                       e Zd ZdZ ed           eddddd            ed	d
           edd
           edg  ed	d          d           gZ	dS )CopyBothResponsezCopy both Responser  r3   Nr@   r   c                     |dz   S r  r:   r`   s     r<   ra   zCopyBothResponse.<lambda>  r   r;   r   r   r   r  c                     | j         S rk   r  r   s    r<   ra   zCopyBothResponse.<lambda>  r  r;   r   r  r:   r;   r<   r  r    s        DT4SF;O;O	
 	
 	
 		(A
7AJx&&,,		
 	
 	
KKKr;   r  )   Br   r
  r  r  r   r   r   r  r   r   r   r   r#  r   r<  rJ  r  r   r   r|  ro  )ru  r  r   rV  r  r   r   c                   (    e Zd ZeZed             ZdS )PostgresFrontendc                 X    t          |          }|j        rd|j        d         v r|S d S d S )NrZ  )r  r   r   r   r   msgss       r<   r   zPostgresFrontend.tcp_reassemble  s?    %%= 	Vt}R'888K	 	88r;   N)r5   r6   r7   FRONTEND_TAG_TO_PACKET_CLSry   r   r   r:   r;   r<   r  r    s2        ,K  [  r;   r  c                   (    e Zd ZeZed             ZdS )PostgresBackendc                 X    t          |          }|j        rd|j        d         v r|S d S d S )Nr   r  )r  r   r  s       r<   r   zPostgresBackend.tcp_reassemble  s?    t$$= 	_b0AAAK	 	AAr;   N)r5   r6   r7   BACKEND_TAG_TO_PACKET_CLSry   r   r   r:   r;   r<   r  r    s2        +K  [  r;   r  i8  )dport)sport)Vrz   typingr   r   r   r   scapy.fieldsr   r   r	   r
   r   r   r   r   r   r   r   r   r   scapy.packetr   r   scapy.layers.inetr   scapy.sessionsr   r   r2   r>   rE   r\   intrh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r&  r+  r;  rG  rA  rI  rL  rO  rQ  rS  rU  rX  rZ  r\  rc  rh  rn  rt  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r:   r;   r<   <module>r     sA                                            - , , , , , , , ! ! ! ! ! ! % % % % % % !!($"$"$! 
"              % % % % %H % % %*	 	 	 	 	f 	 	 	    eCHo   D  $! ! ! ! !9 ! ! !    FJ        6   
    |   	 	 	 	 	\ 	 	 	    l   ,    L       l       \     

     L   
 
 
 
 
 
 
 
    \   $    l   $*
  	& 	)	
 	( 	& 	* 	
 	/ 	' 	, 	+ 	, 	. 	
  	&!" 	&#$ 	)% ,8 8 8 8 8 8 8 8    L   "           L       <   0    <    1AA     L       L   	 	 	 	 	| 	 	 	           L       \       L       l       <       L   "    l       l   $    \   "    <   "
 
 
 
 
| 
 
 
	 	 	 	 	< 	 	 	    <   "    |       |       |       F       F       \   $    l   $    |   & 












  ".. 	, 	-	
 	/ 	( 	( 	. 	/ 	
 	' 	
 	- 	
 	
"  	&!" 	.#$ 





1   8    }       m    C! . . . . C - - - - - -r;   