a
    kÄ#dÇ…  ã                2   @   s   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)d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVœ1Z*dWdXdYdœZ+dZd[d\d]d^œZ,dZd_d]d`dadbdcdddeœZ-dfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwœZ.dxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒœZ/d�dŽd�œZ0d�d‘„ Z1G d’d“„ d“eƒZ2G d”d•„ d•eƒZ3G d–d—„ d—eƒZ4G d˜d™„ d™eƒZ5e1e5ƒZ6G dšd›„ d›eƒZ7e1e7ƒZ8G dœd�„ d�eƒZ9e1e9ƒZ:G dždŸ„ dŸeƒZ;e1e;ƒZ<G d d¡„ d¡eƒZ=e1e=ƒZ>G d¢d£„ d£eƒZ?G d¤d¥„ d¥eƒZ@G d¦d§„ d§eƒZAe1eAƒZBG d¨d©„ d©eƒZCe1eCƒZDG dªd«„ d«eƒZEe1eEƒZFG d¬d­„ d­eƒZGe1eGƒZHG d®d¯„ d¯eƒZIe1eIƒZJd©d«d­d¯d°œZKeCeDgeEeFgeGeHgeIeJgd°œZLG d±d²„ d²eƒZMe1eMƒZNd³eMeNgiZOd´eOdµ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ÒœZPdÓdÔdÕdÖd×dØdÙdÚdÛdÜdÝœ
ZQg dÞ¢ZRG dßdà„ dàeƒZSe1eSƒZTdáe!e!giZUG dâdã„ dãeƒZVe1eVƒZWG dädå„ dåeƒZXe1eXƒZYdædç„ ZZG dèdé„ déeƒZ[e1e[ƒZ\G dêdë„ dëeƒZ]G dìdí„ díeƒZ^e1e^ƒZ_G dîdï„ dïeƒZ`e1e`ƒZaG dðdñ„ dñeƒZbG dòdó„ dóeƒZcG dôdõ„ dõeƒZdG död÷„ d÷eƒZee1eeƒZfG dødù„ dùeƒZgG dúdû„ dûeƒZhe1ehƒZiG düdý„ dýeƒZje1ejƒZkG dþdÿ„ dÿeƒZle1elƒZmG �d �d„ �deƒZne1enƒZoG �d�d„ �deƒZpe1epƒZqG �d�d„ �deƒZre1erƒZsG �d�d„ �deƒZte1etƒZuG �d�d	„ �d	eƒZve1evƒZwG �d
�d„ �deƒZxG �d�d„ �deƒZye1eyƒZzG �d�d„ �de2ƒZ{e[e\ge]e]ge^e_ge`eagebebgecedgeeefgegeggeheigejekgelemgeneogepeqgeresgeteugevewgexexgeyezge{e{geVeWgdŒœZ|G �d�d„ �deƒZ}e1e}ƒZ~e}e~d�œZG �d�d„ �deƒZ€G �d�d„ �deƒZ�dS (  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_HeaderZOPC_DS_CACHEZOPC_DS_DEVICE)é   é   Z
OPC_BRANCHZOPC_LEAFZOPC_FLAT)r   r   é   ZOPC_NS_HIERARCHIALZOPC_NS_FLATZOPC_BROWSE_UPZOPC_BROWSE_DOWNZOPC_BROWSE_TOZ
OPC_NOENUMZ
OPC_ANALOGZOPC_ENUMERATED)r   r   r   ZOPC_STATUS_RUNNINGZOPC_STATUS_FAILEDZOPC_STATUS_NOCONFIGZOPC_STATUS_SUSPENDEDZOPC_STATUS_TESTZOPC_STATUS_COMM_FAULT)r   r   r    é   é   é   ZOPC_ENUM_PRIVATE_CONNECTIONSZOPC_ENUM_PUBLIC_CONNECTIONSZOPC_ENUM_ALL_CONNECTIONSZOPC_ENUM_PRIVATEZOPC_ENUM_PUBLICZOPC_ENUM_ALL)ZfirstFragmentZlastFragmentZpendingCancelÚreservedZconcurrentMultiplexingZdidNotExecuteÚmaybeÚ
objectUuidZrpc_s_fault_object_not_foundZrpc_s_call_cancelledZrpc_s_fault_addr_errorZrpc_s_fault_context_mismatchZrpc_s_fault_fp_div_by_zeroZrpc_s_fault_fp_errorZrpc_s_fault_fp_overflowZrpc_s_fault_fp_underflowZrpc_s_fault_ill_instZrpc_s_fault_int_div_by_zeroZrpc_s_fault_int_overflowZrpc_s_fault_invalid_boundZrpc_s_fault_invalid_tagZrpc_s_fault_pipe_closedZrpc_s_fault_pipe_comm_errorZrpc_s_fault_pipe_disciplineZrpc_s_fault_pipe_emptyZrpc_s_fault_pipe_memoryZrpc_s_fault_pipe_orderZrpc_s_fault_remote_no_memoryZrpc_s_fault_unspecZrpc_s_fault_user_definedZrpc_s_fault_tx_open_failedZrpc_s_fault_codeset_conv_errorZrpc_s_fault_no_client_stubZnca_s_fault_int_div_by_zeroZnca_s_fault_addr_errorZnca_s_fault_fp_div_zeroZnca_s_fault_fp_underflowZnca_s_fault_fp_overflowZnca_s_fault_invalid_tagZnca_s_fault_invalid_boundZnca_s_fault_cancelZnca_s_fault_ill_instZnca_s_fault_fp_errorZnca_s_fault_int_overflowZnca_s_fault_pipe_emptyZnca_s_fault_pipe_closedZnca_s_fault_pipe_orderZnca_s_fault_pipe_disciplineZnca_s_fault_pipe_comm_errorZnca_s_fault_pipe_memoryZnca_s_fault_context_mismatchZnca_s_fault_remote_no_memoryZncs_s_fault_user_definedZnca_s_fault_tx_open_failedZnca_s_fault_codeset_conv_errorZnca_s_fault_object_not_foundZnca_s_fault_no_client_stub)1i Éi1 Éit Éiu Éiv Éiw Éix Éiy Éiz Éi{ Éi| Éi} Éi~ Éi Éi€ Éi� Éi‚ Éiƒ Éi„ Éi† Éi‡ Éi¡Éi¡Éin¡Éip¡Éi  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i!  i"  i#  i$  i%  Z
ACCEPTANCEZUSER_REJECTIONZPROVIDER_REJECTIONZREASON_NOT_SPECIFIEDZABSTRACT_SYNTAX_NOT_SUPPORTEDZ(PROPOSED_TRANSFER_SYNTAXES_NOT_SUPPORTEDZLOCAL_LIMIT_EXCEEDED©r   r   r   r    ZTEMPORARY_CONGESTIONZCALLED_PADDR_UNKNOWNZPROTOCOL_VERSION_NOT_SUPPORTEDZDEFAULT_CONTEXT_NOT_SUPPORTEDZUSER_DATA_NOT_READABLEZNO_PSAP_AVAILABLE)r   r   r   r    r!   r"   r#   é   Znca_rpc_version_mismatchZnca_unspec_rejectZnca_s_bad_actidZnca_who_are_you_failedZnca_manager_not_enteredZnca_op_rng_errorZ
nca_unk_ifZnca_wrong_boot_timeZnca_s_you_crashedZnca_proto_errorZnca_out_args_too_bigZnca_server_too_busyZnca_unsupported_typeZnca_invalid_pres_context_idZnca_unsupported_authn_levelZnca_invalid_checksumZnca_invalid_crc)i  i	  i
  i  i  i i i i	 i i i i i  i  i  i   ZREQUESTZPINGZRESPONSEZFAULTZWORKINGZNOCALLZREJECTZACKZ	CI_CANCELZFACKZ
CANCEL_ACKZBINDZBIND_ACKZ	BIND_NACKZALTER_CONTEXTZALTER_CONTEXT_RESPÚSHUTDOWNZ	CO_CANCELZORPHANEDÚAuth3)r   r   r   r    r!   r"   r#   r(   é   é	   é
   é   é   é   é   é   é   é   é   é   ÚNoneÚOsfDcePrivateKeyAuthentication©r   r   c                    s¾   dd„ ˆj D ƒ‰ ˆ D ]‚}t|tƒr(|j}t|tƒr<tj|_qt|tƒrbtƒ  	|j
jd |j
¡|_
qt|tƒsd|j dd¡ dd¡ |_t |j¡|_qG ‡ ‡fdd	„d	ˆƒ}ˆjd |_|S )
z)
    Make all fields in a packet LE.
    c                 S   s   g | ]}|  ¡ ‘qS © )Úcopy)Ú.0Úfr:   r:   úK/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/opc_da.pyÚ
<listcomp>  ó    z_make_le.<locals>.<listcomp>ÚLEú<ú>Ú ú!c                       s   e Zd Z” Z”ƒ jd ZdS )z_make_le.<locals>.LEPacketz (LE)N)Ú__name__Ú
__module__Ú__qualname__Úfields_descÚnamer:   ©ÚfldsÚpkt_clsr:   r>   ÚLEPacket  s   rN   )rI   Ú
isinstancer   Zfldr   Z	FORMAT_LEÚuuid_fmtr   ÚglobalsÚgetÚclsrF   r   ÚfmtÚreplaceÚstructÚStruct)rM   r=   rN   r:   rK   r>   Ú_make_leþ   s    




rX   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚAuthentificationProtocolZauthentificationProtocolc                 C   s   d|fS ©Nr@   r:   ©ÚselfÚpr:   r:   r>   Úextract_padding  s    z(AuthentificationProtocol.extract_paddingc                 C   sF   | j r@t| j dƒr@| j j}|dkr@z
t| W S  ty>   Y n0 tjS )NÚ
authLengthr   )Ú
underlayerÚhasattrr_   Ú_authentification_protocolÚ	Exceptionr   Ú	raw_layer)r\   Úpayloadr_   r:   r:   r>   Úguess_payload_class  s    
z,AuthentificationProtocol.guess_payload_classN)rF   rG   rH   rJ   r^   rf   r:   r:   r:   r>   rY     s   rY   c                   @   s   e Zd ZdZdd„ ZdS )Ú OsfDcePrivateKeyAuthentificationr8   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   +  s    z0OsfDcePrivateKeyAuthentification.extract_paddingN©rF   rG   rH   rJ   r^   r:   r:   r:   r>   rg   '  s   rg   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	OPCHandlec                 C   s   t  | ||d¡ d S )NZ16s)r   Ú__init__)r\   rJ   Údefaultr:   r:   r>   rj   0  s    zOPCHandle.__init__c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   3  s    zOPCHandle.extract_paddingN)rF   rG   rH   rj   r^   r:   r:   r:   r>   ri   /  s   ri   c                   @   sT   e Zd ZdZeddddd�eedddd	�d
d„ fgedddd„ d�ƒgZdd„ Z	dS )ÚLenStringPacketzlen string packetÚlengthr   ÚdataÚH)Z	length_ofrT   rD   r   ©rm   c                 C   s   | j  S ©Nrp   ©Úpktr:   r:   r>   Ú<lambda>>  r@   zLenStringPacket.<lambda>c                 C   s   | j S rq   rp   rr   r:   r:   r>   rt   ?  r@   ©Zlength_fromc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   C  s    zLenStringPacket.extract_paddingN)
rF   rG   rH   rJ   r   r   r   r   rI   r^   r:   r:   r:   r>   rl   7  s   ÿýþ	rl   c                   @   s>   e Zd ZdZededƒejd�eddƒeddƒgZdd	„ Z	d
S )ÚSyntaxIdz	syntax IdZinterfaceUUIDÚ 00010001000100010001000100010001©rP   ÚversionMajorr   ÚversionMinorc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   S  s    zSyntaxId.extract_paddingN)
rF   rG   rH   rJ   r   ÚstrÚ	FORMAT_BEr   rI   r^   r:   r:   r:   r>   rv   J  s   
ÿürv   c                   @   sD   e Zd ZdZeddeƒeeddeƒdd„ ƒedde	ƒgZ
d	d
„ ZdS )ÚResultElementZ
p_result_tÚresultContextNegotiationr   Úreasonc                 C   s
   | j dkS )Nr   )r~   rr   r:   r:   r>   rt   `  r@   zResultElement.<lambda>ÚtransferSyntaxz                    c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   d  s    zResultElement.extract_paddingN)rF   rG   rH   rJ   r   Ú
_defResultr   Ú
_defReasonr   rv   rI   r^   r:   r:   r:   r>   r}   Z  s   
ÿ
ür}   c                	   @   sF   e Zd ZdZeddƒeddƒeddƒeddedd	„ d
�gZdd„ Z	dS )Ú
ResultListZp_result_list_tÚnbResultr   r$   Ú	reserved2Ú
resultListNc                 C   s   | j S rq   )r„   rr   r:   r:   r>   rt   s  r@   zResultList.<lambda>©Z
count_fromc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   v  s    zResultList.extract_padding)
rF   rG   rH   rJ   r   r   r   r}   rI   r^   r:   r:   r:   r>   rƒ   k  s   ÿürƒ   c                
   @   sP   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
„ d�gZ	dd„ Z
dS )ÚContextElementzcontext elementZcontxtIdr   ÚnbTransferSynr$   ZabstractSyntaxNr€   c                 C   s   | j S rq   )r‰   rr   r:   r:   r>   rt   …  r@   zContextElement.<lambda>r‡   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ˆ  s    zContextElement.extract_padding)rF   rG   rH   rJ   r   r   r   rv   r   rI   r^   r:   r:   r:   r>   rˆ   }  s   
ÿû	rˆ   c                   @   sF   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 )Ú	STDOBJREFZ	stdObjRefÚflagsr   ZPINGINGZSORF_NOPING)r   r+   ZcPublicRefsr   ZOXIDZOIDZIPIDN)
rF   rG   rH   rJ   r   r   r   r   r   rI   r:   r:   r:   r>   rŠ   �  s   
ûrŠ   c                   @   s   e Zd ZdZeddƒgZdS )ÚStringBindingzString BindingZwTowerIdr   N)rF   rG   rH   rJ   r   rI   r:   r:   r:   r>   rŒ   ›  s   ÿrŒ   c                   @   s4   e Zd ZdZeddƒeddƒedddd„ d	�gZd
S )ÚDualStringArrayzDual String ArrayZwNumEntriesr   ÚwSecurityOffsetrŒ   rD   c                 C   s   | j S rq   )rŽ   rr   r:   r:   r>   rt   ª  r@   zDualStringArray.<lambda>ru   N)rF   rG   rH   rJ   r   r   rI   r:   r:   r:   r>   r�   £  s   þýr�   c                   @   s(   e Zd ZdZeddeƒeddeƒgZdS )ÚOBJREF_STANDARDúobjetref stanDardÚstdNÚ	saResAddr)rF   rG   rH   rJ   r   rŠ   r�   rI   r:   r:   r:   r>   r�   ±  s   

þr�   c                   @   s:   e Zd ZdZeddeƒededƒejd�edde	ƒgZ
dS )ÚOBJREF_HANDLERr�   r‘   NÚclsidrw   rx   r’   )rF   rG   rH   rJ   r   rŠ   r   r{   r|   r�   rI   r:   r:   r:   r>   r“   ¼  s
   

ýr“   c                   @   s6   e Zd ZdZededƒejd�eddƒeddƒgZdS )	ÚOBJREF_CUSTOMr�   r”   rw   rx   ZcbExtensionr   r$   N)	rF   rG   rH   rJ   r   r{   r|   r   rI   r:   r:   r:   r>   r•   È  s
   ýr•   c                   @   s   e Zd ZdZg ZdS )ÚOBJREF_EXTENDEDr�   N)rF   rG   rH   rJ   rI   r:   r:   r:   r>   r–   Ô  s   r–   )r   r   r!   r+   c                   @   s>   e Zd ZdZeddƒeddƒeddeƒeddƒgZdd	„ Z	d
S )Ú(IRemoteSCMActivator_RemoteCreateInstanceZRemoteCreateInstancery   r   rz   Úflagr   r$   c                 C   s2   zt | j | jj d¡ W S  ty,   Y n0 d S ©NrA   )Ú_objref_pdur˜   Ú	__class__rF   Úendswithrc   ©r\   re   r:   r:   r>   rf   ø  s    ÿz<IRemoteSCMActivator_RemoteCreateInstance.guess_payload_classN)
rF   rG   rH   rJ   r   r
   Ú_objref_flagr   rI   rf   r:   r:   r:   r>   r—   ï  s   
ür—   r!   ZIActivationZIObjectExporterZIUnknownZIRemUnknown_IUnknownZIRemUnknown2_IRemUnknownZCATID_OPCDAServer10ZCATID_OPCDAServer20ZCATID_OPCDAServer30ZIOPCServer_IUnknownZIOPCServerPublicGroups_IUnknownZ"IOPCBrowseServerAddrSpace_IUnknownZIOPCGroupStateMgt_IUnknownZ IOPCPublicGroupStateMgt_IUnknownZIOPCSyncIO_IUnknownZIOPCAsyncIO_IUnknownZIOPCItemMgt_IUnknownZIEnumOPCItemAttributes_IUnknownZIOPCDataCallback_IUnknownZIOPCAsyncIO2_IUnknownZIOPCItemProperties_IUnknownZIOPCItemDeadbandMgt_IUnknownZIOPCItemSamplingMgt_IUnknownZIOPCBrowse_IUnknownZIOPCItemIO_IUnknownZIOPCSyncIO2_IOPCSyncIOZIOPCAsyncIO3_IOPCAsyncIO2Z$IOPCGroupStateMgt2_IOPCGroupStateMgtZlibrary_OPCDAZActivationContextInfoZActivationPropertiesIn)z$4d9f4ab8-7d1c-11cf-861e-0020af6e7c57z$000001A0-0000-0000-C000-000000000046z$99fcfec4-5260-101b-bbcb-00aa0021347az$00000000-0000-0000-C000-000000000046z$00000131-0000-0000-C000-000000000046z$00000143-0000-0000-C000-000000000046z$63D5F430-CFE4-11d1-B2C8-0060083BA1FBz$63D5F432-CFE4-11d1-B2C8-0060083BA1FBz$CC603642-66D7-48f1-B69A-B625E73652D7z$39c13a4d-011e-11d0-9675-0020afd8adb3z$39c13a4e-011e-11d0-9675-0020afd8adb3z$39c13a4f-011e-11d0-9675-0020afd8adb3z$39c13a50-011e-11d0-9675-0020afd8adb3z$39c13a51-011e-11d0-9675-0020afd8adb3z$39c13a52-011e-11d0-9675-0020afd8adb3z$39c13a53-011e-11d0-9675-0020afd8adb3z$39c13a54-011e-11d0-9675-0020afd8adb3z$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-000000000046Z	EndOfListZNetBIOSComputerNameZNetBIOSDomainNameZDNSComputernameZDNSDomainNameÚFlagsZ	TimeStampZRestrictionsZ
TargetNameZChannelBindings)
r   r   r   r    r!   r#   r(   r+   r,   r-   ) Znegociate_0x01Znegociate_versionZnegociate_0x04Znegociate_0x08Znegociate_0x10Znegociate_128Znegociate_key_exchangeZnegociate_56Ztarget_type_domainZtarget_type_serverZtaget_type_shareZnegociate_extended_securityZnegociate_identityZnegociate_0x002Zrequest_non_ntZnegociate_target_infoZnegociate_0x000001Znegociate_ntlm_keyZnegociate_nt_onlyZnegociate_anonymousZnegociate_oem_doaminZnegociate_oem_workstationZnegociate_0x00004Znegociate_always_signZnegociate_unicodeZnegociate_oemZrequest_targetZnegociate_00000008Znegociate_signZnegociate_sealZnegociate_datagramZnegociate_lan_manager_keyc                   @   s>   e Zd Zd Zeddeƒeddƒedddd„ d	�gZd
d„ Z	dS )ÚAV_PAIRZavIDr   ÚavLenr   ÚvaluerD   c                 C   s   | j S rq   )r¡   rr   r:   r:   r>   rt   u  r@   zAV_PAIR.<lambda>ru   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   x  s    zAV_PAIR.extract_paddingN)
rF   rG   rH   rJ   r   Ú_attribute_typer   r   rI   r^   r:   r:   r:   r>   r    o  s   
ÿýr    r-   c                	   @   sT   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d„ ZdS )Ú
OpcDaAuth3r*   ÚcodeéÐ  Úcode2ÚauthTyper-   Z	authLevelr   Z
authPadLenr   ZauthReservedZauthContextIdc                 C   s2   zt | j | jj d¡ W S  ty,   Y n0 d S r™   )Ú_opcDa_auth_classesr¨   r›   rF   rœ   rc   r�   r:   r:   r>   rf   ’  s    ÿzOpcDaAuth3.guess_payload_classN)	rF   rG   rH   rJ   r   r   r   rI   rf   r:   r:   r:   r>   r¤   †  s   ù
r¤   c                   @   s4   e Zd Zd ZeddƒeddƒeddƒgZdd„ ZdS )	ÚRequestStubDatary   r   rz   ZstubdatarD   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ¬  s    zRequestStubData.extract_paddingN)rF   rG   rH   rJ   r   r   rI   r^   r:   r:   r:   r>   rª   ¤  s   ýrª   c                 C   s^   | j rt| j tƒsdS | j jd }|| j j8 }t|  ¡ v rT|  ¡ t jd@ rT|d8 }td|ƒS )Nr   é   r&   é$   )	r`   rO   ÚOpcDaHeaderNÚ
fragLengthr_   ÚOpcDaHeaderMessageÚ
firstlayerÚ	pfc_flagsÚmax)rs   Zstub_data_lengthr:   r:   r>   Ú_opc_stubdata_length³  s    ÿr³   c                
   @   sl   e Zd Zd Zeddƒeddƒeddƒeededƒej	d�dd	„ ƒe
d
dedd	„ d�eddeƒgZdd„ ZdS )ÚOpcDaRequestÚ	allocHintr   Ú	contextIdZopNumÚuuidrw   rx   c                 C   s   t |  ¡ v o|  ¡ t  jd@ S )Nr&   )r¯   r°   r±   rr   r:   r:   r>   rt   Ç  s   zOpcDaRequest.<lambda>ÚstubDataNc                 C   s   t | ƒS rq   )r³   rr   r:   r:   r>   rt   Ë  r@   ru   Úauthenticationc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   Ï  s    zOpcDaRequest.extract_padding)rF   rG   rH   rJ   r   r   r   r   r{   r|   r   rª   r   rY   rI   r^   r:   r:   r:   r>   r´   ¾  s   þÿ
õr´   c                   @   s   e Zd Zd Zg Zdd„ ZdS )Ú	OpcDaPingc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   Þ  s    zOpcDaPing.extract_paddingN)rF   rG   rH   rJ   rI   r^   r:   r:   r:   r>   rº   Ù  s   rº   c                	   @   sV   e Zd Zd Zeddƒeddƒeddƒeddƒedddd	„ d
�edde	ƒgZ
dd„ ZdS )ÚOpcDaResponserµ   r   r¶   ÚcancelCountr$   r¸   Nc                 C   s
   | j d S ©Né    ©rµ   rr   r:   r:   r>   rt   ð  r@   zOpcDaResponse.<lambda>ru   r¹   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ô  s    zOpcDaResponse.extract_padding)rF   rG   rH   rJ   r   r   r   r   r   rY   rI   r^   r:   r:   r:   r>   r»   ç  s   ÿ
ù
r»   c                   @   sh   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
d„ d�e
dd	eƒgZdd„ Zd	S )Ú
OpcDaFaultrµ   r   r¶   r¼   r$   ÚGroupr…   r¸   Nc                 C   s
   | j d S r½   r¿   rr   r:   r:   r>   rt   	  r@   zOpcDaFault.<lambda>ru   r¹   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^     s    zOpcDaFault.extract_padding)rF   rG   rH   rJ   r   r   r   r
   Ú_faultStatusr   r   rY   rI   r^   r:   r:   r:   r>   rÀ   þ  s   
ÿ
÷rÀ   c                   @   s   e Zd Zd Zdd„ ZdS )ÚOpcDaWorkingc                 C   s   t S rq   ©Ú	OpcDaFackr[   r:   r:   r>   r^     s    zOpcDaWorking.extract_paddingNrh   r:   r:   r:   r>   rÃ     s   rÃ   c                   @   s   e Zd Zd Zdd„ ZdS )ÚOpcDaNoCallc                 C   s   t S rq   rÄ   r[   r:   r:   r>   r^   #  s    zOpcDaNoCall.extract_paddingNrh   r:   r:   r:   r>   rÆ      s   rÆ   c                   @   s   e Zd ZdZdd„ ZdS )ÚOpcDaNoCallLErÆ   c                 C   s   t S rq   )ÚOpcDaFackLEr[   r:   r:   r>   r^   *  s    zOpcDaNoCallLE.extract_paddingNrh   r:   r:   r:   r>   rÇ   '  s   rÇ   c                
   @   s`   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	d
„ d�e
ddeƒgZdd„ ZdS )ÚOpcDaRejectrµ   r   r¶   r¼   r$   rÁ   r¸   Nc                 C   s
   | j d S r½   r¿   rr   r:   r:   r>   rt   ;  r@   zOpcDaReject.<lambda>ru   r¹   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ?  s    zOpcDaReject.extract_padding)rF   rG   rH   rJ   r   r   r   r
   Ú_rejectStatusr   r   rY   rI   r^   r:   r:   r:   r>   rÉ   1  s   
ÿ
ørÉ   c                   @   s   e Zd Zd Zdd„ ZdS )ÚOpcDaAckc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   O  s    zOpcDaAck.extract_paddingNrh   r:   r:   r:   r>   rË   L  s   rË   c                   @   s6   e Zd Zd ZeddeƒeddƒeddƒgZdd„ ZdS )ÚOpcDaCl_cancelr¹   NÚversionr   ÚcancelIdc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ]  s    zOpcDaCl_cancel.extract_padding©	rF   rG   rH   rJ   r   rY   r   rI   r^   r:   r:   r:   r>   rÌ   T  s   
ýrÌ   c                   @   sl   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
d�ed	dedd„ d�gZ	dd„ Z
dS )rÅ   rÍ   r   ÚpadZ
windowSizeZmaxTsduZmaxFragSizeZ	serialNumÚ	selackLenZselackro   )Zcount_ofrT   Nc                 C   s   | j S rq   )rÑ   rr   r:   r:   r>   rt   w  r@   zOpcDaFack.<lambda>r‡   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   z  s    zOpcDaFack.extract_padding)rF   rG   rH   rJ   r   r   r   r   r   rI   r^   r:   r:   r:   r>   rÅ   k  s   ÿørÅ   c                   @   s4   e Zd Zd ZeddƒeddƒeddƒgZdd„ ZdS )	ÚOpcDaCancel_ackrÍ   r   rÎ   Z	acceptingr   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ”  s    zOpcDaCancel_ack.extract_paddingN)rF   rG   rH   rJ   r   r   rI   r^   r:   r:   r:   r>   rÒ   ‹  s   ýrÒ   c                   @   sh   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d„ d�e	dde
ƒgZdd„ ZdS )Ú	OpcDaBindÚmaxXmitFragr¦   ÚmaxRecvtFragÚassocGroupIdr   ÚnbContextElementr   r$   r…   ZcontextItemNc                 C   s   | j S rq   )r×   rr   r:   r:   r>   rt   ©  r@   zOpcDaBind.<lambda>r‡   r¹   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ­  s    zOpcDaBind.extract_padding)rF   rG   rH   rJ   r   r   r   r   rˆ   r   rY   rI   r^   r:   r:   r:   r>   rÓ   ž  s   ÿ
÷rÓ   c                
   @   sZ   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d„ Zd
S )ÚOpcDaBind_ackrÔ   r¦   rÕ   rÖ   r   ÚportSpecú    Úpad2r†   Nr¹   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   Å  s    zOpcDaBind_ack.extract_padding©rF   rG   rH   rJ   r   r   r   rl   rƒ   rY   rI   r^   r:   r:   r:   r>   rØ   ¸  s   


ù
rØ   c                   @   s&   e Zd Zd ZeddeƒgZdd„ ZdS )ÚOpcDaBind_nakZproviderRejectReasonr   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   Ø  s    zOpcDaBind_nak.extract_paddingN)rF   rG   rH   rJ   r   Ú_rejectBindNackrI   r^   r:   r:   r:   r>   rÝ   Ñ  s   
ÿrÝ   c                   @   s4   e Zd Zd ZeddƒeddƒeddƒgZdd„ ZdS )	ÚOpcDaAlter_contextrÔ   r¦   rÕ   rÖ   r   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^   ì  s    z"OpcDaAlter_context.extract_paddingN)rF   rG   rH   rJ   r   r   rI   r^   r:   r:   r:   r>   rß   â  s   ýrß   c                
   @   sZ   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d„ Zd
S )ÚOpcDaAlter_Context_ResprÔ   r¦   rÕ   rÖ   r   rÙ   rÚ   rÛ   r†   Nr¹   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^      s    z'OpcDaAlter_Context_Resp.extract_paddingrÜ   r:   r:   r:   r>   rà   ó  s   


ù
rà   c                   @   s   e Zd Zd Zdd„ ZdS )ÚOpcDaShutdownc                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^     s    zOpcDaShutdown.extract_paddingNrh   r:   r:   r:   r>   rá     s   rá   c                   @   s6   e Zd ZdZeddeƒeddƒeddƒgZdd„ ZdS )	ÚOpcDaCo_cancelZOpcDaCO_cancelr¹   NrÍ   r   rÎ   c                 C   s   d|fS rZ   r:   r[   r:   r:   r>   r^     s    zOpcDaCo_cancel.extract_paddingrÏ   r:   r:   r:   r>   râ     s   
ýrâ   c                   @   s   e Zd Zd ZdS )ÚOpcDaOrphanedN)rF   rG   rH   rJ   r:   r:   r:   r>   rã   '  s   rã   c                   @   s6   e Zd ZdZeddƒeddeƒeddƒgZdd„ Z	dS )	r­   ZOpcDaHeaderNextr®   r   r_   ZcallIDc                 C   s<   | j r6zt| j j | jj d¡ W S  ty4   Y n0 tjS r™   )	r`   Ú_opcDa_pdu_classesÚpduTyper›   rF   rœ   ÚAttributeErrorr   rd   r�   r:   r:   r>   rf   N  s    
ÿz OpcDaHeaderN.guess_payload_classN)
rF   rG   rH   rJ   r   r   rb   r   rI   rf   r:   r:   r:   r>   r­   E  s   
ýr­   c                   @   sŠ   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d„ ZdS )r¯   ZOpcDaHeaderZpdu_type)rå   z2.5.0ry   r   rz   rå   r±   r+   ÚintegerRepresentationr   r!   Z	bigEndianZlittleEndianr9   ZcharacterRepresentationÚasciiZebcdicZfloatingPointRepresentationZieeeZvaxZcrayZibmr'   Úresc                 C   s$   zt | j W S  ty   Y n0 d S rq   )Ú_opcda_next_headerrç   rc   r�   r:   r:   r>   rf   y  s    z&OpcDaHeaderMessage.guess_payload_classN)rF   rG   rH   rJ   Zdeprecated_fieldsr   r   Ú_pduTyper	   Ú
_pfc_flagsr   r   rI   rf   r:   r:   r:   r>   r¯   b  s&   ÿ
ÿÿÿór¯   c                   @   s   e Zd Zd Zed deƒgZdS )ÚOpcDaMessageN)rF   rG   rH   rJ   r   r¯   rI   r:   r:   r:   r>   rí   „  s   
ÿrí   )‚Ú__doc__rV   Zscapy.configr   Z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   Zscapy.packetr   Zscapy.layers.ntlmr   Z_tagOPCDataSourceZ_tagOPCBrowseTypeZ_tagOPCNameSpaceTypeZ_tagOPCBrowseDirectionZ_tagOPCEuTypeZ_tagOPCServerStateZ_tagOPCEnumScoperì   rÂ   r�   r‚   rÞ   rÊ   rë   rb   rX   rY   rg   ri   rl   ZLenStringPacketLErv   Z
SyntaxIdLEr}   ZResultElementLErƒ   ZResultListLErˆ   ZContextElementLErŠ   rŒ   r�   ZDualStringArrayLEr�   ZOBJREF_STANDARDLEr“   ZOBJREF_HANDLERLEr•   ZOBJREF_CUSTOMLEr–   ZOBJREF_EXTENDEDLErž   rš   r—   Z*IRemoteSCMActivator_RemoteCreateInstanceLEZIRemoteSCMActivatorZ_standardDcomEndpointr£   Z_negociate_flagsr    Z	AV_PAIRLEr©   r¤   ZOpcDaAuth3LErª   ZRequestStubDataLEr³   r´   ZOpcDaRequestLErº   r»   ZOpcDaResponseLErÀ   ZOpcDaFaultLErÃ   rÆ   rÇ   rÉ   ZOpcDaRejectLErË   rÌ   ZOpcDaCl_cancelLErÅ   rÈ   rÒ   ZOpcDaCancel_ackLErÓ   ZOpcDaBindLErØ   ZOpcDaBind_ackLErÝ   ZOpcDaBind_nakLErß   ZOpcDaAlter_contextLErà   ZOpcDaAlter_Context_RespLErá   râ   ZOpcDaCo_cancelLErã   rä   r­   ZOpcDaHeaderNLErê   r¯   rí   r:   r:   r:   r>   Ú<module>   sd  lþýþýýú
ú	Ï5ýüøïëþ		ü	üÿÿúÞ(ö$ÿ		
	
	ëþ"