
    hǅ                        d Z ddl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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! ddd	Z"d
dddZ#ddd	Z$ddddZ%ddddZ&dddddddZ'ddd d!d"d#dZ(g d$Z)i d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFi dGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxZ*dydzd{dZ+d|d}d~ddZ,d|ddddddddZ-i ddddddddddddddddddddddddddddddddddZ.i ddddddddddddddddddddddddddddēddƓddȓddʓddddΜZ/dddќZ0d҄ Z1 G dӄ de          Z2 G dՄ de          Z3 G dׄ de          Z4 G dل de          Z5 e1e5          Z6 G dۄ de          Z7 e1e7          Z8 G d݄ de          Z9 e1e9          Z: G d߄ de          Z; e1e;          Z< G d de          Z= e1e=          Z> G d de          Z? G d de          Z@ G d de          ZA e1eA          ZB G d de          ZC e1eC          ZD G d de          ZE e1eE          ZF G d de          ZG e1eG          ZH G d de          ZI e1eI          ZJdddddZKeCeDgeEeFgeGeHgeIeJgdZL G d de          ZM e1eM          ZNdeMeNgiZOi dddeOdddddddd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#ZPd$d%d&d'd(d)d*d+d,d-d.
ZQg d/ZR G d0 d1e          ZS e1eS          ZTde!e!giZU G d2 d3e          ZV e1eV          ZW G d4 d5e          ZX e1eX          ZYd6 ZZ G d7 d8e          Z[ e1e[          Z\ G d9 d:e          Z] G d; d<e          Z^ e1e^          Z_ G d= d>e          Z` e1e`          Za G d? d@e          Zb G dA dBe          Zc G dC dDe          Zd G dE dFe          Ze e1ee          Zf G dG dHe          Zg G dI dJe          Zh e1eh          Zi G dK dLe          Zj e1ej          Zk G dM dNe          Zl e1el          Zm G dO dPe          Zn e1en          Zo G dQ dRe          Zp e1ep          Zq G dS dTe          Zr e1er          Zs G dU dVe          Zt e1et          Zu G dW dXe          Zv e1ev          Zw G dY dZe          Zx G d[ d\e          Zy e1ey          Zz G d] d^e2          Z{i de[e\gde]e]gde^e_gde`eagdebebgdecedgdeeefgdegeggdeheigdejekgdelemgdeneogdepeqgderesgdeteugdevewgdexexgeyezge{e{geVeWgdΜZ| G d_ d`e          Z} e1e}          Z~e}e~dќZ G da dbe          Z G dc dde          ZdS (e  a  
Opc Data Access

Spec: Google 'OPCDA3.00.pdf'

RPC PDU encodings:
- DCE 1.1 RPC: https://pubs.opengroup.org/onlinepubs/9629399/toc.pdf
- http://pubs.opengroup.org/onlinepubs/9629399/chap12.htm

DCOM Remote Protocol.
[MS-DCOM]: Distributed Component Object Model (DCOM) Remote Protocol
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/4a893f3d-bd29-48cd-9f43-d9777a4415b0
XXX TODO: does not appear to have been linked to RPC
    N)conf)BitEnumFieldByteEnumField	ByteFieldConditionalFieldFieldFieldLenField
FlagsFieldIntEnumFieldIntFieldLEIntEnumField
LEIntFieldLELongFieldLEShortFieldMultipleTypeFieldPacketFieldPacketLenFieldPacketListFieldShortEnumField
ShortFieldStrFieldStrFixedLenFieldStrLenField	UUIDField_FieldContainer_PacketField)Packet)NTLM_HeaderOPC_DS_CACHEOPC_DS_DEVICE)      
OPC_BRANCHOPC_LEAFOPC_FLAT)r!   r"      OPC_NS_HIERARCHIALOPC_NS_FLATOPC_BROWSE_UPOPC_BROWSE_DOWNOPC_BROWSE_TO
OPC_NOENUM
OPC_ANALOGOPC_ENUMERATED)r   r!   r"   OPC_STATUS_RUNNINGOPC_STATUS_FAILEDOPC_STATUS_NOCONFIGOPC_STATUS_SUSPENDEDOPC_STATUS_TESTOPC_STATUS_COMM_FAULT)r!   r"   r&            OPC_ENUM_PRIVATE_CONNECTIONSOPC_ENUM_PUBLIC_CONNECTIONSOPC_ENUM_ALL_CONNECTIONSOPC_ENUM_PRIVATEOPC_ENUM_PUBLICOPC_ENUM_ALL)firstFragmentlastFragmentpendingCancelreservedconcurrentMultiplexingdidNotExecutemaybe
objectUuidirpc_s_fault_object_not_foundi1rpc_s_call_cancelleditrpc_s_fault_addr_erroriurpc_s_fault_context_mismatchivrpc_s_fault_fp_div_by_zeroiwrpc_s_fault_fp_errorixrpc_s_fault_fp_overflowiyrpc_s_fault_fp_underflowizrpc_s_fault_ill_insti{rpc_s_fault_int_div_by_zeroi|rpc_s_fault_int_overflowi}rpc_s_fault_invalid_boundi~rpc_s_fault_invalid_tagirpc_s_fault_pipe_closedirpc_s_fault_pipe_comm_errorirpc_s_fault_pipe_disciplineirpc_s_fault_pipe_emptyirpc_s_fault_pipe_memoryirpc_s_fault_pipe_orderirpc_s_fault_remote_no_memoryirpc_s_fault_unspecirpc_s_fault_user_definedirpc_s_fault_tx_open_failedinrpc_s_fault_codeset_conv_erroriprpc_s_fault_no_client_stubi  nca_s_fault_int_div_by_zeroi  nca_s_fault_addr_errori  nca_s_fault_fp_div_zeroi  nca_s_fault_fp_underflowi  nca_s_fault_fp_overflowi  nca_s_fault_invalid_tagi  nca_s_fault_invalid_boundi  nca_s_fault_canceli  nca_s_fault_ill_instnca_s_fault_fp_errornca_s_fault_int_overflownca_s_fault_pipe_emptynca_s_fault_pipe_closednca_s_fault_pipe_ordernca_s_fault_pipe_disciplinenca_s_fault_pipe_comm_errornca_s_fault_pipe_memorynca_s_fault_context_mismatchnca_s_fault_remote_no_memoryncs_s_fault_user_definednca_s_fault_tx_open_failednca_s_fault_codeset_conv_errornca_s_fault_object_not_foundnca_s_fault_no_client_stub)i  i  i  i  i  i  i  i  i  i  i!  i"  i#  i$  i%  
ACCEPTANCEUSER_REJECTIONPROVIDER_REJECTIONREASON_NOT_SPECIFIEDABSTRACT_SYNTAX_NOT_SUPPORTED(PROPOSED_TRANSFER_SYNTAXES_NOT_SUPPORTEDLOCAL_LIMIT_EXCEEDEDr   r!   r"   r&   TEMPORARY_CONGESTIONCALLED_PADDR_UNKNOWNPROTOCOL_VERSION_NOT_SUPPORTEDDEFAULT_CONTEXT_NOT_SUPPORTEDUSER_DATA_NOT_READABLENO_PSAP_AVAILABLE)r   r!   r"   r&   r5   r6   r7      i  nca_rpc_version_mismatchi	  nca_unspec_rejecti
  nca_s_bad_actidi  nca_who_are_you_failedi  nca_manager_not_enteredi nca_op_rng_errori 
nca_unk_ifi nca_wrong_boot_timei	 nca_s_you_crashedi nca_proto_errori nca_out_args_too_bigi nca_server_too_busyi nca_unsupported_typei  nca_invalid_pres_context_idi  nca_unsupported_authn_leveli  nca_invalid_checksumi   nca_invalid_crcREQUESTr!   PINGr"   RESPONSEr&   FAULTr5   WORKINGr6   NOCALLr7   REJECTr   ACK   	CI_CANCEL	   FACK
   
CANCEL_ACK   BIND   BIND_ACK   	BIND_NACK   ALTER_CONTEXT   ALTER_CONTEXT_RESP   SHUTDOWN	CO_CANCELORPHANEDAuth3)         NoneOsfDcePrivateKeyAuthenticationr   r!   c                 n    d  j         D             D ]}t          |t                    r|j        }t          |t                    rt          j        |_        Et          |t                    r:t                      	                    |j
        j        dz   |j
                  |_
        t          |t                    sUd|j                            dd                              dd          z   |_        t          j        |j                  |_         G  fdd           } j        dz   |_        |S )	z)
    Make all fields in a packet LE.
    c                 6    g | ]}|                                 S  )copy).0fs     X/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/opc_da.py
<listcomp>z_make_le.<locals>.<listcomp>  s     222AFFHH222    LE<> !c                   8    e Zd Z Z             j        dz   ZdS )_make_le.<locals>.LEPacketz (LE)N)__name__
__module____qualname__fields_descname)fldspkt_clss   r   LEPacketr     s&        wyy~'r   r   )r   
isinstancer   fldr   	FORMAT_LEuuid_fmtr   globalsgetclsr   r   fmtreplacestructStruct)r   r   r   r   s   `  @r   _make_ler      s<    32g1222D 	, 	,a)) 	Aa## 	,",AJJ<(( 	,IIMM!%.4"7??AEEAx(( 	,!%--R0088bAAAAE}QU++AH( ( ( ( ( ( ( (7 ( ( (  (4/HOr   c                       e Zd ZdZd Zd ZdS )AuthentificationProtocolauthentificationProtocolc                 
    d|fS Nr   r   selfps     r   extract_paddingz(AuthentificationProtocol.extract_padding      Avr   c                     | j         rEt          | j         d          r0| j         j        }|dk    r	 t          |         S # t          $ r Y nw xY wt
          j        S )N
authLengthr   )
underlayerhasattrr   _authentification_protocol	Exceptionr   	raw_layer)r   payloadr   s      r   guess_payload_classz,AuthentificationProtocol.guess_payload_class  sj    ? 	wtEE 	3JQ5jAA    D~s   = 
A
	A
N)r   r   r   r   r   r   r   r   r   r   r     s7        %D      r   r   c                       e Zd ZdZd ZdS ) OsfDcePrivateKeyAuthentificationr   c                 
    d|fS r   r   r   s     r   r   z0OsfDcePrivateKeyAuthentification.extract_padding+  r   r   Nr   r   r   r   r   r   r   r   r   r   '  s(        +D    r   r   c                       e Zd Zd Zd ZdS )	OPCHandlec                 4    t          j        | ||d           d S )N16s)r   __init__)r   r   defaults      r   r   zOPCHandle.__init__0  s    tT7E22222r   c                 
    d|fS r   r   r   s     r   r   zOPCHandle.extract_padding3  r   r   N)r   r   r   r   r   r   r   r   r   r   /  s2        3 3 3    r   r   c            	           e Zd ZdZ edddd           e eddd	          d
 fg eddd                     gZd Z	dS )LenStringPacketzlen string packetlengthr   dataH)	length_ofr   r   r"   r   c                     | j          S Nr  pkts    r   <lambda>zLenStringPacket.<lambda>>  s
    
N r   c                     | j         S r  r  r  s    r   r  zLenStringPacket.<lambda>?  s    CJ r   length_fromc                 
    d|fS r   r   r   s     r   r   zLenStringPacket.extract_paddingC  r   r   N)
r   r   r   r   r	   r   r   r   r   r   r   r   r   r   r   7  s        DhV===vr!444**, -K0F0FGGG	
 	
K    r   r   c                   ~    e Zd ZdZ ed ed          ej                   edd           edd          gZd Z	d	S )
SyntaxIdz	syntax IdinterfaceUUID 00010001000100010001000100010001r   versionMajorr   versionMinorc                 
    d|fS r   r   r   s     r   r   zSyntaxId.extract_paddingS  r   r   N)
r   r   r   r   r   str	FORMAT_BEr   r   r   r   r   r   r  r  J  ss        D	/33z??$.	0 	0 	0
>1%%
>1%%	K    r   r  c                   z    e Zd ZdZ edde           e edde          d            edde	          gZ
d Zd	S )
ResultElement
p_result_tresultContextNegotiationr   reasonc                     | j         dk    S )Nr   )r  r  s    r   r  zResultElement.<lambda>`  s    C$@A$E r   transferSyntaxz                    c                 
    d|fS r   r   r   s     r   r   zResultElement.extract_paddingd  r   r   N)r   r   r   r   r   
_defResultr   
_defReasonr   r  r   r   r   r   r   r  r  Z  s{        D11jAA!Z@@EE	G 	G$k8<<	K    r   r  c            	       |    e Zd ZdZ edd           edd           edd           edded 	          gZd
 Z	dS )
ResultListp_result_list_tnbResultr   rA   	reserved2
resultListNc                     | j         S r  )r#  r  s    r   r  zResultList.<lambda>s  s    cl r   
count_fromc                 
    d|fS r   r   r   s     r   r   zResultList.extract_paddingv  r   r   )
r   r   r   r   r   r   r   r  r   r   r   r   r   r!  r!  k  s|        D	*a  	*a  
;""dM#:#:	< 	< 	<	K    r   r!  c            
           e Zd ZdZ edd           edd           edd           edde           edded	 
          gZ	d Z
dS )ContextElementzcontext elementcontxtIdr   nbTransferSynrA   abstractSyntaxNr  c                     | j         S r  )r-  r  s    r   r  zContextElement.<lambda>  s	    c.? r   r'  c                 
    d|fS r   r   r   s     r   r   zContextElement.extract_padding  r   r   )r   r   r   r   r   r   r   r  r   r   r   r   r   r   r+  r+  }  s        D
:q!!	/1%%	*a  $dH55($#?#?	A 	A 	AK    r   r+  c            	           e Zd ZdZ eddddd           edd           ed	d           ed
d           edde          gZ	dS )	STDOBJREF	stdObjRefflagsr!   PINGINGSORF_NOPING)r   r   cPublicRefsr   OXIDOIDIPIDN)
r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r2    sq        Dwy]#C#CDD
=!$$FAE1FD),,KKKr   r2  c                   ,    e Zd ZdZ edd          gZdS )StringBindingzString BindingwTowerIdr   N)r   r   r   r   r   r   r   r   r   r<  r<    s)        DZ##KKKr   r<  c                   ^    e Zd ZdZ edd           edd           eddd           gZd	S )
DualStringArrayzDual String ArraywNumEntriesr   wSecurityOffsetr<  r   c                     | j         S r  )rA  r  s    r   r  zDualStringArray.<lambda>  s	    0C r   r	  N)r   r   r   r   r   r   r   r   r   r   r?  r?    s[        D
=!$$
$a(("%C%C	E 	E 	EKKKr   r?  c                   F    e Zd ZdZ edde           edde          gZdS )OBJREF_STANDARDobjetref stanDardstdN	saResAddr)r   r   r   r   r   r2  r?  r   r   r   r   rD  rD    s<        DE4++K77KKKr   rD  c                   |    e Zd ZdZ edde           ed ed          ej                   edde	          gZ
dS )OBJREF_HANDLERrE  rF  Nclsidr  r  rG  )r   r   r   r   r   r2  r   r  r  r?  r   r   r   r   rI  rI    s[        DE4++	'33z??Y5HIIIK77KKKr   rI  c                   x    e Zd ZdZ ed ed          ej                   edd           edd          gZdS )	OBJREF_CUSTOMrE  rJ  r  r  cbExtensionr   rA   N)	r   r   r   r   r   r  r  r   r   r   r   r   rL  rL    sW        D	'33z??Y5HIII""QKKKr   rL  c                       e Zd ZdZg ZdS )OBJREF_EXTENDEDrE  N)r   r   r   r   r   r   r   r   rO  rO    s        DKKKr   rO  )r!   r"   r5   r   c                   v    e Zd ZdZ edd           edd           edde           edd          gZd Z	d	S )
(IRemoteSCMActivator_RemoteCreateInstanceRemoteCreateInstancer  r   r  flagr!   rA   c                     	 t           | j                 | j        j                            d                   S # t
          $ r Y d S w xY wNr   )_objref_pdurS  	__class__r   endswithr   r   r   s     r   r   z<IRemoteSCMActivator_RemoteCreateInstance.guess_payload_class  sU    	ty)'0066   	 	 	DD	   47 
AAN)
r   r   r   r   r   r   _objref_flagr   r   r   r   r   r   rQ  rQ    sm        !D
>1%%
>1%%VQ--Q	K    r   rQ  z$4d9f4ab8-7d1c-11cf-861e-0020af6e7c57IActivationz$000001A0-0000-0000-C000-000000000046z$99fcfec4-5260-101b-bbcb-00aa0021347aIObjectExporterz$00000000-0000-0000-C000-000000000046IUnknownz$00000131-0000-0000-C000-000000000046IRemUnknown_IUnknownz$00000143-0000-0000-C000-000000000046IRemUnknown2_IRemUnknownz$63D5F430-CFE4-11d1-B2C8-0060083BA1FBCATID_OPCDAServer10z$63D5F432-CFE4-11d1-B2C8-0060083BA1FBCATID_OPCDAServer20z$CC603642-66D7-48f1-B69A-B625E73652D7CATID_OPCDAServer30z$39c13a4d-011e-11d0-9675-0020afd8adb3IOPCServer_IUnknownz$39c13a4e-011e-11d0-9675-0020afd8adb3IOPCServerPublicGroups_IUnknownz$39c13a4f-011e-11d0-9675-0020afd8adb3"IOPCBrowseServerAddrSpace_IUnknownz$39c13a50-011e-11d0-9675-0020afd8adb3IOPCGroupStateMgt_IUnknownz$39c13a51-011e-11d0-9675-0020afd8adb3 IOPCPublicGroupStateMgt_IUnknownz$39c13a52-011e-11d0-9675-0020afd8adb3IOPCSyncIO_IUnknownz$39c13a53-011e-11d0-9675-0020afd8adb3IOPCAsyncIO_IUnknownz$39c13a54-011e-11d0-9675-0020afd8adb3IOPCItemMgt_IUnknownIEnumOPCItemAttributes_IUnknownIOPCDataCallback_IUnknownIOPCAsyncIO2_IUnknownIOPCItemProperties_IUnknownIOPCItemDeadbandMgt_IUnknownIOPCItemSamplingMgt_IUnknownIOPCBrowse_IUnknownIOPCItemIO_IUnknownIOPCSyncIO2_IOPCSyncIOIOPCAsyncIO3_IOPCAsyncIO2$IOPCGroupStateMgt2_IOPCGroupStateMgtlibrary_OPCDAActivationContextInfoActivationPropertiesIn)z$39c13a55-011e-11d0-9675-0020afd8adb3z$39c13a70-011e-11d0-9675-0020afd8adb3z$39c13a71-011e-11d0-9675-0020afd8adb3z$39c13a72-011e-11d0-9675-0020afd8adb3z$5946DA93-8B39-4ec8-AB3D-AA73DF5BC86Fz$3E22D313-F08B-41a5-86C8-95E95CB49FFCz$39227004-A18F-4b57-8B0A-5235670F4468z$85C0B427-2893-4cbc-BD78-E5FC5146F08Fz$730F5F0F-55B1-4c81-9E18-FF8A0904E1FAz$0967B97B-36EF-423e-B6F8-6BFF1E40D39Dz$8E368666-D72E-4f78-87ED-647611C61C9Fz$3B540B51-0378-4551-ADCC-EA9B104302BFz$000001a5-0000-0000-c000-000000000046z$00000338-0000-0000-c000-000000000046	EndOfListNetBIOSComputerNameNetBIOSDomainNameDNSComputernameDNSDomainNameFlags	TimeStampRestrictions
TargetNameChannelBindings)
r   r!   r"   r&   r5   r7   r   r   r   r   ) negociate_0x01negociate_versionnegociate_0x04negociate_0x08negociate_0x10negociate_128negociate_key_exchangenegociate_56target_type_domaintarget_type_servertaget_type_sharenegociate_extended_securitynegociate_identitynegociate_0x002request_non_ntnegociate_target_infonegociate_0x000001negociate_ntlm_keynegociate_nt_onlynegociate_anonymousnegociate_oem_doaminnegociate_oem_workstationnegociate_0x00004negociate_always_signnegociate_unicodenegociate_oemrequest_targetnegociate_00000008negociate_signnegociate_sealnegociate_datagramnegociate_lan_manager_keyc                   f    e Zd Zd Z edde           edd           eddd           gZd	 Z	d
S )AV_PAIRavIDr"   avLenr   valuer   c                     | j         S r  )r  r  s    r   r  zAV_PAIR.<lambda>u  s    39 r   r	  c                 
    d|fS r   r   r   s     r   r   zAV_PAIR.extract_paddingx  r   r   N)
r   r   r   r   r   _attribute_typer   r   r   r   r   r   r   r  r  o  sm        Dvq/22
7AGR 4 4	6 	6 	6K    r   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 ZdS )
OpcDaAuth3r   code  code2authTyper   	authLevelr"   
authPadLenr   authReservedauthContextIdc                     	 t           | j                 | j        j                            d                   S # t
          $ r Y d S w xY wrU  )_opcDa_auth_classesr  rW  r   rX  r   rY  s     r   r   zOpcDaAuth3.guess_payload_class  sU    	&t}5'0066   	 	 	DD	rZ  N)	r   r   r   r   r   r   r   r   r   r   r   r   r  r    s        D
64  
7D!!	*b!!	+q!!	,""	.!$$!$$K    r   r  c                   ^    e Zd Zd Z edd           edd           edd          gZd ZdS )RequestStubDatar  r   r  stubdatar   c                 
    d|fS r   r   r   s     r   r   zRequestStubData.extract_padding  r   r   N)r   r   r   r   r   r   r   r   r   r   r   r  r    s\        D
>1%%
>1%%R  K    r   r  c                 2   | j         rt          | j         t                    sdS | j         j        dz
  }|| j         j        z  }t
          |                                 v r,|                                 t
                   j        dz  r|dz  }t          d|          S )Nr      rE   $   )	r   r   OpcDaHeaderN
fragLengthr   OpcDaHeaderMessage
firstlayer	pfc_flagsmax)r  stub_data_lengths     r   _opc_stubdata_lengthr    s    > CNL!I!I q~02511cnn....NN/0:\I 	/Bq"###r   c                       e Zd Zd Z edd           edd           edd           e ed ed          ej	                  d            e
d	d
ed            edd
e          gZd Zd
S )OpcDaRequest	allocHintr   	contextIdopNumuuidr  r  c                     t           |                                 v o&|                                 t                    j        dz  S )NrE   )r  r  r  r  s    r   r  zOpcDaRequest.<lambda>  s:    *cnn.>.>> JNN/0:\I r   stubDataNc                      t          |           S r  )r  r  s    r   r  zOpcDaRequest.<lambda>  s    /CC/H/H r   r	  authenticationc                 
    d|fS r   r   r   s     r   r   zOpcDaRequest.extract_padding  r   r   )r   r   r   r   r   r   r   r   r  r  r   r  r   r   r   r   r   r   r   r  r    s        Da  
;""
7AIfcc*oo	8KLLLJ J	
 	

 	z4#H#H	J 	J 	J$d,DEEK    r   r  c                       e Zd Zd Zg Zd ZdS )	OpcDaPingc                 
    d|fS r   r   r   s     r   r   zOpcDaPing.extract_padding  r   r   N)r   r   r   r   r   r   r   r   r   r  r    s-        DK    r   r  c            
           e Zd Zd Z edd           edd           edd           edd           eddd 	           ed
de	          gZ
d ZdS )OpcDaResponser  r   r  cancelCountrA   r  Nc                     | j         dz
  S N    r  r  s    r   r  zOpcDaResponse.<lambda>      3=2+= r   r	  r  c                 
    d|fS r   r   r   s     r   r   zOpcDaResponse.extract_padding  r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r    s        Da  
;""	-##	*a  J = =	? 	? 	?$d,DEEK    r   r  c                       e Zd Zd Z edd           edd           edd           edd           edde           edd           e	dd	d
            e
dd	e          gZd Zd	S )
OpcDaFaultr  r   r  r  rA   Groupr$  r  Nc                     | j         dz
  S r  r  r  s    r   r  zOpcDaFault.<lambda>	  r  r   r	  r  c                 
    d|fS r   r   r   s     r   r   zOpcDaFault.extract_padding  r   r   )r   r   r   r   r   r   r   r   _faultStatusr   r   r   r   r   r   r   r   r  r    s        Da  
;""	-##	*a  Wa..a  J = =	? 	? 	?$d,DEE
K    r   r  c                       e Zd Zd Zd ZdS )OpcDaWorkingc                     t           S r  	OpcDaFackr   s     r   r   zOpcDaWorking.extract_padding      r   Nr   r   r   r   r  r    s(        D    r   r  c                       e Zd Zd Zd ZdS )OpcDaNoCallc                     t           S r  r  r   s     r   r   zOpcDaNoCall.extract_padding#  r  r   Nr   r   r   r   r  r     s(        D    r   r  c                       e Zd ZdZd ZdS )OpcDaNoCallLEr  c                     t           S r  )OpcDaFackLEr   s     r   r   zOpcDaNoCallLE.extract_padding*  s    r   Nr   r   r   r   r  r  '  s(        D    r   r  c                       e Zd Zd Z edd           edd           edd           edd           edde           e	ddd	 
           e
dde          gZd ZdS )OpcDaRejectr  r   r  r  rA   r  r  Nc                     | j         dz
  S r  r  r  s    r   r  zOpcDaReject.<lambda>;  r  r   r	  r  c                 
    d|fS r   r   r   s     r   r   zOpcDaReject.extract_padding?  r   r   )r   r   r   r   r   r   r   r   _rejectStatusr   r   r   r   r   r   r   r   r  r  1  s        Da  
;""	-##	*a  Wa//J = =	? 	? 	?$d,DEE	K    r   r  c                       e Zd Zd Zd ZdS )OpcDaAckc                 
    d|fS r   r   r   s     r   r   zOpcDaAck.extract_paddingO  r   r   Nr   r   r   r   r  r  L  s(        D    r   r  c                   `    e Zd Zd Z edde           edd           edd          gZd ZdS )OpcDaCl_cancelr  Nversionr   cancelIdc                 
    d|fS r   r   r   s     r   r   zOpcDaCl_cancel.extract_padding]  r   r   	r   r   r   r   r   r   r   r   r   r   r   r   r  r  T  `        D$d,DEEAQK    r   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d	d
           ed	ded           gZ	d Z
dS )r  r  r   pad
windowSizemaxTsdumaxFragSize	serialNum	selackLenselackr   )count_ofr   Nc                     | j         S r  )r  r  s    r   r  zOpcDaFack.<lambda>w  s    cm r   r'  c                 
    d|fS r   r   r   s     r   r   zOpcDaFack.extract_paddingz  r   r   )r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r  r  k  s        D
9a  	%
<##A""
;""k1xSAAA$#;#;	= 	= 	=
K    r   r  c                   ^    e Zd Zd Z edd           edd           edd          gZd ZdS )OpcDaCancel_ackr  r   r  	acceptingr!   c                 
    d|fS r   r   r   s     r   r   zOpcDaCancel_ack.extract_padding  r   r   N)r   r   r   r   r   r   r   r   r   r   r   r  r    s\        DAQ	+q!!K    r   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ed            e	dde
          gZd ZdS )	OpcDaBindmaxXmitFragr  maxRecvtFragassocGroupIdr   nbContextElementr!   rA   r$  contextItemNc                     | j         S r  )r  r  s    r   r  zOpcDaBind.<lambda>  s	    c.B r   r'  r  c                 
    d|fS r   r   r   s     r   r   zOpcDaBind.extract_padding  r   r   )r   r   r   r   r   r   r   r   r+  r   r   r   r   r   r   r   r  r    s        D
=$''
>4((##	$a((	*a  
;""t^#B#B	D 	D 	D$d,DEE
K    r   r  c                       e Zd Zd Z edd           edd           edd           edde           edd           ed	d
e           edd
e	          gZ
d Zd
S )OpcDaBind_ackr  r  r  r  r   portSpec    pad2r%  Nr  c                 
    d|fS r   r   r   s     r   r   zOpcDaBind_ack.extract_padding  r   r   r   r   r   r   r   r   r   r   r!  r   r   r   r   r   r   r  r    s        D
=$''
>4((##J 2ODDL$
33$d,DEEK    r   r  c                   4    e Zd Zd Z edde          gZd ZdS )OpcDaBind_nakproviderRejectReasonr   c                 
    d|fS r   r   r   s     r   r   zOpcDaBind_nak.extract_padding  r   r   N)r   r   r   r   r   _rejectBindNackr   r   r   r   r   r   r     sA        D-q/BBK    r   r   c                   ^    e Zd Zd Z edd           edd           edd          gZd ZdS )OpcDaAlter_contextr  r  r  r  r   c                 
    d|fS r   r   r   s     r   r   z"OpcDaAlter_context.extract_padding  r   r   N)r   r   r   r   r   r   r   r   r   r   r   r%  r%    s\        D
=$''
>4((##K    r   r%  c                       e Zd Zd Z edd           edd           edd           edde           edd           ed	d
e           edd
e	          gZ
d Zd
S )OpcDaAlter_Context_Respr  r  r  r  r   r  r  r  r%  Nr  c                 
    d|fS r   r   r   s     r   r   z'OpcDaAlter_Context_Resp.extract_padding   r   r   r  r   r   r   r(  r(    s        $D
=$''
>4((##J 2ODDL$
33$d,DEEK    r   r(  c                       e Zd Zd Zd ZdS )OpcDaShutdownc                 
    d|fS r   r   r   s     r   r   zOpcDaShutdown.extract_padding  r   r   Nr   r   r   r   r+  r+    s(        D    r   r+  c                   `    e Zd ZdZ edde           edd           edd          gZd ZdS )OpcDaCo_cancelOpcDaCO_cancelr  Nr  r   r  c                 
    d|fS r   r   r   s     r   r   zOpcDaCo_cancel.extract_padding  r   r   r  r   r   r   r.  r.    r  r   r.  c                       e Zd Zd ZdS )OpcDaOrphanedN)r   r   r   r   r   r   r   r2  r2  '  s        DDDr   r2  c                   `    e Zd ZdZ edd           edde           edd          gZd Z	dS )r  OpcDaHeaderNextr  r   r   callIDc                     | j         rK	 t          | j         j                 | j        j                            d                   S # t          $ r Y nw xY wt          j        S rU  )	r   _opcDa_pdu_classespduTyperW  r   rX  AttributeErrorr   r   rY  s     r   r   z OpcDaHeaderN.guess_payload_classN  sh    ? 	)$/*ABN+44T::  "   ~s   9A 
AAN)
r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  E  s_        D
<##|Q(BCC1K    r   r  c                       e Zd ZdZddiZ edd           edd           edde           eddd	e	           e
d
ddddd           e
dddddd           eddddddd           edd          gZd ZdS )r  OpcDaHeaderpdu_type)r8  z2.5.0r  r   r  r8  r  r   integerRepresentationr!   r5   	bigEndianlittleEndianr   characterRepresentationasciiebcdicfloatingPointRepresentationieeevaxcrayibmr~   resc                 J    	 t           | j                 S # t          $ r Y d S w xY wr  )_opcda_next_headerr=  r   rY  s     r   r   z&OpcDaHeaderMessage.guess_payload_classy  s7    	%d&@AA 	 	 	DD	s    
""N)r   r   r   r   deprecated_fieldsr   r   _pduTyper
   
_pfc_flagsr   r   r   r   r   r   r   r  r  b  s         D( 		.!$$	.!$$iH--
;1j11 	,a$88	: 	:.1 X..	0 	03Q Uv%@@	B 	B
5!K     r   r  c                   .    e Zd Zd Z ed de          gZdS )OpcDaMessageN)r   r   r   r   r   r  r   r   r   r   rO  rO    s,        DND*<==KKKr   rO  )__doc__r   scapy.configr   scapy.fieldsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.packetr   scapy.layers.ntlmr   _tagOPCDataSource_tagOPCBrowseType_tagOPCNameSpaceType_tagOPCBrowseDirection_tagOPCEuType_tagOPCServerState_tagOPCEnumScoperM  r  r  r  r#  r  rL  r   r   r   r   r   r   LenStringPacketLEr  
SyntaxIdLEr  ResultElementLEr!  ResultListLEr+  ContextElementLEr2  r<  r?  DualStringArrayLErD  OBJREF_STANDARDLErI  OBJREF_HANDLERLErL  OBJREF_CUSTOMLErO  OBJREF_EXTENDEDLEr[  rV  rQ  *IRemoteSCMActivator_RemoteCreateInstanceLEIRemoteSCMActivator_standardDcomEndpointr  _negociate_flagsr  	AV_PAIRLEr  r  OpcDaAuth3LEr  RequestStubDataLEr  r  OpcDaRequestLEr  r  OpcDaResponseLEr  OpcDaFaultLEr  r  r  r  OpcDaRejectLEr  r  OpcDaCl_cancelLEr  r  r  OpcDaCancel_ackLEr  OpcDaBindLEr  OpcDaBind_ackLEr   OpcDaBind_nakLEr%  OpcDaAlter_contextLEr(  OpcDaAlter_Context_RespLEr+  r.  OpcDaCo_cancelLEr2  r7  r  OpcDaHeaderNLErJ  r  rO  r   r   r   <module>rz     s                                                               6        ) ) ) ) ) )                  &$!    
 2-2%2 '2 -	2
 +2 %2 (2 )2 %2 ,2 )2 *2 (2 (2 ,2  ,!2" '#2 2$ (%2& ''2( -)2* #+2, )-2. +/20 /122 +324 ,526 '728 (92: );2< (=2> (?2@ *A2B #C2D %E2 2F &)'(',,(--)+/-+c2 2 2j  
 &1	 
 '&	 	)"   '	
 ( ! | $ "   % $ % , ,  %!"  #(yv z w	
 y x x u { v   
    !" 
#$ 	+  2 '    0    v   "    v              f     H_-- 
 
 
 
 
v 
 
 
 Xh
    F    (=))        x
##    V    8N++            F       f    H_--     f    H_--     V    8N++     F    (=))    f    H_-- 
 	  	*+()'*+	     v   $ .6X,. . * 024  #*M# +,?# +,=	#
 +J# +,B# +,F# +,A# +,A# +,A# +,A# +,M# +,P# +,H#  +,N!#" +,A##$ +,B%#& +,B'#( -N,G,C,I,J,J,A,A,D,G,R,;,C,DE# # # P  ! ! ! H
 
 
 
 
f 
 
 
 HW	 k" 
       * x
##	 	 	 	 	f 	 	 	 H_-- $ $ $    6   * ,''           F   " (=))       & x
##    6       &       F       &   $ %%    v   
 
 
 
 
V 
 
 
 8N++        & hy!!
 
 
 
 
f 
 
 
 H_--        & hy!!    F   " (=))    F    (=))         x 233     f   " %H%<==     F   
 
 
 
 
V 
 
 
 8N++     ,   
n%	9 ' 
L!	
 l# ]# ]# ( () 	; +, K  ( ( 	12  	 ";<!" &#$ 
)*	&	\"+   2    6   ( ,''          D    6     r   