
    h*'                     r   d dl 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 d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ  G d d	e          Z G d
 de          ZddddddddddddddddZddddZ G d  d!e          Zd"d#d$d%Z G d& d'e          Z G d( d)e          Zd*d+d,d-d.d/d0Z  G d1 d2e          Z! G d3 d4e          Z" G d5 d6e          Z# G d7 d8e          Z$ G d9 d:e          Z% G d; d<e          Z& G d= d>e          Z' G d? d@e'          Z( G dA dBe          Z)dCdDdEdFdGd/dHdIdJdKdLdMdNZ* G dO dPe          Z+ G dQ dRe          Z, G dS dTe          Z- eeedUV            eeedUW            eeedXY            eee!dZY            eee"d[Y            eee#d\Y            eee$d]Y            eee%d^Y            eee&d_Y            eee)d`Y            eee+daY            eee,dbY            eee-dcY            eeeddY            eee            ee!e            ee"e            ee#e            ee$e            ee%e            ee&e            ee)e            ee+e            ee,e            ee-e            eee           deS )f    )Packetbind_layers)	BitEnumFieldByteEnumField	ByteFieldConditionalFieldFieldLenFieldFieldListFieldPacketListField
ShortFieldStrLenField)TCP)Scapy_Exception)orbchb)RandNum)confc                        e Zd Zd Zd Zd ZdS )VariableFieldLenFieldc                    |                      ||          }g }|r|dk    r|                    |dz             |dz  }nZ|                    |           t          |          dz
  d                    fdt	          |          D                       }||z   S t          |          dk    rt          d| j        j        z            ||dz   S )	N             c              3   R   K   | ]!\  }}t          ||k    rd ndz            V  "dS )r   r   N)r   ).0ival
lastoffsets      V/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/mqtt.py	<genexpr>z1VariableFieldLenField.addfield.<locals>.<genexpr>)   sT        ?  ?$*As !$CZ11S$I J J  ?  ?  ?  ?  ?  ?r      %s: malformed length field    )i2mappendlenjoin	enumerater   	__class____name__)selfpktsr   datar   s        @r    addfieldzVariableFieldLenField.addfield   s    hhsC   	?SyyC#I&&&C    YY]
xx  ?  ?  ?  ?.7oo ?  ?  ? ? ?4x4yy1}}%&B&*n&='> ? ? ?  	? 7{r   c                     d}t          |          D ]^\  }}t          |          }||dz  d|z  z  z  }|dz  dk    r||dz   d          |fc S |dk    rt          d| j        j        z            _d S )Nr   r   r   r      r#   )r)   r   r   r*   r+   )r,   r-   r.   valueoffsetcurbytes         r    getfieldzVariableFieldLenField.getfield2   s    (|| 	? 	?OFG'llGgmv66E}!!!~u,,,,zz%&B&*n&='> ? ? ? 	? 	?r   c                     t                      S N)RandVariableFieldLenr,   s    r    randvalzVariableFieldLenField.randval=   s    #%%%r   N)r+   
__module____qualname__r0   r6   r;    r   r    r   r      sA          &	? 	? 	?& & & & &r   r   c                       e Zd Zd ZdS )r9   c                 2    t          j        | dd           d S )Nr   i)r   __init__r:   s    r    rA   zRandVariableFieldLen.__init__B   s    q),,,,,r   N)r+   r<   r=   rA   r>   r   r    r9   r9   A   s#        - - - - -r   r9   CONNECTCONNACKPUBLISHPUBACKPUBRECPUBRELPUBCOMP	SUBSCRIBESUBACKUNSUBSCRIBEUNSUBACKPINGREQPINGRESP
DISCONNECTAUTH)r   r2   r"                  	   
                  zAt most once deliveryzAt least once deliveryzExactly once delivery)r   r   r2   c                       e Zd ZdZ eddde           edddddd	           ed
dde           edddddd	           edddd           gZdS )MQTTzMQTT fixed headertyper   rQ   DUPr   DisabledEnabledr   r   QOSr2   RETAINr'   Nc                 *    t          | j                  S r8   )r'   payload)r-   xs     r    <lambda>zMQTT.<lambda>o   s    C4D4D r   )	length_ofadjust)	r+   r<   r=   namer   CONTROL_PACKET_TYPE	QOS_LEVELr   fields_descr>   r   r    r^   r^   b   s        DVQ#677UAqj&/#1 #1 	2 	2UAq),,Xq!)2&4 &4 	5 	5
 	eTU%D%D	G 	G 	GKKKr   r^   zv3.1zv3.1.1zv5.0)r"   rQ   rR   c                      e Zd ZdZ eddd           eddd            ed	d
e           edddddd           edddddd           edddddd           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           e
dd           eddd           eddd            e eddd          d            e eddd           d             e ed!dd"          d#            e ed"dd$           d%            e ed&dd'          d(            e ed'dd)           d*            e ed+dd,          d-            e ed,dd.           d/           gZdS )0MQTTConnectzMQTT connectlengthN	protonamerj    c                     | j         S r8   rr   r-   s    r    ri   zMQTTConnect.<lambda>       CJ r   length_from
protolevelrR   usernameflagr   r   ra   rb   rc   passwordflagwillretainflagwillQOSflagr2   willflag	cleansessreservedkliveclientIdlenclientIdc                     | j         S r8   )r   rx   s    r    ri   zMQTTConnect.<lambda>   s    CO r   wtoplen	willtopicc                     | j         dk    S Nr   r   rx   s    r    ri   zMQTTConnect.<lambda>       S\Q%6 r   c                     | j         S r8   )r   rx   s    r    ri   zMQTTConnect.<lambda>       S[ r   c                     | j         dk    S r   r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   wmsglenwillmsgc                     | j         dk    S r   r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   c                     | j         S r8   )r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   c                     | j         dk    S r   r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   userlenusernamec                     | j         dk    S r   r}   rx   s    r    ri   zMQTTConnect.<lambda>       S%5%: r   c                     | j         S r8   )r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   c                     | j         dk    S r   r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   passlenpasswordc                     | j         dk    S r   r~   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   c                     | j         S r8   )r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   c                     | j         dk    S r   r   rx   s    r    ri   zMQTTConnect.<lambda>   r   r   )r+   r<   r=   rl   r	   r   r   PROTOCOL_LEVELr   rn   r   r   ro   r>   r   r    rq   rq   z   s       Dh<<<K 6 6	8 	8 	8lA~66^Qz/8,: ,: 	; 	;^Qz/8,: ,: 	; 	;%q!1:.< .< 	= 	=]Aq)44ZA:+4(6 (6 	7 	7[!QJ,5)7 )7 	8 	8ZA:+4(6 (6 	7 	7
7AmTZ@@@J ; ;	= 	= 	= 	y$+NNN66	8 	8["1H1HJ J J66	8 	8 	y$)LLL66	8 	8Y1H1HJ J J66	8 	8 	y$*MMM::	< 	<Z1H1HJ J J::	< 	< 	y$*MMM::	< 	<Z1H1HJ J J::	< 	<Q+KKKr   rq   c                       e Zd ZdZg ZdS )MQTTDisconnectzMQTT disconnectN)r+   r<   r=   rl   ro   r>   r   r    r   r      s        DKKKr   r   zConnection AcceptedzUnacceptable protocol versionzIdentifier rejectedzServer unavailablezBad username/passwordzNot authorized)r   r   r2   r"   rQ   rR   c                   D    e Zd ZdZ edd           edde          gZdS )MQTTConnackzMQTT connacksessPresentFlagr   retcodeN)r+   r<   r=   rl   r   r   RETURN_CODEro   r>   r   r    r   r      s;        D	#Q''iK00KKKr   r   c                       e Zd ZdZ eddd           eddd            e ed	d          d
            eddd           gZdS )MQTTPublishzMQTT publishrr   Ntopicrt   ru   c                     | j         S r8   rw   rx   s    r    ri   zMQTTPublish.<lambda>   ry   r   rz   msgidc                 B    | j         j        dk    p| j         j        dk    S )Nr   r2   )
underlayerrd   rx   s    r    ri   zMQTTPublish.<lambda>   s%    cn&8A&= '>&)n&8A&= r   r3   c                 ~    | j         j        dk    r| j         j        | j        z
  dz
  n| j         j        | j        z
  dz
  S )Nr   r2   rQ   )r   rd   r'   rr   rx   s    r    ri   zMQTTPublish.<lambda>   sD    ~)Q.. -0N,>,Ka,O,ON&3a7 r   )	r+   r<   r=   rl   r	   r   r   r   ro   r>   r   r    r   r      s        Dh888GR 6 6	8 	8 	8GT22? ?	@ 	@ 	GR!8 !8	9 	9 	9KKKr   r   c                   ,    e Zd ZdZ edd          gZdS )
MQTTPubackzMQTT pubackr   Nr+   r<   r=   rl   r   ro   r>   r   r    r   r      )        D
7D!!KKKr   r   c                   ,    e Zd ZdZ edd          gZdS )
MQTTPubreczMQTT pubrecr   Nr   r>   r   r    r   r      r   r   r   c                   ,    e Zd ZdZ edd          gZdS )
MQTTPubrelzMQTT pubrelr   Nr   r>   r   r    r   r      r   r   r   c                   ,    e Zd ZdZ edd          gZdS )MQTTPubcompzMQTT pubcompr   Nr   r>   r   r    r   r      s)        D
7D!!KKKr   r   c                   R    e Zd ZdZ eddd           eddd           gZd	 ZdS )
	MQTTTopicz
MQTT topicrr   Nr   rt   ru   c                     | j         S r8   rw   rx   s    r    ri   zMQTTTopic.<lambda>   s    
 r   rz   c                     t           j        S r8   )r   padding_layer)r,   rg   s     r    guess_payload_classzMQTTTopic.guess_payload_class   s    !!r   )r+   r<   r=   rl   r	   r   ro   r   r>   r   r    r   r      s[        Dh888GR-B-BCCCK
" " " " "r   r   c                   :    e Zd Zej         edde          gz   ZdS )MQTTTopicQOSrd   r   N)r+   r<   r=   r   ro   r   rn   r>   r   r    r   r      s,        '==9+M+M*NNKKKr   r   c                   F    e Zd ZdZ edd           edg e          gZdS )MQTTSubscribezMQTT subscriber   Ntopicspkt_cls)r+   r<   r=   rl   r   r   r   ro   r>   r   r    r   r      s=        D
7D!!"l;;;KKKr   r   zGranted QoS 0zGranted QoS 1zGranted QoS 2zUnspecified errorzImplementation specific errorzTopic Filter invalidzPacket Identifier in usezQuota exceededz"Shared Subscriptions not supportedz&Subscription Identifiers not supportedz$Wildcard Subscriptions not supported)r   r   r2   r                           c            
       Z    e Zd ZdZ edd           edd edde                    gZdS )
MQTTSubackzMQTT subackr   Nretcodesru   )	r+   r<   r=   rl   r   r
   r   ALLOWED_RETURN_CODEro   r>   r   r    r   r     sI        D
7D!!z4r4AT)U)UVVKKKr   r   c                   F    e Zd ZdZ edd           edg e          gZdS )MQTTUnsubscribezMQTT unsubscriber   Nr   r   )r+   r<   r=   rl   r   r   r   ro   r>   r   r    r   r     s=        D
7D!!"i888KKKr   r   c                   ,    e Zd ZdZ edd          gZdS )MQTTUnsubackzMQTT unsubackr   Nr   r>   r   r    r   r   %  s)        D
7D!!KKKr   r   i[  )sport)dportr   )r_   r2   r"   rQ   rR   rS   rT   rU   rV   rW   rX   r[   N).scapy.packetr   r   scapy.fieldsr   r   r   r   r	   r
   r   r   r   scapy.layers.inetr   scapy.errorr   scapy.compatr   r   scapy.volatiler   scapy.configr   r   r9   rm   rn   r^   r   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   r   r    <module>r      s   - , , , , , , ,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 " ! ! ! ! ! ' ' ' ' ' ' ! ! ! ! ! ! ! ! " " " " " "      
 &  &  &  &  &M  &  &  &F- - - - -7 - - -   (  	    6   $  - - - - -& - - -`    V    &     &       &                             &   " " " " " " " "O O O O O9 O O O    F    



)

 
$

.
2
0              f       6    CT " " " " CT " " " " D+A & & & & D+A & & & & D+A & & & & D*1 % % % % D*1 % % % % D*1 % % % % D+A & & & & D-a ( ( ( ( D*1 % % % % D/ + + + + D,R ( ( ( ( D.r * * * * K    K    K    J    J    J    K    M4       J    OT " " " L$    ND ! ! ! ! !r   