a
    kÄ#d­Ž  ã                �   @   s–	  d Z ddlZddlZddlmZmZ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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#m$Z$ ddl%m&Z& ddl'm(Z( dd	l)m*Z* dd
l+m,Z, ddl-m.Z. dddddddddddddddddddddd d!d"d#d$d%œdfddddddddddd&œ	dfddddddddddd'd(dddd)œdfdddddddd*dddd+d,dddd d!d"d-d.d/d#d$d0d1œdfdddd2œdfd3œZ/d4d5d6d7d8d9d:d;d<d=d>œ
Z0d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡œHZ1dˆd‰dŠd‹dŒd�dŽd�d�d‘d’d“d”œZ2d•d–d—d˜œZ3d™dšd›dœd�œZ4dždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d®d¯d°d±d²d³d´dµœZ5d¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇdÈdÉdÊdËdÌdÍdÎdÏdÐdÑdÒdÓdÔdÕdÖd×dØdÙdÚdÛdÜdÝdÞdßdàdádâdãdädådædçdèdédêdëdìdídîdïdðdñdòdódôdõdöd÷dødùdúdûdüdýdþdÿ�d �d�d�d�d�d�d�d�d�d	�d
�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d �d!�d"�d#�d$�d%�d&�d'�d(�d)�d*�d+�d,�d-�d.�d/�d0�d1�d2�d3�d4�d5�d6�d7�d8�d9�d:�d;�d<�d=�d>�d?�d@�dA�dB�dC�dD�dEœ�Z6e/Z7i Z8e7D ]>Z9e7e9 Z:i Z;e:d D ]Z<e<e;e:d e< < �q¤e;e8e:d < �qŒi Z=e7D ]Z9e9e=e7e9 d < �qÔ[9[<[;[:g �dF¢Z>e> ?�dGgd- ¡ e> ?g �dH¢¡ �dGgd0 Z@e@ ?g �dI¢¡ G �dJ�dK„ �dKeƒZAG �dL�dM„ �dMeAƒZBG �dN�dO„ �dOeƒZCG �dP�dQ„ �dQeAƒZDG �dR�dS„ �dSeAƒZEG �dT�dU„ �dUeAƒZFG �dV�dW„ �dWeAƒZGG �dX�dY„ �dYeAƒZHG �dZ�d[„ �d[eƒZIG �d\�d]„ �d]eIƒZJG �d^�d_„ �d_eIƒZKG �d`�da„ �daeIƒZLG �db�dc„ �dceIƒZMG �dd�de„ �deeAƒZNG �df�dg„ �dgeAƒZOG �dh�di„ �dieAƒZPG �dj�dk„ �dkeAƒZQG �dl�dm„ �dmeAƒZRG �dn�do„ �doeAƒZSG �dp�dq„ �dqeAƒZTG �dr�ds„ �dseAƒZUG �dt�du„ �dueAƒZVG �dv�dw„ �dweAƒZWG �dx�dy„ �dyeƒZXG �dz�d{„ �d{eAƒZYG �d|�d}„ �d}eAƒZZG �d~�d„ �deAƒZ[G �d€�d�„ �d�eAƒZ\G �d‚�dƒ„ �dƒe\ƒZ]G �d„�d…„ �d…e\ƒZ^G �d†�d‡„ �d‡e\ƒZ_i Z`eae>ƒD ]4\ZbZc�dˆec Zdedeeƒ v �rò�d‰ebie`eeƒ ed < �qò[b[c[de` f¡ eA_gee$e(�dŠ�d‹� ee$e(�dŠ�dŒ� ee$eB�dŠ�d‹� ee$eB�dŠ�dŒ� ee$eB�dŠ�dŠ�d�� ee$e&�dŽ�d‹� ee$e&�dŽ�dŒ� G �d��d�„ �d�eƒZhG �d‘�d’„ �d’eƒZiG �d“�d”„ �d”eƒZjee$e&�dŽ�d‹� ee$e&�dŽ�dŒ� ee$eh�dŽ�d‹� ee$eh�dŽ�dŒ� ee$e&�dŽ�dŽ�d�� ee$ei�dŽ�dŽ�d�� ee$ej�dŽ�dŽ�d�� �d•�d–„ ZkdS (—  z<
Internet Key Exchange Protocol Version 2 (IKEv2), RFC 7296
é    N)ÚPacketÚbind_top_downÚbind_bottom_upÚsplit_bottom_upÚsplit_layersÚRaw)ÚByteEnumFieldÚ	ByteFieldÚConditionalFieldÚFieldLenFieldÚ
FlagsFieldÚIP6FieldÚIPFieldÚIntFieldÚMultiEnumFieldÚMultipleTypeFieldÚPacketFieldÚPacketLenFieldÚPacketListFieldÚShortEnumFieldÚ
ShortFieldÚStrFixedLenFieldÚStrLenFieldÚX3BytesFieldÚ
XByteFieldÚ	XIntField)Ú	X509_CertÚX509_CRL)ÚIPÚUDP)ÚESP)ÚISAKMP)Úsr)Úconf)Ú
RandStringé   é   é   é   é   é   é   é   é	   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é    é!   )zDES-IV64ZDESZ3DESZRC5ZIDEAZCASTZBlowfishZ3IDEAzDES-IV32zAES-CBCzAES-CTRz	AES-CCM-8z
AES-CCM-12z
AES-CCM-16zAES-GCM-8ICVzAES-GCM-12ICVzAES-GCM-16ICVzCamellia-CBCzCamellia-CTRzCamellia-CCM-8ICVzCamellia-CCM-12ICVzCamellia-CCM-16ICVzChaCha20-Poly1305zKuzneychik-MGM-KTREEzMAGMA-MGM-KTREE)	ZPRF_HMAC_MD5ZPRF_HMAC_SHA1ZPRF_HMAC_TIGERZPRF_AES128_XCBCZPRF_HMAC_SHA2_256ZPRF_HMAC_SHA2_384ZPRF_HMAC_SHA2_512ZPRF_AES128_CMACZPRF_HMAC_STREEBOG_512é
   é   )zHMAC-MD5-96zHMAC-SHA1-96zDES-MACzKPDK-MD5zAES-XCBC-96zHMAC-MD5-128zHMAC-SHA1-160zAES-CMAC-96zAES-128-GMACzAES-192-GMACzAES-256-GMACzSHA2-256-128zSHA2-384-192zSHA2-512-256é   é   é   é   é   é   é"   )Z	768MODPgrZ
1024MODPgrZ
1536MODPgrZ
2048MODPgrZ
3072MODPgrZ
4096MODPgrZ
6144MODPgrZ
8192MODPgrZ256randECPgrZ384randECPgrZ521randECPgrZ1024MODP160POSgrZ2048MODP224POSgrZ2048MODP256POSgrZ192randECPgrZ224randECPgrZbrainpoolP224r1grZbrainpoolP256r1grZbrainpoolP384r1grZbrainpoolP512r1grZcurve25519grZ
curve448grZGOST3410_2012_256ZGOST3410_2012_512)zNo ESNZESN)Z
EncryptionZPRFZ	IntegrityÚ	GroupDesczExtended Sequence NumberÚReservedzRSA Digital Signaturez!Shared Key Message Integrity CodezDSS Digital Signaturez%ECDSA with SHA-256 on the P-256 curvez%ECDSA with SHA-384 on the P-384 curvez%ECDSA with SHA-512 on the P-521 curvez-Generic Secure Password Authentication MethodzNULL AuthenticationzDigital Signature)
r   r%   r&   r'   r-   r>   r?   r.   r/   r0   ZUNSUPPORTED_CRITICAL_PAYLOADZINVALID_IKE_SPIZINVALID_MAJOR_VERSIONZINVALID_SYNTAXZINVALID_MESSAGE_IDZINVALID_SPIZNO_PROPOSAL_CHOSENZINVALID_KE_PAYLOADZAUTHENTICATION_FAILEDZSINGLE_PAIR_REQUIREDZNO_ADDITIONAL_SASZINTERNAL_ADDRESS_FAILUREZFAILED_CP_REQUIREDZTS_UNACCEPTABLEZINVALID_SELECTORSZUNACCEPTABLE_ADDRESSESZUNEXPECTED_NAT_DETECTEDZUSE_ASSIGNED_HoAZTEMPORARY_FAILUREZCHILD_SA_NOT_FOUNDZINVALID_GROUP_IDZAUTHORIZATION_FAILEDZINITIAL_CONTACTZSET_WINDOW_SIZEZADDITIONAL_TS_POSSIBLEZIPCOMP_SUPPORTEDZNAT_DETECTION_SOURCE_IPZNAT_DETECTION_DESTINATION_IPZCOOKIEZUSE_TRANSPORT_MODEZHTTP_CERT_LOOKUP_SUPPORTEDZREKEY_SAZESP_TFC_PADDING_NOT_SUPPORTEDZNON_FIRST_FRAGMENTS_ALSOZMOBIKE_SUPPORTEDZADDITIONAL_IP4_ADDRESSZADDITIONAL_IP6_ADDRESSZNO_ADDITIONAL_ADDRESSESZUPDATE_SA_ADDRESSESZCOOKIE2ZNO_NATS_ALLOWEDZAUTH_LIFETIMEZMULTIPLE_AUTH_SUPPORTEDZANOTHER_AUTH_FOLLOWSZREDIRECT_SUPPORTEDZREDIRECTZREDIRECTED_FROMZTICKET_LT_OPAQUEZTICKET_REQUESTZ
TICKET_ACKZTICKET_NACKZTICKET_OPAQUEZLINK_IDZUSE_WESP_MODEZROHC_SUPPORTEDZEAP_ONLY_AUTHENTICATIONZCHILDLESS_IKEV2_SUPPORTEDZQUICK_CRASH_DETECTIONZIKEV2_MESSAGE_ID_SYNC_SUPPORTEDZ#IPSEC_REPLAY_COUNTER_SYNC_SUPPORTEDZIKEV2_MESSAGE_ID_SYNCZIPSEC_REPLAY_COUNTER_SYNCZSECURE_PASSWORD_METHODSZPSK_PERSISTZPSK_CONFIRMZERX_SUPPORTEDZIFOM_CAPABILITYZSENDER_REQUEST_IDZIKEV2_FRAGMENTATION_SUPPORTEDZSIGNATURE_HASH_ALGORITHMSZCLONE_IKE_SA_SUPPORTEDZCLONE_IKE_SA)Hr%   r(   r)   r+   r-   r?   r0   r@   r7   rF   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   i @  i@  i@  i@  i@  i@  i@  i@  i@  i	@  i
@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i@  i @  i!@  i"@  i#@  i$@  i%@  i&@  i'@  i(@  i)@  i*@  i+@  i,@  i-@  i.@  i/@  i0@  i1@  z!PKCS #7 wrapped X.509 certificatezPGP CertificatezDNS Signed KeyzX.509 Certificate - SignaturezKerberos Tokenz!Certificate Revocation List (CRL)zAuthority Revocation List (ARL)zSPKI CertificatezX.509 Certificate - AttributezRaw RSA Keyz!Hash and URL of X.509 certificatezHash and URL of X.509 bundle)r%   r&   r'   r(   r*   r+   r,   r-   r>   r?   r.   r/   ZTS_IPV4_ADDR_RANGEZTS_IPV6_ADDR_RANGEZTS_FC_ADDR_RANGE)r+   r,   r-   ZCFG_REQUESTZ	CFG_REPLYZCFG_SETZCFG_ACK)r%   r&   r'   r(   ZINTERNAL_IP4_ADDRESSZINTERNAL_IP4_NETMASKZINTERNAL_IP4_DNSZINTERNAL_IP4_NBNSZINTERNAL_IP4_DHCPZAPPLICATION_VERSIONZINTERNAL_IP6_ADDRESSZINTERNAL_IP6_DNSZINTERNAL_IP6_DHCPZINTERNAL_IP4_SUBNETZSUPPORTED_ATTRIBUTESZINTERNAL_IP6_SUBNETZMIP6_HOME_PREFIXZINTERNAL_IP6_LINKZINTERNAL_IP6_PREFIXZHOME_AGENT_ADDRESSZP_CSCF_IP4_ADDRESSZP_CSCF_IP6_ADDRESSZFTT_KATZEXTERNAL_SOURCE_IP4_NAT_INFOZ!TIMEOUT_PERIOD_FOR_LIVENESS_CHECKZINTERNAL_DNS_DOMAINZINTERNAL_DNSSEC_TA)r%   r&   r'   r(   r*   r+   r,   r>   r.   r/   r0   r1   r2   r@   r3   r4   r5   rA   rB   r6   r7   r8   r9   zAll protocolsz!Internet Control Message Protocolz"Internet Group Management ProtocolzGateway-to-Gateway ProtocolzIP in IP (encapsulation)zInternet Stream ProtocolzTransmission Control ProtocolzCore-based treeszExterior Gateway ProtocolzWInterior Gateway Protocol (any private interior gateway (used by Cisco for their IGRP))zBBN RCC MonitoringzNetwork Voice Protocolz	Xerox PUPZARGUSZEMCONzCross Net DebuggerZChaoszUser Datagram ProtocolZMultiplexingzDCN Measurement SubsystemszHost Monitoring ProtocolzPacket Radio MeasurementzXEROX NS IDPzTrunk-1zTrunk-2zLeaf-1zLeaf-2zReliable Datagram Protocolz&Internet Reliable Transaction ProtocolzISO Transport Protocol Class 4zBulk Data Transfer ProtocolzMFE Network Services ProtocolzMERIT Internodal Protocolz$Datagram Congestion Control ProtocolzThird Party Connect Protocolz$Inter-Domain Policy Routing ProtocolzXpress Transport ProtocolzDatagram Delivery Protocolz'IDPR Control Message Transport ProtocolzTP++ Transport ProtocolzIL Transport ProtocolzIPv6 EncapsulationzSource Demand Routing ProtocolzRouting Header for IPv6zFragment Header for IPv6zInter-Domain Routing ProtocolzResource Reservation ProtocolzGeneric Routing EncapsulationzMobile Host Routing ProtocolZBNAzEncapsulating Security PayloadzAuthentication Headerz&Integrated Net Layer Security ProtocolZSwIPez NBMA Address Resolution ProtocolzIP Mobility (Min Encap)zBTransport Layer Security Protocol (using Kryptonet key management)z+Simple Key-Management for Internet ProtocolzICMP for IPv6zNo Next Header for IPv6zDestination Options for IPv6zAny host internal protocolZCFTPzAny local networkzSATNET and Backroom EXPAKZ	Kryptolanz MIT Remote Virtual Disk ProtocolzInternet Pluribus Packet CorezAny distributed file systemzSATNET MonitoringzVISA ProtocolzInternet Packet Core Utilityz#Computer Protocol Network ExecutivezComputer Protocol Heart BeatzWang Span NetworkzPacket Video ProtocolzBackroom SATNET MonitoringzSUN ND PROTOCOL-TemporaryzWIDEBAND MonitoringzWIDEBAND EXPAKz@International Organization for Standardization Internet Protocolz&Versatile Message Transaction Protocolz-Secure Versatile Message Transaction ProtocolZVINESz!Internet Protocol Traffic Managerz
NSFNET-IGPzDissimilar Gateway ProtocolZTCFZEIGRPzOpen Shortest Path FirstzSprite RPC Protocolz!Locus Address Resolution ProtocolzMulticast Transport ProtocolzAX.25z#IP-within-IP Encapsulation Protocolz'Mobile Internetworking Control Protocolz!Semaphore Communications Sec. Proz Ethernet-within-IP EncapsulationzEncapsulation HeaderzAny private encryption schemeZGMTPz Ipsilon Flow Management ProtocolzPNNI over IPzProtocol Independent Multicastz2IBM's ARIS (Aggregate Route IP Switching) Protocolz.SCPS (Space Communications Protocol Standards)ZQNXzActive NetworkszIP Payload Compression ProtocolzSitara Networks ProtocolzCompaq Peer Protocolz	IPX in IPzZVirtual Router Redundancy Protocol, Common Address Redundancy Protocol (not IANA assigned)zPGM Reliable Transport ProtocolzAny 0-hop protocolz&Layer Two Tunneling Protocol Version 3zD-II Data Exchange (DDX)z#Interactive Agent Transfer ProtocolzSchedule Transfer ProtocolzSpectraLink Radio Protocolz&Universal Transport Interface ProtocolzSimple Message ProtocolzSimple Multicast Protocolz!Performance Transparency ProtocolzEIntermediate System to Intermediate System (IS-IS) Protocol over IPv4z%Flexible Intra-AS Routing EnvironmentzCombat Radio Transport ProtocolzCombat Radio User Datagramz[Service-Specific Connection-Oriented Protocol in a Multilink and Connectionless EnvironmentZIPLTzSecure Packet Shieldz"Private IP Encapsulation within IPz$Stream Control Transmission ProtocolzFibre Channelz-Reservation Protocol (RSVP) End-to-End Ignorez"Mobility Extension Header for IPv6z"Lightweight User Datagram Protocolz0Multiprotocol Label Switching Encapsulated in IPzMANET ProtocolszHost Identity Protocolz'Site Multihoming by IPv6 Intermediationz&Wrapped Encapsulating Security PayloadzRobust Header Compression)�r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r>   r?   r.   r/   r0   r1   r2   r@   r3   r4   r5   rA   rB   r6   r7   r8   r9   r:   r;   rC   rD   rE   r<   r=   rF   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   é[   é\   é]   é^   é_   é`   éa   éb   éc   éd   ée   éf   ég   éh   éi   éj   ék   él   ém   én   éo   ép   éq   ér   és   ét   éu   év   éw   éx   éy   éz   é{   é|   é}   é~   é   é€   é�   é‚   éƒ   é„   é…   é†   é‡   éˆ   é‰   éŠ   é‹   éŒ   é�   éŽ   )ÚNoneÚ ÚProposalÚ	Transformr¶   )ZSAZKEZIDiZIDrZCERTZCERTREQZAUTHZNonceZNotifyÚDeleteZVendorIDZTSiZTSrZ	EncryptedZCPZEAPr¶   r¶   r¶   r¶   ZEncrypted_Fragment)ZIKE_SA_INITZIKE_AUTHZCREATE_CHILD_SAZINFORMATIONALZIKE_SESSION_RESUMEc                   @   s   e Zd Zdd„ ZdS )ÚIKEv2_classc                 C   sf   | j }t d|¡ |dkr tjS |ttƒk r^t| }t tƒ  d| t	¡¡ tƒ  d| t	¡S t	S d S )NzFor IKEv2_class np=%dr   úIKEv2_payload_%s)
Únext_payloadÚloggingÚdebugr#   Ú	raw_layerÚlenÚIKEv2_payload_typeÚglobalsÚgetÚIKEv2_payload)ÚselfÚpayloadÚnpÚpt© rÉ   úJ/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/ikev2.pyÚguess_payload_classµ  s    zIKEv2_class.guess_payload_classN)Ú__name__Ú
__module__Ú__qualname__rË   rÉ   rÉ   rÉ   rÊ   rº   ´  s   rº   c                   @   sŠ   e Zd Zd Zedddƒedddƒeddeƒeddƒed	deƒe	d
ddg d¢ƒe
ddƒe
ddƒgZeddd„ƒZdd„ Zdd„ Zdd„ ZdS )ÚIKEv2Úinit_SPIr¶   r,   Zresp_SPIr¼   r   Úversionr<   Ú	exch_typeÚflags)Zres0Úres1Úres2Z	InitiatorÚVersionÚResponseÚres6Úres7ÚidÚlengthNc                 O   s8   |r4t |ƒdkr4t d|dd… ¡d }|dk r4tS | S )Nr3   ú!Br@   r   r<   )rÀ   ÚstructÚunpackr!   )ÚclsÚ_pktÚargsÚkargsrÑ   rÉ   rÉ   rÊ   Údispatch_hookÏ  s
    zIKEv2.dispatch_hookc                 C   s   | j d@ rtjS t | |¡S ©Nr%   )rÓ   r#   r¿   rº   rË   ©rÅ   rÆ   rÉ   rÉ   rÊ   rË   ×  s    
zIKEv2.guess_payload_classc                 C   s   t |tƒr|j| jkrdS dS )Nr%   r   )Ú
isinstancerÏ   rÐ   )rÅ   ÚotherrÉ   rÉ   rÊ   ÚanswersÜ  s    
zIKEv2.answersc                 C   s>   ||7 }| j d u r:|d d… t dt|ƒ¡ |dd …  }|S )Nr7   ú!Ir;   )rÛ   rÝ   ÚpackrÀ   )rÅ   ÚpZpayrÉ   rÉ   rÊ   Ú
post_buildâ  s    
(zIKEv2.post_build)N)rÌ   rÍ   rÎ   Únamer   r   rÁ   r   ÚIKEv2_exchange_typer   r   Úfields_descÚclassmethodrã   rË   rè   rì   rÉ   rÉ   rÉ   rÊ   rÏ   Â  s   



ørÏ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚIKEv2_Key_Length_Attributec                 C   s   t  | |d¡ d S )Nì       )r   Ú__init__)rÅ   rí   rÉ   rÉ   rÊ   ró   ë  s    z#IKEv2_Key_Length_Attribute.__init__c                 C   s   t  | ||d@ ¡S )Néÿÿ  )r   Úi2h©rÅ   ÚpktÚxrÉ   rÉ   rÊ   rõ   î  s    zIKEv2_Key_Length_Attribute.i2hc                 C   s   t  | ||d ur|nddB ¡S )Nr   rò   )r   Úh2irö   rÉ   rÉ   rÊ   rù   ñ  s    zIKEv2_Key_Length_Attribute.h2iN)rÌ   rÍ   rÎ   ró   rõ   rù   rÉ   rÉ   rÉ   rÊ   rñ   é  s   rñ   c                   @   sj   e Zd ZdZedddddœƒeddƒed	d
ƒeddeƒeddƒedde	dd„ dd�e
edƒdd„ ƒgZdS )ÚIKEv2_payload_TransformzIKE Transformr¼   NÚlastr¸   )r   r'   Úresr   rÛ   r,   Útransform_typerÕ   Ztransform_idc                 C   s   | j S ©N)rý   ©r÷   rÉ   rÉ   rÊ   Ú<lambda>ý  ó    z IKEv2_payload_Transform.<lambda>ÚH)Z
depends_onÚfmtZ
key_lengthc                 C   s
   | j dkS ©Nr,   ©rÛ   rÿ   rÉ   rÉ   rÊ   r   þ  r  )rÌ   rÍ   rÎ   rí   r   r	   r   ÚIKEv2Transformsr   ÚIKEv2TransformNumr
   rñ   rï   rÉ   rÉ   rÉ   rÊ   rú   õ  s   
ùrú   c                   @   s”   e Zd ZdZedddddœƒeddƒed	dd
ddd„ d�eddƒeddddddœƒeddddƒeddƒedddd„ d�ed
e	 
¡ edd„ d�g	ZdS )ÚIKEv2_payload_ProposalzIKEv2 Proposalr¼   Nrû   r·   )r   r&   rü   r   rÛ   Ztransr  c                 C   s   |d | j r| j nd S )Nr,   r   ©ÚSPIsize©r÷   rø   rÉ   rÉ   rÊ   r     r  zIKEv2_payload_Proposal.<lambda>©ÚadjustZproposalr%   ÚprotorÏ   ÚAHr    )r%   r&   r'   r
  ÚSPIÚBZtrans_nbr¶   c                 C   s   | j S rþ   r	  rÿ   rÉ   rÉ   rÊ   r     r  ©Úlength_fromc                 C   s   | j d | j S r  )rÛ   r
  rÿ   rÉ   rÉ   rÊ   r     r  )rÌ   rÍ   rÎ   rí   r   r	   r   r   r   r#   r¿   rú   rï   rÉ   rÉ   rÉ   rÊ   r    s   ÷r  c                	   @   sR   e Zd ZdZeddeƒedddg d¢ƒeddd	d
dd„ d�ed	ddd„ d�gZ	dS )rÄ   zIKEv2 Payloadr¼   NrÓ   r   r,   )ÚcriticalrÔ   rÕ   Zres3Zres4Zres5rØ   rÙ   rÛ   Úloadr  c                 C   s   |d S ©Nr(   rÉ   r  rÉ   rÉ   rÊ   r     r  zIKEv2_payload.<lambda>r  r¶   c                 C   s
   | j d S r  r  ©rø   rÉ   rÉ   rÊ   r     r  r  )
rÌ   rÍ   rÎ   rí   r   rÁ   r   r   r   rï   rÉ   rÉ   rÉ   rÊ   rÄ     s   
ürÄ   c                
   @   sh   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�edde
ƒeddƒedddd„ d�gZdS )ÚIKEv2_payload_AUTHzIKEv2 Authenticationr¼   rM   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   !  r  zIKEv2_payload_AUTH.<lambda>r  Z	auth_typerÕ   r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   $  r  r  )rÌ   rÍ   rÎ   rí   rÏ   Úoverload_fieldsr   rÁ   r	   r   ÚIKEv2AuthenticationTypesr   r   rï   rÉ   rÉ   rÉ   rÊ   r    s   

úr  c                	   @   sV   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e
dddd„ d�gZdS )ÚIKEv2_payload_VendorIDúIKEv2 Vendor IDr¼   rQ   Nrü   r   rÛ   ÚvendorIDr  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   .  r  zIKEv2_payload_VendorID.<lambda>r  r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   /  r  r  ©rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   r   rï   rÉ   rÉ   rÉ   rÊ   r  (  s   
ür  c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚTrafficSelectorNc                 O   sT   |rPt |ƒdkrPt d|dd… ¡d }|dkr4tS |dkr@tS |dkrLtS tS tS )Nr2   rÜ   r   r%   r+   r,   r-   )rÀ   rÝ   rÞ   ÚIPv4TrafficSelectorÚIPv6TrafficSelectorÚEncryptedTrafficSelectorÚRawTrafficSelector©rß   rà   rá   râ   Zts_typerÉ   rÉ   rÊ   rã   4  s    zTrafficSelector.dispatch_hookc                 C   s   d|fS )Nr¶   rÉ   ©rÅ   ÚsrÉ   rÉ   rÊ   Úextract_paddingB  s    zTrafficSelector.extract_padding)N)rÌ   rÍ   rÎ   rð   rã   r'  rÉ   rÉ   rÉ   rÊ   r  3  s   r  c                	   @   sP   e Zd ZdZeddeƒeddeƒeddƒedd	ƒed
dƒeddƒeddƒgZ	dS )r   zIKEv2 IPv4 Traffic SelectorÚTS_typer+   ÚIP_protocol_IDNrÛ   r2   Ú
start_portr   Úend_portrô   Zstarting_address_v4z192.168.0.1Zending_address_v4z192.168.0.255)
rÌ   rÍ   rÎ   rí   r   ÚIKEv2TrafficSelectorTypesÚIPProtocolIDsr   r   rï   rÉ   rÉ   rÉ   rÊ   r   F  s   

ùr   c                	   @   sP   e Zd ZdZeddeƒeddeƒeddƒedd	ƒed
dƒeddƒeddƒgZ	dS )r!  zIKEv2 IPv6 Traffic Selectorr(  r,   r)  NrÛ   r5   r*  r   r+  rô   Zstarting_address_v6z2001::Zending_address_v6)
rÌ   rÍ   rÎ   rí   r   r,  r-  r   r   rï   rÉ   rÉ   rÉ   rÊ   r!  S  s   

ùr!  c                   @   sp   e Zd ZdZeddeƒeddeƒeddƒedd	ƒ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 )r"  ú IKEv2 Encrypted Traffic Selectorr(  r-   r)  NrÛ   r2   rü   r   Zstarting_address_FCrÕ   Zending_address_FCZstarting_R_CTLZending_R_CTLZstarting_typeZending_type)rÌ   rÍ   rÎ   rí   r   r,  r-  r   r	   r   rï   rÉ   rÉ   rÉ   rÊ   r"  `  s   

õr"  c                	   @   sF   e Zd ZdZeddeƒeddeƒedddddd	„ d
�edde	ƒgZ
dS )r#  r.  r(  Nr)  rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   v  r  zRawTrafficSelector.<lambda>r  r¶   )rÌ   rÍ   rÎ   rí   r   r,  r-  r   r   r   rï   rÉ   rÉ   rÉ   rÊ   r#  q  s   


ür#  c                   @   st   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e	ddddd�e
ddƒeddedd„ dd„ d�gZdS )ÚIKEv2_payload_TSiz"IKEv2 Traffic Selector - Initiatorr¼   rR   Nrü   r   rÛ   Útraffic_selectorr  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   �  r  zIKEv2_payload_TSi.<lambda>r  Únumber_of_TSsr  ©r  Zcount_ofrÕ   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   †  r  c                 C   s   | j S rþ   ©r1  r  rÉ   rÉ   rÊ   r   ‡  r  ©r  Z
count_from©rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   r   r   r  rï   rÉ   rÉ   rÉ   rÊ   r/  {  s   
ÿþùr/  c                   @   st   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e	ddddd�e
ddƒeddedd„ dd„ d�gZdS )ÚIKEv2_payload_TSrz"IKEv2 Traffic Selector - Responderr¼   rS   Nrü   r   rÛ   r0  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   ‘  r  zIKEv2_payload_TSr.<lambda>r  r1  r  r2  rÕ   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   –  r  c                 C   s   | j S rþ   r3  r  rÉ   rÉ   rÊ   r   —  r  r4  r5  rÉ   rÉ   rÉ   rÊ   r6  ‹  s   
ÿþùr6  c                	   @   sV   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e
dddd„ d�gZdS )ÚIKEv2_payload_Deleter  r¼   rP   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   ¡  r  zIKEv2_payload_Delete.<lambda>r  r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   ¢  r  r  r  rÉ   rÉ   rÉ   rÊ   r7  ›  s   
ür7  c                	   @   s\   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e
de ¡ edd„ d�gZdS )ÚIKEv2_payload_SAzIKEv2 SAr¼   r=   Nrü   r   rÛ   Úpropr  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   ¬  r  zIKEv2_payload_SA.<lambda>r  c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   ­  r  r  )rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   r   r#   r¿   r  rï   rÉ   rÉ   rÉ   rÊ   r8  ¦  s   
ür8  c                	   @   sV   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e
dddd„ d�gZdS )ÚIKEv2_payload_NoncezIKEv2 Noncer¼   rN   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   ·  r  zIKEv2_payload_Nonce.<lambda>r  r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   ¸  r  r  r  rÉ   rÉ   rÉ   rÊ   r:  ±  s   
ür:  c                   @   s�   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�edddddddœƒe	ddddƒe
ddeƒedddd„ d�edddd„ d�gZdS )ÚIKEv2_payload_NotifyzIKEv2 Notifyr¼   rO   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   Â  r  zIKEv2_payload_Notify.<lambda>r  r  rH   ZIKEr  r    )r   r%   r&   r'   r
  r  r  Útyper¶   c                 C   s   | j S rþ   r	  r  rÉ   rÉ   rÊ   r   Æ  r  r  c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   Ç  r  )rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   r   ÚIKEv2NotifyMessageTypesr   rï   rÉ   rÉ   rÉ   rÊ   r;  ¼  s   

ør;  c                
   @   sp   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e
dded d ƒeddƒedddd„ d�gZdS )ÚIKEv2_payload_KEzIKEv2 Key Exchanger¼   rF   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   Ñ  r  zIKEv2_payload_KE.<lambda>r  ÚgrouprG   r%   rÕ   r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   Ô  r  r  )rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   r   ÚIKEv2TransformTypesr   r   rï   rÉ   rÉ   rÉ   rÊ   r>  Ë  s   
úr>  c                   @   sš   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�eddddddddœƒe
ddƒeeddƒdd„ feddƒdd„ fgedddd„ d�ƒgZdS )ÚIKEv2_payload_IDiz IKEv2 Identification - Initiatorr¼   rI   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   Þ  r  zIKEv2_payload_IDi.<lambda>r  ÚIDtyper%   Ú	IPv4_addrÚFQDNÚ
Email_addrÚ	IPv6_addrÚKey©r%   r&   r'   r)   r?   rÕ   ÚIDú	127.0.0.1c                 C   s
   | j dkS rä   ©rB  r  rÉ   rÉ   rÊ   r   ã  r  ú::1c                 C   s
   | j dkS ©Nr)   rK  r  rÉ   rÉ   rÊ   r   ä  r  r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   æ  r  r  ©rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   r   r   r   r   r   rï   rÉ   rÉ   rÉ   rÊ   rA  Ø  s   
þûúrA  c                   @   sš   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�eddddddddœƒe
ddƒeeddƒdd„ feddƒdd„ fgedddd„ d�ƒgZdS )ÚIKEv2_payload_IDrz IKEv2 Identification - Responderr¼   rJ   Nrü   r   rÛ   rI  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   ñ  r  zIKEv2_payload_IDr.<lambda>r  rB  r%   rC  rD  rE  rF  rG  rH  rÕ   rJ  c                 C   s
   | j dkS rä   rK  r  rÉ   rÉ   rÊ   r   ö  r  rL  c                 C   s
   | j dkS rM  rK  r  rÉ   rÉ   rÊ   r   ÷  r  r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   ù  r  r  rN  rÉ   rÉ   rÉ   rÊ   rO  ë  s   
þûúrO  c                	   @   sV   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e
dddd„ d�gZdS )ÚIKEv2_payload_Encryptedz!IKEv2 Encrypted and Authenticatedr¼   rT   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r     r  z IKEv2_payload_Encrypted.<lambda>r  r¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r     r  r  r  rÉ   rÉ   rÉ   rÊ   rP  þ  s   
ürP  c                	   @   sh   e Zd ZdZeddeƒeddddƒeeddƒd	d
„ fe	ddƒdd
„ fge
dddd
„ d�ƒgZdd„ ZdS )ÚConfigurationAttributezIKEv2 Configuration Attributer<  r%   rÛ   NÚvaluer  rJ  c                 C   s   | j dko| jdv S )Nr(   )r%   r&   r'   r(   r*   r5   ©rÛ   r<  r  rÉ   rÉ   rÊ   r     r  zConfigurationAttribute.<lambda>rL  c                 C   s   | j dko| jdv S )Nr2   )r>   r.   rA   rS  r  rÉ   rÉ   rÊ   r     r  r¶   c                 C   s   | j S rþ   r  r  rÉ   rÉ   rÊ   r     r  r  c                 C   s   d|fS )Nr  rÉ   r%  rÉ   rÉ   rÊ   r'    s    z&ConfigurationAttribute.extract_padding)rÌ   rÍ   rÎ   rí   r   Ú IKEv2ConfigurationAttributeTypesr   r   r   r   r   rï   r'  rÉ   rÉ   rÉ   rÊ   rQ  	  s   
ÿÿýùýrQ  c                   @   sj   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�edde
ƒeddƒeddedd„ d�gZdS )ÚIKEv2_payload_CPzIKEv2 Configurationr¼   rT   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   #  r  zIKEv2_payload_CP.<lambda>r  ZCFGTyper%   rÕ   Ú
attributesc                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   '  r  r  )rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   Ú!IKEv2ConfigurationPayloadCFGTypesr   r   rQ  rï   rÉ   rÉ   rÉ   rÊ   rU    s   

ÿúrU  c                
   @   sf   e Zd ZdZeddiiZeddeƒeddƒe	dddd	d
d„ d�e
ddƒe
ddƒedddd„ d�gZdS )Ú IKEv2_payload_Encrypted_FragmentzIKEv2 Encrypted Fragmentr¼   r[   Nrü   r   rÛ   r  r  c                 C   s   |d S r  rÉ   r  rÉ   rÉ   rÊ   r   1  r  z)IKEv2_payload_Encrypted_Fragment.<lambda>r  Zfrag_numberr%   Z
frag_totalr¶   c                 C   s
   | j d S r  r  r  rÉ   rÉ   rÊ   r   4  r  r  )rÌ   rÍ   rÎ   rí   rÏ   r  r   rÁ   r	   r   r   r   rï   rÉ   rÉ   rÉ   rÊ   rX  +  s   
úrX  c                	   @   sT   e Zd ZdZeddeƒeddƒeddddd	d
„ d�eddeƒe	dddd
„ d�gZ
dS )ÚIKEv2_payload_CERTREQzIKEv2 Certificate Requestr¼   Nrü   r   rÛ   Ú	cert_datar  c                 C   s   |d S rM  rÉ   r  rÉ   rÉ   rÊ   r   =  r  zIKEv2_payload_CERTREQ.<lambda>r  Ú	cert_typer¶   c                 C   s
   | j d S rM  r  r  rÉ   rÉ   rÊ   r   ?  r  r  ©rÌ   rÍ   rÎ   rí   r   rÁ   r	   r   ÚIKEv2CertificateEncodingsr   rï   rÉ   rÉ   rÉ   rÊ   rY  8  s   

ûrY  c                   @   s   e Zd Zeddd„ƒZdS )ÚIKEv2_payload_CERTNc                 O   sH   |rDt |ƒdkrDt d|dd… ¡d }|dkr4tS |dkr@tS tS tS )Nr2   rÜ   r(   r)   r   r+   )rÀ   rÝ   rÞ   ÚIKEv2_payload_CERT_CRTÚIKEv2_payload_CERT_CRLÚIKEv2_payload_CERT_STRr$  rÉ   rÉ   rÊ   rã   D  s    z IKEv2_payload_CERT.dispatch_hook)N)rÌ   rÍ   rÎ   rð   rã   rÉ   rÉ   rÉ   rÊ   r^  C  s   r^  c                
   @   sZ   e Zd ZdZeddeƒeddƒeddddd	d
„ d�eddeƒe	de
dƒe
dd
„ d�gZdS )r_  úIKEv2 Certificater¼   Nrü   r   rÛ   Zx509Certr  c                 C   s   |d S rM  rÉ   r  rÉ   rÉ   rÊ   r   V  r  zIKEv2_payload_CERT_CRT.<lambda>r  r[  r(   r¶   c                 C   s
   | j d S rM  r  r  rÉ   rÉ   rÊ   r   X  r  r  )rÌ   rÍ   rÎ   rí   r   rÁ   r	   r   r]  r   r   rï   rÉ   rÉ   rÉ   rÊ   r_  Q  s   

ûr_  c                
   @   sZ   e Zd ZdZeddeƒeddƒeddddd	d
„ d�eddeƒe	de
dƒe
dd
„ d�gZdS )r`  rb  r¼   Nrü   r   rÛ   Zx509CRLr  c                 C   s   |d S rM  rÉ   r  rÉ   rÉ   rÊ   r   a  r  zIKEv2_payload_CERT_CRL.<lambda>r  r[  r+   r¶   c                 C   s
   | j d S rM  r  r  rÉ   rÉ   rÊ   r   c  r  r  )rÌ   rÍ   rÎ   rí   r   rÁ   r	   r   r]  r   r   rï   rÉ   rÉ   rÉ   rÊ   r`  \  s   

ûr`  c                	   @   sT   e Zd ZdZeddeƒeddƒeddddd	d
„ d�eddeƒe	dddd
„ d�gZ
dS )ra  rb  r¼   Nrü   r   rÛ   rZ  r  c                 C   s   |d S rM  rÉ   r  rÉ   rÉ   rÊ   r   l  r  zIKEv2_payload_CERT_STR.<lambda>r  r[  r¶   c                 C   s
   | j d S rM  r  r  rÉ   rÉ   rÊ   r   n  r  r  r\  rÉ   rÉ   rÉ   rÊ   ra  g  s   

ûra  r»   r¼   iô  )Údport)Úsport)rc  rd  i”  c                   @   s"   e Zd ZdZd Zeddd„ƒZdS )Ú	UDP_ENCAPzN
    UDP Encapsulation of IPsec ESP Packets [RFC3948] (for NAT-Traversal)
    Nc                 O   s\   |rXt |ƒdkr0t d|dd… ¡d dkr0tS t |ƒdkrTt d|¡d dkrTtS tS | S )Nr(   ré   r   r%   rÜ   éÿ   )rÀ   rÝ   rÞ   ÚNON_ESPÚNAT_KEEPALIVEr    )rß   rà   rá   râ   rÉ   rÉ   rÊ   rã   “  s    ( zUDP_ENCAP.dispatch_hook)N)rÌ   rÍ   rÎ   Ú__doc__rí   rð   rã   rÉ   rÉ   rÉ   rÊ   re  �  s   re  c                   @   s    e Zd ZeddƒgZdd„ ZdS )rg  Znon_espr   c                 C   s   t S rþ   )rÏ   rå   rÉ   rÉ   rÊ   rË   ¥  s    zNON_ESP.guess_payload_classN)rÌ   rÍ   rÎ   r   rï   rË   rÉ   rÉ   rÉ   rÊ   rg  Ÿ  s   ÿrg  c                   @   s    e Zd ZeddƒgZdd„ ZdS )rh  Znat_keepaliverf  c                 C   s   t jS rþ   )r#   r¿   rå   rÉ   rÉ   rÊ   rË   ¯  s    z!NAT_KEEPALIVE.guess_payload_classN)rÌ   rÍ   rÎ   r   rï   rË   rÉ   rÉ   rÉ   rÊ   rh  ©  s   ÿrh  c                 K   s8   t t| d�tƒ  ttdƒdd� ttƒ d� fi |¤ŽS )z.Send a IKEv2 SA to an IP and wait for answers.)Údstr,   rF   )rÐ   rÒ   )r9  )r"   r   r   rÏ   r$   r8  r  )ÚipÚkwargsrÉ   rÉ   rÊ   Ú	ikev2scan¾  s    ÿ
ÿÿrm  )lri  r½   rÝ   Zscapy.packetr   r   r   r   r   r   Zscapy.fieldsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscapy.layers.x509r   r   Zscapy.layers.inetr   r   Zscapy.layers.ipsecr    Zscapy.layers.isakmpr!   Zscapy.sendrecvr"   Zscapy.configr#   Zscapy.volatiler$   ZIKEv2AttributeTypesr  r=  r]  r,  rW  rT  r-  r@  r  ÚnÚvalÚtmpÚer  rÁ   Úextendrî   rº   rÏ   rñ   rú   r  rÄ   r  r  r  r   r!  r"  r#  r/  r6  r7  r8  r:  r;  r>  rA  rO  rP  rQ  rU  rX  rY  r^  r_  r`  ra  ZIKEv2_payload_type_overloadÚ	enumerateÚiZpayloadnamerí   rÂ   ÚcopyZ_overload_fieldsre  rg  rh  rm  rÉ   rÉ   rÉ   rÊ   Ú<module>   sŠ   Xèçø	÷
óòéèÿÿ´Qö¸Lôýüé€ ñ 
'





