
    hW                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZ ddlZddlZddlZddlZddlmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZmZmZ dd	l 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/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 e2rddl7Zddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>Zddl?Z G d de@          ZA G d de@          ZBd ZC ejD        eBd           ZEdeE_          G d deA          ZF G d d          ZG G d deG          ZH G d deG          ZI G d  d!          ZJ G d" d#e*e/d$                            ZK G d% d&e*e'd'e&f                            ZLd( ZM G d) d*e(eNe&f                   ZO G d+ d,          ZP G d- d.          ZQ G d/ d0ejR        jS                  ZTd1 ZUd2 ZVd3 ZWd4 ZXd5 ZYd6 ZZd7 Z[d8 Z\d9 Z]d: Z^ G d; d<eA          Z_e_j`        s8 ej        d=           d>D ]%Zaeae_jb        v re_jb        c                    ea           & e_            Zdeje        d?k    redjf        g                                 d@ ZhdA Zi ejj        ei           dS )Bz-
Implementation of the configuration object.
    N)	dataclass)Enum)VERSION)
BasePacket)DARWINWINDOWSLINUXBSDSOLARIS)log_loading	log_scapyScapyInvalidPlatformExceptionwarning)
ColorThemeNoThemeapply_ipython_style)castAnyCallableDictIteratorListNoReturnOptionalSetTupleTypeUnionoverloadTYPE_CHECKING)
ModuleType)DecoratorCallable)NmapKnowledgeBase)Packet)SuperSocketc                        e Zd Zd Zd Zd ZdS )	ConfClassc                 B    |j                                         | _         d S N)__dict__copy)selfcnfs     P/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/config.py	configurezConfClass.configureK   s    ))++    c                      t          |           S r)   strr,   s    r.   __repr__zConfClass.__repr__O   s    4yyr0   c                    d}| j         j                                        }|                    | j                   t	          |          }|D ]}|d         dk    rt          t          | |                    }d                    |                                          }dt          t          |          d          z
  }t          |          |k    r|d |dz
           dz   }||d	d
|dz  }|d d         S )N r   _ L   
      z...10z = 
)	__class__r*   r+   updatesortedreprgetattrjoinsplitmaxlen)r,   sdkeyskeysirwlens          r.   __str__zConfClass.__str__S   s    ',,..T]###e}} 	- 	-Ats{{q))**HHQWWYY''CAOO+q66D==)4!8)u,Aqqqq!!!,,"vr0   N)__name__
__module____qualname__r/   r5   rO    r0   r.   r'   r'   J   sA        , , ,      r0   r'   c                   >    e Zd Z	 	 ddZddZed             Zd ZdS )InterceptorNc                 p    || _         d|z  | _        || _        || _        ||ng | _        ||ni | _        d S Nz_intercepted_%s)nameintnamedefaulthookargskargs)r,   rX   rZ   r[   r\   r]   s         r.   __init__zInterceptor.__init__e   sI     	(4/	 ,DD"	#/UUR


r0   c                     t          || j                  st          || j        | j                   t	          || j                  S r)   )hasattrrY   setattrrZ   rD   )r,   objtyps      r.   __get__zInterceptor.__get__t   s>    sDL)) 	5Ct|444sDL)))r0   c                 2    d|z  }t          | ||           d S rW   )ra   )rb   rX   valint_names       r.   set_from_hookzInterceptor.set_from_hookz   s&     %t+Xs#####r0   c                     t          || j        | j                  } | j        | j        ||g| j        R i | j        }t          || j        |           d S r)   )rD   rY   rZ   r[   rX   r\   r]   ra   )r,   rb   rf   olds       r.   __set__zInterceptor.__set__   s\    c4<66di	3FdiFFF4:FFT\3'''''r0   )NNr)   )rP   rQ   rR   r^   rd   staticmethodrh   rk   rS   r0   r.   rU   rU   d   sn        
 8 8 8 8* * * * $ $ \$
( ( ( ( (r0   rU   c                     t           j        |          j        }t                              t
          | |           t          d          )NzRead-only value !)Confr*   rZ   rU   rh   conf
ValueError)rX   rZ   s     r.   	_readonlyrq      s8    mD!)GdD'222
(
)
))r0   c                      t          |           S r)   )rq   )rX   r\   kwargss      r.   <lambda>rt      s    	$ r0   )r[   zRead-only class attributec                   R   e Zd ZU dZeed<   erdndZeed<   eZeed<   eZ	eed<   eZ
eed<   d	Zeed	<   d
Zeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   ej                            ej                            d          ddd          dgZee         ed<   dS )ProgPathz<System default>_defaultopenzxdg-openuniversal_open	pdfreaderpsreader	svgreaderdotdisplaytcpdump	tcpreplayhexerhexedittshark	wiresharkifconfig~.configextcapz*/usr/lib/x86_64-linux-gnu/wireshark/extcapextcap_foldersN)rP   rQ   rR   rw   r3   __annotations__r   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   ospathrE   
expanduserr   r   rS   r0   r.   rv   rv      s5        &Hc&&&$*:&&
NC:::#Is###"Hc"""#Is###CGSGS Is   GSFC Is   Hc
RW'',,ihOO4!NDI     r0   rv   c                   H    e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
dS )	ConfigFieldListc                 R    t                      | _        t                      | _        d S r)   )setfieldslayersr4   s    r.   r^   zConfigFieldList.__init__   s    eeeer0   c                 "    t          | d          S )Nowners)r`   fs    r.   	_is_fieldzConfigFieldList._is_field   s     q(###r0   c                 2    d | j         D             | _        d S )Nc                 &    h | ]}|j         D ]}|S rS   )r   ).0r   owners      r.   	<setcomp>z5ConfigFieldList._recalc_layer_list.<locals>.<setcomp>   s'    HHHqxHHeuHHHHr0   )r   r   r4   s    r.   _recalc_layer_listz"ConfigFieldList._recalc_layer_list   s    HHdkHHHr0   c                 h      xj          fd|D             z  c_                                           d S )Nc                 >    h | ]}                     |          |S rS   )r   )r   r   r,   s     r.   r   z&ConfigFieldList.add.<locals>.<setcomp>   s*    ===a4>>!+<+<====r0   )r   r   r,   fldss   ` r.   addzConfigFieldList.add   s@    ====4====!!!!!r0   c                 h    | xj         t          |          z  c_         |                                  d S r)   )r   r   r   r   s     r.   removezConfigFieldList.remove   s0    s4yy !!!!!r0   c                 P    t          |t                    r	|| j        v S || j        v S r)   )
isinstancer   r   r   )r,   elts     r.   __contains__zConfigFieldList.__contains__   s.    c:&& 	&$+%%dk!!r0   c                 l    d| j         j        dd                    d | j        D                       dS )N<z [r9   c              3   4   K   | ]}t          |          V  d S r)   r2   r   xs     r.   	<genexpr>z+ConfigFieldList.__repr__.<locals>.<genexpr>   s(      ?\?\1A?\?\?\?\?\?\r0   z]>)r@   rP   rE   r   r4   s    r.   r5   zConfigFieldList.__repr__   s?     "n555sxx?\?\PTP[?\?\?\7\7\7\7\]]r0   N)rP   rQ   rR   r^   rl   r   r   r   r   r   r5   rS   r0   r.   r   r      s          
 $ $ \$I I I" " "
" " "
" " "^ ^ ^ ^ ^r0   r   c                       e Zd ZdS )	EmphasizeNrP   rQ   rR   rS   r0   r.   r   r              Dr0   r   c                       e Zd ZdS )ResolveNr   rS   r0   r.   r   r      r   r0   r   c                   n    e Zd Zd Zd Zd Zd Zed             Zed             Zd Zd Z		 dd
Z
d Zd	S )	Num2Layerc                 "    i | _         i | _        d S r)   )	num2layer	layer2numr4   s    r.   r^   zNum2Layer.__init__   s    r0   c                 ^    |                      ||           |                     ||           d S r)   )register_num2layerregister_layer2numr,   numlayers      r.   registerzNum2Layer.register   s4    U+++U+++++r0   c                     || j         |<   d S r)   )r   r   s      r.   r   zNum2Layer.register_num2layer   s    #sr0   c                     || j         |<   d S r)   )r   r   s      r.   r   zNum2Layer.register_layer2num   s     #ur0   c                     d S r)   rS   r,   items     r.   __getitem__zNum2Layer.__getitem__   	     	r0   c                     d S r)   rS   r   s     r.   r   zNum2Layer.__getitem__   r   r0   c                 `    t          |t                    r| j        |         S | j        |         S r)   r   intr   r   r   s     r.   r   zNum2Layer.__getitem__   s.    dC   	(>$''>$''r0   c                 P    t          |t                    r	|| j        v S || j        v S r)   r   r   s     r.   r   zNum2Layer.__contains__   s.    dC   	*4>))4>))r0   Nc                     || v r| |         n|S r)   rS   r,   r   rZ   s      r.   getzNum2Layer.get   s    
 "T\\tDzzw6r0   c           	         g }| j                                         D ]L\  }}|| j        v r| j        |         |k    rd}nd}|                    |d|||j        |j        fz  f           M| j                                        D ]F\  }}|| j         vs| j         |         |k    r'|                    |d||j        |j        fz  f           G|                                 d                    d |D                       S )Nz<->z ->z%#6x %s %-20s (%s)z%#6x <-  %-20s (%s)r>   c              3       K   | ]	\  }}|V  
d S r)   rS   )r   r   ys      r.   r   z%Num2Layer.__repr__.<locals>.<genexpr>  s&      ++tq!++++++r0   )r   itemsr   appendrP   _namesortrE   )r,   lstr   r   dirs        r.   r5   zNum2Layer.__repr__  sB   ...00 	D 	DJC&&4>%+@C+G+GJJ1S#u~5:[5B B C D D D D...00 	I 	IJE3$.((DN3,?5,H,H

C!6#u~:?+:G "G H I I I


yy++s++++++r0   r)   )rP   rQ   rR   r^   r   r   r   r   r   r   r   r5   rS   r0   r.   r   r      s          
, , ,
$ $ $$ $ $   X   X( ( (* * * 7 7 7 7, , , , ,r0   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
LayersListc                 d    t                               |            i | _        d| _        i | _        d S )NF)listr^   ldictfiltered_backup_dictr4   s    r.   r^   zLayersList.__init__  s0    d
r0   c                 @    d                     d | D                       S )Nr>   c              3   :   K   | ]}|j         d d|j        V  dS )20: N)rP   rX   )r   r   s     r.   r   z&LayersList.__repr__.<locals>.<genexpr>#  sG       , ," ).

C , , , , , ,r0   )rE   r4   s    r.   r5   zLayersList.__repr__!  s4    yy , ,&*, , , , , 	,r0   c                     |                      |           |j        | j        vrg | j        |j        <   | j        |j                                      |           d S r)   )r   rQ   r   )r,   r   s     r.   r   zLayersList.register&  sW    E4:--+-DJu'(
5#$++E22222r0   c                    g }dd l }	 dd l}n# t          $ r dd l}Y nw xY w| j        D ]\}t          |          j        }|                    ||r-|                                	                    d          d         n|f           ]|S )Nr   r>   )
scapybuiltinsImportError__builtin__r   eval__doc__r   striprF   )r,   resultr   r   r   laydocs          r.   r   zLayersList.layers-  s    	OOOO 	 	 		: 	M 	MCs))#CMM3c J		 1 1$ 7 7 : :sKLLLLs    c                     | j         rt          d          | j                                        D ]?}|D ]:}|| j        vr/|j        dd         | j        |<   fd|j        D             |_        ;@d| _         dS )z:Disable dissection of unused layers to speed up dissectionz)Already filtered. Please disable it firstNc                 (    g | ]}|d          v |S )   rS   )r   r   r   s     r.   
<listcomp>z%LayersList.filter.<locals>.<listcomp>D  s)     ) ) )!r0   T)r   rp   r   valuesr   payload_guess)r,   r   r   clss    `  r.   filterzLayersList.filter;  s     = 	JHIII:$$&& 	 	C  d///-0->qqq-AD%c*) ) ) )#&#4) ) )C% r0   c                     | j         st          d          | j                                        D ]}|D ]}| j        |         |_        | j                                         d| _         dS )z#Re-enable dissection for all layersz!Not filtered. Please filter firstFN)r   rp   r   r   r   r   clear)r,   r   r   s      r.   unfilterzLayersList.unfilterI  s     } 	B@AAA:$$&& 	; 	;C ; ;$($5c$:!!;!!!r0   N)	rP   rQ   rR   r^   r5   r   r   r   r   rS   r0   r.   r   r     sn          , , ,
3 3 3    	 	 	 	 	r0   r   zscapy.packet.Packetc                       e Zd Zd Zd ZdS )CommandsListc                    g }t          | d           D ]`}|j        r|j        nd}|                                                    dd          d         }|                    |j        dd|           ad                    |          S )	Nc                     | j         S r)   )rP   )r   s    r.   rt   z'CommandsList.__repr__.<locals>.<lambda>Y  s    QZ r0   )keyz--r>   r   r   22r   )rB   r   lstriprF   r   rP   rE   )r,   rI   lir   s       r.   r5   zCommandsList.__repr__V  s    #7#7888 	7 	7B "
4"**C**,,$$T1--a0CHHBKKKK56666yy||r0   c                 0    |                      |           |S r)   )r   )r,   cmds     r.   r   zCommandsList.register_  s    C
r0   N)rP   rQ   rR   r5   r   rS   r0   r.   r   r   U  s2              r0   r   .c                  R    t          t          t          j                             dS )z!Displays Scapy's default commandsN)printrC   ro   commandsrS   r0   r.   lscr	  e  s"     
$t}

r0   c                        e Zd Zg dZddZd Z fdZ fdZddZ fd	Z	d
 Z
 fdZ fdZd Z fdZd Zd Zd Z fdZd Zd Zd Z xZS )CacheInstancetimeoutrX   
_timetablenonameNc                 0    || _         || _        i | _        d S r)   r  )r,   rX   r  s      r.   r^   zCacheInstance.__init__n  s    	r0   c                 `    | j                                          |                                  d S r)   )r  r   r4   s    r.   flushzCacheInstance.flusht  s'    

r0   c                     || j         v rt                              | |          S |                     |          st	          |          t          t          |                               |          S r)   )	__slots__object__getattribute__r   KeyErrorsuperr  r   )r,   r   r@   s     r.   r   zCacheInstance.__getitem__y  sf    4>!!**4666  && 	!4.. ]D))55d;;;r0   c                     t          t          |                               |          sdS | j        .| j        |         }t          j                    |z
  | j        k    rdS dS )NFT)r  r  r   r  r  time)r,   r   tr@   s      r.   r   zCacheInstance.__contains__  s]    ]D))66t<< 	5<#%Ay{{Q--utr0   c                 8    	 | |         S # t           $ r |cY S w xY wr)   )r  r   s      r.   r   zCacheInstance.get  s5    	: 	 	 	NNN	s   
 c                     || j         v rt                              | ||          S t          j                    | j        |<   t          t          |                               ||           d S r)   )r  r  __setattr__r  r  r  r  __setitem__)r,   r   vr@   s      r.   r  zCacheInstance.__setitem__  s`    4>!!%%dD!444 $	mT""..tQ77777r0   c                     |                                 D ]V\  }}|| vs| j        |         |j        |         k     r1t                              | ||           |j        |         | j        |<   Wd S r)   )r   r  dictr  )r,   otherrs   r   values        r.   rA   zCacheInstance.update  sz    
  ++-- 	= 	=JC $$/#"69I#9N"N"N  sE222','7'<$	= 	=r0   c                       j         't          t                                                     S t	          j                     fdt          t                                                     D             S )Nc              3   X   K   | ]$\  }}j         |         z
  j        k     ||fV  %d S r)   r  r  r   kr   r,   t0s      r.   r   z*CacheInstance.iteritems.<locals>.<genexpr>  sP       
 
ADOA&&55 F5555
 
r0   )r  r  r  r   r  r,   r*  r@   s   `@r.   	iteritemszCacheInstance.iteritems  sz    <--33555Y[[
 
 
 
 
t44::<<
 
 
 	
r0   c                       j         't          t                                                     S t	          j                     fdt          t                                                     D             S )Nc              3   N   K   | ]}j         |         z
  j        k     |V   d S r)   r'  )r   r)  r,   r*  s     r.   r   z)CacheInstance.iterkeys.<locals>.<genexpr>  sH       
 
DOA&&55 5555
 
r0   )r  r  r  rK   r  r+  s   `@r.   iterkeyszCacheInstance.iterkeys  sz    <--22444Y[[
 
 
 
 
=$//4466
 
 
 	
r0   c                 *    |                                  S r)   )r/  r4   s    r.   __iter__zCacheInstance.__iter__  s    }}r0   c                       j         't          t                                                     S t	          j                     fdt          t                                                     D             S )Nc              3   T   K   | ]"\  }}j         |         z
  j        k     |V  #d S r)   r'  r(  s      r.   r   z+CacheInstance.itervalues.<locals>.<genexpr>  sL       
 
ADOA&&55 5555
 
r0   )r  r  r  r   r  r   r+  s   `@r.   
itervalueszCacheInstance.itervalues  sz    <--44666Y[[
 
 
 
 
t44::<<
 
 
 	
r0   c                 D    t          |                                           S r)   )r   r,  r4   s    r.   r   zCacheInstance.items  s    DNN$$%%%r0   c                 D    t          |                                           S r)   )r   r/  r4   s    r.   rK   zCacheInstance.keys  s    DMMOO$$$r0   c                 D    t          |                                           S r)   )r   r4  r4   s    r.   r   zCacheInstance.values  s    DOO%%&&&r0   c                     | j         't          t          |                                           S t	          |                                           S r)   )r  r  r  __len__rH   rK   )r,   r@   s    r.   r9  zCacheInstance.__len__  s=    <--55777499;;r0   c                 @    d| j         t          |           | j        fz  S )Nz%s: %i valid items. Timeout=%rs)rX   rH   r  r4   s    r.   summaryzCacheInstance.summary  s    0DIs4yy$,3WWWr0   c                     g }| rPt          d | D                       }d|dz   z  }|                                 D ]}|                    ||z             d                    |          S )Nc              3   4   K   | ]}t          |          V  d S r)   )rH   r   r)  s     r.   r   z)CacheInstance.__repr__.<locals>.<genexpr>  s(      **SVV******r0   z
%%-%is %%sr   r>   )rG   r   r   rE   )r,   rI   mkfmtr   s        r.   r5   zCacheInstance.__repr__  sy     	%**T*****B"q&)C

 % %t$$$$yy||r0   c                 *    t          j         |           S r)   )r+   r4   s    r.   r+   zCacheInstance.copy  s    yr0   )r  Nr)   )rP   rQ   rR   r  r^   r  r   r   r   r  rA   r,  r/  r1  r4  r   rK   r   r9  r;  r5   r+   __classcell__)r@   s   @r.   r  r  k  s       111I     
< < < < <       8 8 8 8 8
= 
= 
=	
 	
 	
 	
 	
	
 	
 	
 	
 	
  	
 	
 	
 	
 	
& & &% % %' ' '         X X X        r0   r  c                   :    e Zd Zd Zd Zd	dZd Zd Zd Zd Z	dS )
NetCachec                     g | _         d S r)   )_caches_listr4   s    r.   r^   zNetCache.__init__  s    r0   c                 f    | j                             |           t          | |j        |           d S r)   )rF  r   ra   rX   )r,   caches     r.   	add_cachezNetCache.add_cache  s3      '''ej%(((((r0   Nc                 R    t          ||          }|                     |           |S )N)rX   r  )r  rI  )r,   rX   r  cs       r.   	new_cachezNetCache.new_cache  s+    tW555qr0   c                      t          d          )NzCannot delete attributes)AttributeError)r,   attrs     r.   __delattr__zNetCache.__delattr__   s    7888r0   c                     |j         D ]g}t          | |j                  r)t          | |j                                      |           @|                     |                                           hd S r)   )rF  r`   rX   rD   rA   rI  r+   )r,   r#  cos      r.   rA   zNetCache.update  sr    $ 	* 	*BtRW%% *bg&&--b1111rwwyy))))		* 	*r0   c                 B    | j         D ]}|                                 d S r)   )rF  r  )r,   rK  s     r.   r  zNetCache.flush  s-    " 	 	AGGIIII	 	r0   c                 J    d                     d | j        D                       S )Nr>   c              3   >   K   | ]}|                                 V  d S r)   )r;  )r   rK  s     r.   r   z$NetCache.__repr__.<locals>.<genexpr>  s*      @@@@@@@@r0   )rE   rF  r4   s    r.   r5   zNetCache.__repr__  s&    yy@@d.?@@@@@@r0   r)   )
rP   rQ   rR   r^   rI  rL  rP  rA   r  r5   rS   r0   r.   rD  rD    s          ) ) )
   9 9 9* * *  
A A A A Ar0   rD  c                   v    e Zd Zg dZ G d de          Ze G d d                      Zd Zd Z	dd	Z
d
 ZdS )ScapyExt)specsrX   versionc                       e Zd ZdZdZdZdS )ScapyExt.MODEr   contribmodulesN)rP   rQ   rR   LAYERSCONTRIBMODULESrS   r0   r.   MODEr[    s        r0   ra  c                   8    e Zd ZU eed<   ded<   eed<   eed<   dS )ScapyExt.ScapyExtSpecfullnamer[  modespecrZ   N)rP   rQ   rR   r3   r   r   boolrS   r0   r.   ScapyExtSpecrc    s7         			r0   rh  c                     i | _         d S r)   )rX  r4   s    r.   r^   zScapyExt.__init__%  s    9;


r0   c                 "    || _         || _        d S r)   )rX   rY  )r,   rX   rY  s      r.   configzScapyExt.config(  s    	r0   Nc                 Z   || j         v s
J d            d|j         d| }t          j                            |t          |                    }|                     ||||pd          }|6t          t          j                            |j	                            |_
        || j        |<   d S )Nz#mode must be one of ScapyExt.MODE !zscapy..F)rd  re  rf  rZ   )ra  r$  	importlibutilspec_from_file_locationr3   rh  rg  	find_specrd  rZ   rX  )r,   rX   re  r   rZ   rd  rf  s          r.   r   zScapyExt.register,  s    ty   "G   /DJ////~55II
 
   $u	 ! 
 
 ?	 8 8 G GHHDL#
8r0   c                 R    d| j         d| j        dt          | j                  dS )Nz
<ScapyExt r9   z (z specs)>)rX   rY  rH   rX  r4   s    r.   r5   zScapyExt.__repr__=  s/     IIILLL
OOOO
 	
r0   r)   )rP   rQ   rR   r  r   ra  r   rh  r^   rk  r   r5   rS   r0   r.   rW  rW    s        ,,,I    t   
        Y< < <  $ $ $ $"
 
 
 
 
r0   rW  c                   H    e Zd Zg dZdZddgZd ZddZd Zd	 Z	d
 Z
d ZdS )ExtsManager)exts_loaded	all_specszFramework :: Scapyz@License :: OSI Approved :: GNU General Public License v2 (GPLv2)zJLicense :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)c                 0    g | _         i | _        g | _        d S r)   )ru  rw  rv  r4   s    r.   r^   zExtsManager.__init__N  s    $&	;=r0   Nc                 <    || j         v r| j         |         j        S d S r)   )rw  rf  )r,   rd  r   targets       r.   rq  zExtsManager.find_specS  s'    t~%%>(+00 &%r0   c                     d S r)   rS   r4   s    r.   invalidate_cacheszExtsManager.invalidate_cachesW  s    r0   c                 :   || j         |j        <   |j        rt          j                            |j        j                  }||j        _        t          j                            |j                  }|t          j
        |j        <   |                    |           d S d S r)   )rw  rd  rZ   rn  ro  
LazyLoaderrf  loadermodule_from_specsysr]  exec_module)r,   rf  r  modules       r.   _register_speczExtsManager._register_specZ  s    (,t}%< 	'^..ty/?@@F%DI^44TY??F)/CK&v&&&&&	' 	'r0   c                     	 dd l }n# t          $ r Y d S w xY w|j                                        D ]t	           fdj                                        D                       r	 t          fd|j                                                                        D                       }n# t          $ r
 j	        }Y nw xY w| j
        v rt	           fdj                                        D                       st          j        d|z              j
                            |           t                      }	  |j        |          }n2# t           $ r%}t          j        d|d|           Y d }~Kd }~ww xY w	 |j        }n(# t$          $ r t          j        d|z             Y w xY w	  ||           n2# t           $ r%}t          j        d|d	|           Y d }~d }~ww xY w|j                                        D ]}                     |            j                            |            t0          j        vr!t0          j                                        d S d S )
Nr   c              3   @   K   | ]\  }}|d k    |j         k    V  dS 
ClassifierN)SCAPY_PLUGIN_CLASSIFIERr   r)  r   r,   s      r.   r   z#ExtsManager.load.<locals>.<genexpr>i  sE        Aqa<6G6G T116G6G6G6G r0   c              3   4   K   | ]\  }}j         |v |V  d S r)   )rX   )r   r)  r   distrs      r.   r   z#ExtsManager.load.<locals>.<genexpr>n  s;         Aq :?? *??? r0   c              3   <   K   | ]\  }}|d k    |j         v V  dS r  )GPLV2_CLASSIFIERSr  s      r.   r   z#ExtsManager.load.<locals>.<genexpr>w  sE        1!|:K:K //:K:K:K:K r0   z8'%s' has no GPLv2 classifier therefore cannot be loaded.'z' failed during import with zK'%s' included the Scapy Framework specifier but did not include a scapy_extz$' failed during initialization with )importlib.metadatar   metadatadistributionsanyr   nextpackages_distributionsr  rX   rv  r   r   r   rW  import_module	Exception	scapy_extrN  inforX  r   r  ru  r  	meta_path)	r,   rn  pkgextr  exscapy_ext_funcrf  r  s	   `       @r.   loadzExtsManager.loadc  sd   	%%%%% 	 	 	FF	'5577 7	& 7	&E    !N0022     6&%    $-$6$M$M$O$O$U$U$W$W    CC
   % % %*CCC%$,&&     % 4 4 6 6       'RUXX   ##C(((jj	 7	 7 < <II    ''CCB   HHHH%.%8NN%   $:<?@   H	"N3''''    ''CCB   HHHH  I,,.. . .D''----	  %%%s}$$M  &&&&& %$sa   	 
*AB//CCE
FE>>FF!F43F48G
G3G..G3c                 J    ddl m}  |d | j        D             dgd          S )Nr   )pretty_listc                 n    g | ]2}|j         |j        d  |j                                        D             f3S )c                     g | ]	}|j         
S rS   )rd  )r   r   s     r.   r   z3ExtsManager.__repr__.<locals>.<listcomp>.<listcomp>  s    $J$J$JAQZ$J$J$Jr0   )rX   rY  rX  r   r   s     r.   r   z(ExtsManager.__repr__.<locals>.<listcomp>  sN        $J$J9I9I$J$J$JK  r0   )NameVersionSpecs)sortBy)scapy.utilsr  ru  )r,   r  s     r.   r5   zExtsManager.__repr__  sV    ++++++{    **
 
 
 	
r0   r)   )rP   rQ   rR   r  r  r  r^   rq  r|  r  r  r5   rS   r0   r.   rt  rt  E  s        000I2JT
  
1 1 1 1  ' ' '>' >' >'@	
 	
 	
 	
 	
r0   rt  c                     d}t          j        |t          | dd                    }|sdS |                    d                              d          }t          d |D                       }t          ||k              S )zChecks that module has a higher version that minver.

    params:
     - module: a module to test
     - minver: a tuple of versions
    z%[a-z]?((?:\d|\.)+\d+)(?:\.dev[0-9]+)?__version__r7   Fr   rm  c              3   4   K   | ]}t          |          V  d S r)   )r   r   s     r.   r   z#_version_checker.<locals>.<genexpr>  s(      88AQ888888r0   )rematchrD   grouprF   tuplerg  )r  minverversion_regexpversion_tags_rversion_tags_iversion_tagss         r.   _version_checkerr    s     >NXr** N  u#))!,,22377N8888888L&'''r0   c                  P    	 ddl } n# t          $ r Y dS w xY wt          | d          S )zy
    Check if the cryptography module >= 2.0.0 is present. This is the minimum
    version for most usages in Scapy.
    r   NF)   r   r   )cryptographyr   r  )r  s    r.   isCryptographyValidr    sH       uuL)444s    
c                  ^    	 ddl m}  |                                  dS # t          $ r Y dS w xY w)z
    Check if the cryptography module is present, and if it supports X25519,
    ChaCha20Poly1305 and such.

    Notes:
    - cryptography >= 2.0 is required
    - OpenSSL >= 1.1.0 is required
    r   X25519PrivateKeyTF)0cryptography.hazmat.primitives.asymmetric.x25519r  generater  r  s    r.   isCryptographyAdvancedr    sV    UUUUUU!!### t    uus    
,,c                  2    	 ddl } dS # t          $ r Y dS w xY w)z1Returns either scapy is running under PyPy or notr   NTF)__pypy__r   )r  s    r.   isPyPyr    s7    t   uus    
c                 T   t                               t          | |           	 t          j                            t          j                  t
          _        n# t          $ r Y nw xY w	 t          t                                 n# t          $ r Y nw xY wt          t          | |          S )zChange the current prompt theme)rU   rh   ro   color_themepromptr  ps1r  r   get_ipython	NameErrorrD   rO  rf   rj   s      r.   _prompt_changerr    s     dD#..."))$+66   MM	
 	
 	
 	
    4s###s#   3A 
A$#A$(B 
BBc                     t           j        r7t          s0t                              t           dd           t          d          t           j        s7t          r0t                              t           dd           t          d          t           j        r	 ddlm	} m
}m} |t           _        t          j        |d	
          t           _        |t           _        | t           _        nr# t$          t&          f$ r9 t)          j        d           t                              t           dd           Y n)w xY wt           j        rOddlm}m}m} |t           _        t          j        |d	
          t           _        |t           _        |t           _        nt4          r]ddlm}m}m} |t           _        t?          dt          j        |d	
                    t           _        |t           _        |t           _        nft@          r?ddl!m"}	 ddl#m$}
m%} |
t           _        |t           _        |	t           _        |	t           _        n ddl&m'}m(} |t           _        |t           _        t           j)        *                                 dS )z_Populate the conf.L2Socket and conf.L3Socket
    according to the various use_* parameters
    use_bpfFzBSD-like (OSX, *BSD...) only !use_pcapTz(Scapy only supports libpcap on Solaris !r   )L2pcapListenSocketL2pcapSocketL3pcapSocketip6)r   z2No libpcap provider available ! pcap won't be used)L2bpfListenSocketL2bpfSocketL3bpfSocket)L3PacketSocketL2SocketL2ListenSocketzType[SuperSocket])_NotAvailableSocket)L3WinSocketL3WinSocket6)L3RawSocketL3RawSocket6N)+ro   r  r
   rU   rh   r   r  r   scapy.arch.libpcapr  r  r  L3socket	functoolspartial	L3socket6L2socketL2listenOSErrorr   r   r   scapy.arch.bpf.supersocketr  r  r  r	   scapy.arch.linuxr  r  r  r   r   scapy.arch.windowsr  scapy.arch.windows.nativer  r  scapy.supersocketr  r  ifacesreload)r  r  r  r  r  r  r  r  r  r  r  r  r  r  s                 r.   _set_conf_socketsr    s   
 | NC N!!$	5999+,LMMM= 
W 
!!$
D999+6
 
 	
 } +&	/          )DM&.U, , ,DN(DM.DMM % 	? 	? 	? TUUU%%dJ>>>>>	? 
 &	% 	% 	% 	% 	% 	% 	% 	% 	% 	%#"*' ' '#)	 &MMMMMMMMMM&  
 
 !&	 
&::::::GGGGGGGG#%++????????#%Ks   
C$ $AD.-D.c                 <   t          |t                    st          d          t                              t
          | |           dgdgd}d |D             }|| = |r,||          D ]#}t                              t
          |d           $	 t                       no# t          t          f$ r[}|	                                D ]&\  }}t                              t
          ||           't          |t                    r Y d }~nd }~ww xY wt          t
          |           S )Nz!This argument should be a booleanr  r  )r  r  c                 :    i | ]}|t          t          |          S rS   )rD   ro   r>  s     r.   
<dictcomp>z#_socket_changer.<locals>.<dictcomp>F  s$    999qq'$""999r0   F)r   rg  	TypeErrorrU   rh   ro   r  r   r   r   rD   )	rO  rf   rj   dependenciesrestoreparamer   r$  s	            r.   _socket_changerr  =  sS   c4   =;<<<dD#...K< L :9L999G
 :!$' 	: 	:E%%dE59999);7   !--// 	8 	8JC%%dC7777a677 		 	 	 	 	
 4s   B D+ADDc                 .    t          j        |           |S )z Handle a change of conf.logLevel)r   setLevelr  s      r.   _loglevel_changerr  U  s     sJr0   c                     t          |t                    r+ddlm}  ||          }|r|j        rt          d           |S |S )z$Resolves the interface in conf.ifacer   )resolve_ifacezHThis interface is not specified in any provider ! See conf.ifaces output)r   r3   scapy.interfacesr  dummyr   )rO  rf   rj   r  ifaces        r.   _iface_changerr  \  sk     #s 222222c"" 	5; 	)   Jr0   c                     dt           _        |S )z:Reset conf.tls_nss_keys when conf.tls_nss_filename changesN)ro   tls_nss_keysr  s      r.   _reset_tls_nss_keysr  k  s     DJr0   c            	       P   e Zd ZU dZ ede          Zeed<   dZ	eed<   dZ
dZdZdZ edd	e          Z e            Zeed
<    e            Zd	ZdZd	Zd	Z edej        e          Zeed<   dZdZdZ dZ!dZ"dZ# edde$          Z%eed<   dZ&d	Z'dZ(d	Z)d	Z* e+            Z,e+ed<    e+            Z-e+ed<   d	Z.d	Z/d	Z0d	Z1d	Z2dZ3d	Z4dZ5 e6j7        de6j8        9                    e6j8        :                    d          ddd                    Z;eed<   dZ<dZ=dZ>dZ?dZ@dZAd	ZBi ZCd	ZDd	ZEdZFdZGd	ZHd	ZId	ZJd	ZKd	ZLd	ZMd	ZNd	ZOdZPd	ZQdZRdZS ed eT            e$          ZUeVed<   dZW eX            ZYeXed<    eZ            Z[eZed<    eZ            Z\eZed <    e]            Z^e]ed!<    ed" e_                      Z`eaed"<    ed# e6j7        d$d          b                                c                    d%          ed          Zeeaed#<    ed&ded          Zfeaed&<   dZgehji        Zjeaed'<   g Zkg Zlg Zm en            Zoened(<   d	Zpg d)Zqere         ed*<    es            Zt eu            Zveued+<    ew            Zx ey            ZzdZ{dZ|d,Z}dZ~erd-nd.Zeed/<   dZd	Zd0ZdZ ed1d	e          Zd	Zeeef         ed2<   dZdZg Zd3 Zd	S )4rn   z:
    This object contains the configuration of Scapy.
    rY  r7   sessionFautoznot implementedr  Nr   r   logLevelTr  r  z>>> l2typesl3types<   i   SCAPY_HISTFILEr   r   r   historyhistfiler   r     progresolvenoenumemphuse_pypyr  SCAPY_USE_LIBPCAPr   r  ipv6_enablednetcache)1	bluetoothbluetooth4LEdcerpcdhcpdhcp6dnsdot11dot15d4eapgprsgssapihsrpinetinet6ipsecirisakmpkerberosl2l2tpldapllmnrlltdmgcpmobileipnetbiosnetflowntlmntpppippppptpradiusriprtpsctp	sixlowpanskinnysmbsmb2	smbclient	smbserversnmpspnegotftpvrrpvxlanx509zigbeeload_layersru  g?lolo0loopback_named   tls_nss_filenamer   c                 $   |dk    rddl m} |S |dk    rddl m} |S |dk    rddl m} |S |dk    rdd	l m} |S |d
k    rddl m} |S |dk    rddl m} |S |dk    rt          j        dt                     d}t                              | |          S )Nmanufdbr   )MANUFDB
ethertypes)ETHER_TYPES	protocols)	IP_PROTOSservices_udp)UDP_SERVICESservices_tcp)TCP_SERVICESservices_sctp)SCTP_SERVICESiface6z0conf.iface6 is deprecated in favor of conf.ifacer  )
scapy.datarN  rP  rR  rT  rV  rX  warningswarnDeprecationWarningr  r  )r,   rO  rN  rP  rR  rT  rV  rX  s           r.   r  zConf.__getattribute__a  s    9******N<......;,,,,,,>!!//////>!!//////?""000000  8MB"   D&&tT222r0   )rP   rQ   rR   r   ReadOnlyAttributer   rY  r3   r   r  interactiveinteractive_shellipython_use_jedistealthrU   r  r  r   r   r   r  ASN1_default_codecASN1_default_long_sizeAS_resolverdot15d4_protocolr   levelr  r  r   	checkIPID
checkIPsrccheckIPaddrcheckIPinIPcheck_TCPerror_seqackverbr  r  sniff_promisc	raw_layerraw_summarypadding_layer
default_l2r   r  r  r  r  r  r  BTsocketmin_pkt_sizemibbufsizer   getenvr   rE   r   r  paddingexcept_filterr   debug_match	debug_tlswepkeyr  cache_pcapiflistneighbornameserversroute_autoloadroute6_autoloadrouteroute6rM  rO  rQ  rS  rU  rW  teredoPrefixteredoServerPortauto_fragmentdebug_dissectorr   r  r   warning_thresholdrv   r  r   r  r  r   r  r  r  rg  lower
startswithr  r  r  	use_npcapsockethas_ipv6r  stats_classic_protocolsstats_dot11_protocols
temp_filesrD  r  
geoip_cityrF  r   r"  contribsrt  ru  r  crypto_validr  crypto_valid_advancedfancy_bannerauto_crop_tablesrecv_poll_rateraise_no_dst_macr	   rI  	nmap_basenmap_kdbmax_list_counttls_session_enabler  rK  r   r   bytesdcerpc_session_enabledcerpc_force_header_signingwinssps_passiver  rS   r0   r.   rn   rn   r  s          %$Y88GS888GSK GK~66E#FJ%%%|~~HKK
IO=NOOHcOOO I JK K "D+h@@FC@@@ MIKMJ"GY$$$"GY$$$HIHHHL
CGBI
Gs##w		
 	
 Hc    GM FK IFFHK N O E FGJILLMLMO)k-OTTKTTTXZZD(wyyGW    giiFGikkD)!!!&&z6688<<Hd<<< ![	%r**0022==cBB Hd   
  K	5/BBGTBBBIL$((( J!Hh###J2 2 2Kc 2 2 2j tvvH#D+%%%&&((L2244L  N !&1EM3111IH N"{  &*L$sEz"))) " #( O3 3 3 3 3r0   rn   z?IPv6 support disabled in Python. Cannot load Scapy IPv6 layers.)r"  r  r9  )r<      c                       fd}|S )z
    This a decorator to be used for any method relying on the cryptography library.  # noqa: E501
    Its behaviour depends on the 'crypto_valid' attribute of the global 'conf'.
    c                  J    t           j        st          d           | i |S )NzWCannot execute crypto-related method! Please install python-cryptography v1.7 or later.)ro   r  r   )r\   rs   funcs     r.   func_inz!crypto_validator.<locals>.func_in  s?      	S R S S StT$V$$$r0   rS   )r  r  s   ` r.   crypto_validatorr    s#    % % % % % Nr0   c                      t           j        D ]'} 	 t          j        |            # t          $ r Y $w xY wt           j        d d = d S r)   )ro   r  r   unlinkr  r   s    r.   scapy_delete_temp_filesr    s[    _  	IaLLLL 	 	 	D	s   %
22)kr   atexitr+   r  r   r  r  r  r  r[  dataclassesr   enumr   rn  importlib.abcimportlib.utilr   r   scapy.base_classesr   scapy.constsr   r   r	   r
   r   scapy.errorr   r   r   r   scapy.themesr   r   r   typingr   r   r   r   r   r   r   r   r   r   r   r   r   r    typesr!   scapy.compatr"   scapy.as_resolversscapy.modules.nmapr#   scapy.packetr$   r  r%   scapy.asn1.asn1scapy.asn1.mibr  r'   rU   rq   r  r^  rv   r   r   r   r   r   r   r	  r3   r  rD  rW  abcMetaPathFinderrt  r  r  r  r  r  r  r  r  r  r  rn   r  mrF  r   ro   version_inforu  r  r  r  r   rS   r0   r.   <module>r     s   
       				 				  



   ! ! ! ! ! !                          ) ) ) ) ) ) = = = = = = = = = = = = = =            B A A A A A A A A A                                       * * * * * * 444444######------       4 (  (  (  (  (&  (  (  (F* * * &I%
7
7    8      y   (!^ !^ !^ !^ !^ !^ !^ !^H	 	 	 	 	 	 	 		 	 	 	 	o 	 	 	A, A, A, A, A, A, A, A,H9 9 9 9 9d012 9 9 9x    4c*+      B B B B BDcN B B BJ#A #A #A #A #A #A #A #AL,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
^g
 g
 g
 g
 g
)-. g
 g
 g
T( ( (*
5 
5 
5  &  $ $ $"; ; ;|  0      J3 J3 J3 J3 J39 J3 J3 J3Z  'IWXXX, ' '   ##A&&&tvv vINN     ' ( ( ( ( (r0   