a
    kÄ#dúz  ã                   @   s  d 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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mZmZmZmZmZ ddlmZmZmZ dd	lmZ 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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 e/�rbddl2Zddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9Zddl:ZG dd„ de;ƒZ<G dd„ de;ƒZ=dd„ Z>ej?e=dd„ d�Z@de@_ G dd„ de<ƒZAG dd„ dƒZBG dd„ deBƒZCG d d!„ d!eBƒZDG d"d#„ d#ƒZEG d$d%„ d%e'e,d&  ƒZFG d'd(„ d(e'e#d)e"f  ƒZGd*d+„ ZHG d,d-„ d-e%eIe"f e;ƒZJG d.d/„ d/ƒZKd0d1„ ZLd2d3„ ZMd4d5„ ZNd6d7„ ZOd8d9„ ZPd:d;„ ZQd<d=„ ZRd>d?„ ZSd@dA„ ZTG dBdC„ dCe<ƒZUeUjV�sàe dD¡ dED ]ZWeWeUjXv �rÀeUjX YeW¡ �qÀeUƒ ZZdFdG„ Z[dHdI„ Z\e ]e\¡ dS )Jz-
Implementation of the configuration object.
é    )Úabsolute_import)Úprint_functionN)ÚVERSION)Ú
BasePacket)ÚDARWINÚWINDOWSÚLINUXÚBSDÚSOLARIS)Ú	log_scapyÚwarningÚScapyInvalidPlatformException)Úsix)ÚNoThemeÚapply_ipython_style)ÚcastÚAnyÚCallableÚDecoratorCallableÚDictÚIteratorÚListÚNoReturnÚOptionalÚSetÚTupleÚTypeÚUnionÚoverloadÚTYPE_CHECKING)Ú
ModuleType)ÚNmapKnowledgeBase)ÚPacket)ÚSuperSocketc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	ConfClassc                 C   s   |j  ¡ | _ d S ©N)Ú__dict__Úcopy)ÚselfZcnf© r)   úC/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/config.pyÚ	configureA   s    zConfClass.configurec                 C   s   t | ƒS r%   ©Ústr©r(   r)   r)   r*   Ú__repr__E   s    zConfClass.__repr__c                 C   s¤   d}| j j ¡ }| | j¡ t|ƒ}|D ]n}|d dkr(tt| |ƒƒ}d | ¡ ¡}dt	t
|ƒdƒ }t
|ƒ|kr†|d |d … d }|d	||f 7 }q(|d d
… S )NÚ r   Ú_ú éL   é
   é   z...z%-10s = %s
éÿÿÿÿ)Ú	__class__r&   r'   ÚupdateÚsortedÚreprÚgetattrÚjoinÚsplitÚmaxÚlen)r(   ÚsZdkeysÚkeysÚiÚrZwlenr)   r)   r*   Ú__str__I   s    zConfClass.__str__N)Ú__name__Ú
__module__Ú__qualname__r+   r/   rD   r)   r)   r)   r*   r$   @   s   r$   c                   @   s4   e Zd Zd
dd„Zddd„Zedd„ ƒZdd	„ ZdS )ÚInterceptorNc                 C   sD   || _ d| | _|| _|| _|d ur(|ng | _|d ur:|ni | _d S ©Nz_intercepted_%s)ÚnameÚintnameÚdefaultÚhookÚargsÚkargs)r(   rJ   rL   rM   rN   rO   r)   r)   r*   Ú__init__[   s    
zInterceptor.__init__c                 C   s(   t || jƒst|| j| jƒ t|| jƒS r%   )ÚhasattrrK   ÚsetattrrL   r;   )r(   ÚobjÚtypr)   r)   r*   Ú__get__j   s    zInterceptor.__get__c                 C   s   d| }t | ||ƒ d S rI   )rR   )rS   rJ   ÚvalZint_namer)   r)   r*   Úset_from_hookp   s    zInterceptor.set_from_hookc                 C   sD   t || j| jƒ}| j| j||g| j¢R i | j¤Ž}t|| j|ƒ d S r%   )r;   rK   rL   rM   rJ   rN   rO   rR   )r(   rS   rV   Úoldr)   r)   r*   Ú__set__v   s    "zInterceptor.__set__)NN)N)rE   rF   rG   rP   rU   ÚstaticmethodrW   rY   r)   r)   r)   r*   rH   Z   s     û


rH   c                 C   s&   t j|  j}t t| |¡ tdƒ‚d S )NzRead-only value !)ÚConfr&   rL   rH   rW   ÚconfÚ
ValueError)rJ   rL   r)   r)   r*   Ú	_readonly}   s    r^   c                 O   s   t | ƒS r%   )r^   )rJ   rN   Úkwargsr)   r)   r*   Ú<lambda>†   ó    r`   )rM   zRead-only class attributec                   @   sH   e Zd ZdZerdndZeZeZeZdZ	dZ
dZdZdZd	Zd
ZdZdS )ÚProgPathz<System default>Úopenzxdg-openÚdotÚdisplayÚtcpdumpÚ	tcpreplayZhexerÚtsharkÚ	wiresharkÚifconfigN)rE   rF   rG   Ú_defaultr   Zuniversal_openZ	pdfreaderZpsreaderZ	svgreaderrd   re   rf   rg   Zhexeditrh   ri   rj   r)   r)   r)   r*   rb   ‹   s   rb   c                   @   sH   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚConfigFieldListc                 C   s   t ƒ | _t ƒ | _d S r%   )ÚsetÚfieldsÚlayersr.   r)   r)   r*   rP   œ   s    zConfigFieldList.__init__c                 C   s
   t | dƒS )NÚowners)rQ   ©Úfr)   r)   r*   Ú	_is_field¡   s    zConfigFieldList._is_fieldc                 C   s   dd„ | j D ƒ| _d S )Nc                 S   s   h | ]}|j D ]}|’qqS r)   )rp   )Ú.0rr   Úownerr)   r)   r*   Ú	<setcomp>¨   ra   z5ConfigFieldList._recalc_layer_list.<locals>.<setcomp>)rn   ro   r.   r)   r)   r*   Ú_recalc_layer_list¦   s    z"ConfigFieldList._recalc_layer_listc                    s(   ˆ  j ‡ fdd„|D ƒO  _ ˆ  ¡  d S )Nc                    s   h | ]}ˆ   |¡r|’qS r)   )rs   )rt   rr   r.   r)   r*   rv   ¬   ra   z&ConfigFieldList.add.<locals>.<setcomp>)rn   rw   ©r(   Úfldsr)   r.   r*   Úaddª   s    zConfigFieldList.addc                 G   s   |  j t|ƒ8  _ |  ¡  d S r%   )rn   rm   rw   rx   r)   r)   r*   Úremove¯   s    zConfigFieldList.removec                 C   s   t |tƒr|| jv S || jv S r%   )Ú
isinstancer   ro   rn   )r(   Úeltr)   r)   r*   Ú__contains__´   s    

zConfigFieldList.__contains__c                 C   s"   d| j jd dd„ | jD ƒ¡f S )Nz	<%s [%s]>r2   c                 s   s   | ]}t |ƒV  qd S r%   r,   ©rt   Úxr)   r)   r*   Ú	<genexpr>¼   ra   z+ConfigFieldList.__repr__.<locals>.<genexpr>)r7   rE   r<   rn   r.   r)   r)   r*   r/   º   s    zConfigFieldList.__repr__N)rE   rF   rG   rP   rZ   rs   rw   rz   r{   r~   r/   r)   r)   r)   r*   rl   ›   s   
rl   c                   @   s   e Zd ZdS )Ú	EmphasizeN©rE   rF   rG   r)   r)   r)   r*   r‚   ¿   s   r‚   c                   @   s   e Zd ZdS )ÚResolveNrƒ   r)   r)   r)   r*   r„   Ã   s   r„   c                   @   sf   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZedd
„ ƒZdd
„ Zdd„ Z	ddd„Z
dd„ ZdS )Ú	Num2Layerc                 C   s   i | _ i | _d S r%   )Ú	num2layerÚ	layer2numr.   r)   r)   r*   rP   È   s    zNum2Layer.__init__c                 C   s   |   ||¡ |  ||¡ d S r%   )Úregister_num2layerÚregister_layer2num©r(   ÚnumÚlayerr)   r)   r*   ÚregisterÍ   s    zNum2Layer.registerc                 C   s   || j |< d S r%   )r†   rŠ   r)   r)   r*   rˆ   Ò   s    zNum2Layer.register_num2layerc                 C   s   || j |< d S r%   )r‡   rŠ   r)   r)   r*   r‰   Ö   s    zNum2Layer.register_layer2numc                 C   s   d S r%   r)   ©r(   Úitemr)   r)   r*   Ú__getitem__Ú   s    zNum2Layer.__getitem__c                 C   s   d S r%   r)   rŽ   r)   r)   r*   r�   ß   s    c                 C   s"   t |tƒr| j| S | j| S d S r%   ©r|   Úintr†   r‡   rŽ   r)   r)   r*   r�   ä   s    

c                 C   s"   t |tƒr|| jv S || jv S d S r%   r‘   rŽ   r)   r)   r*   r~   ë   s    

zNum2Layer.__contains__Nc                 C   s   || v r| | S |S r%   r)   ©r(   r�   rL   r)   r)   r*   Úgetò   s    zNum2Layer.getc              	   C   sÀ   g }t  | j¡D ]H\}}|| jv r6| j| |kr6d}nd}| |d|||j|jf f¡ qt  | j¡D ]<\}}|| jvs†| j| |krf| |d||j|jf f¡ qf| ¡  d dd„ |D ƒ¡S )Nz<->z ->z%#6x %s %-20s (%s)z%#6x <-  %-20s (%s)Ú
c                 s   s   | ]\}}|V  qd S r%   r)   )rt   r€   Úyr)   r)   r*   r�     ra   z%Num2Layer.__repr__.<locals>.<genexpr>)	r   Ú	iteritemsr†   r‡   ÚappendrE   Ú_nameÚsortr<   )r(   Úlstr‹   rŒ   Údirr)   r)   r*   r/   ù   s    ÿÿzNum2Layer.__repr__)N)rE   rF   rG   rP   r�   rˆ   r‰   r   r�   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d„ Zd	d
„ Zdd„ ZdS )Ú
LayersListc                 C   s    t  | ¡ i | _d| _i | _d S )NF)ÚlistrP   ÚldictÚfilteredÚ_backup_dictr.   r)   r)   r*   rP     s    
zLayersList.__init__c                 C   s   d  dd„ | D ƒ¡S )Nr•   c                 s   s   | ]}d |j |jf V  qdS )z	%-20s: %sN)rE   rJ   )rt   rŒ   r)   r)   r*   r�     s   ÿz&LayersList.__repr__.<locals>.<genexpr>)r<   r.   r)   r)   r*   r/     s    
ÿzLayersList.__repr__c                 C   s8   |   |¡ |j| jvr"g | j|j< | j|j   |¡ d S r%   )r˜   rF   rŸ   )r(   rŒ   r)   r)   r*   r�     s    
zLayersList.registerc                 C   sr   g }dd l }zdd l}W n ty2   dd l}Y n0 | jD ]2}t|ƒj}| ||rd| ¡  	d¡d n|f¡ q:|S )Nr   r•   )
ÚscapyÚbuiltinsÚImportErrorÚ__builtin__rŸ   ÚevalÚ__doc__r˜   Ústripr=   )r(   Úresultr¢   r£   r¥   ÚlayÚdocr)   r)   r*   ro     s    

&zLayersList.layersc                    sh   | j rtdƒ‚t | j¡D ]B}|D ]8}|| jvr"|jdd… | j|< ‡ fdd„|jD ƒ|_q"qd| _ dS )z:Disable dissection of unused layers to speed up dissectionz)Already filtered. Please disable it firstNc                    s   g | ]}|d  ˆ v r|‘qS )é   r)   )rt   r–   ©Úitemsr)   r*   Ú
<listcomp>6  s   z%LayersList.filter.<locals>.<listcomp>T)r    r]   r   Ú
itervaluesrŸ   r¡   Úpayload_guess)r(   r®   rª   Úclsr)   r­   r*   Úfilter-  s    

ÿzLayersList.filterc                 C   sJ   | j stdƒ‚t | j¡D ]}|D ]}| j| |_q"q| j ¡  d| _ dS )z#Re-enable dissection for all layersz!Not filtered. Please filter firstFN)r    r]   r   r°   rŸ   r¡   r±   Úclear)r(   rª   r²   r)   r)   r*   Úunfilter;  s    
zLayersList.unfilterN)	rE   rF   rG   rP   r/   r�   ro   r³   rµ   r)   r)   r)   r*   r�     s   r�   zscapy.packet.Packetc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚCommandsListc                 C   s\   g }t | dd„ d�D ]<}|jr$|jnd}| ¡  dd¡d }| d|j|f ¡ qd |¡S )	Nc                 S   s   | j S r%   )rE   )r€   r)   r)   r*   r`   K  ra   z'CommandsList.__repr__.<locals>.<lambda>)Úkeyz--r•   r¬   r   z	%-22s: %s)r9   r§   Úlstripr=   r˜   rE   r<   )r(   r@   Zlir«   r)   r)   r*   r/   H  s    zCommandsList.__repr__c                 C   s   |   |¡ |S r%   )r˜   )r(   Úcmdr)   r)   r*   r�   Q  s    
zCommandsList.registerN)rE   rF   rG   r/   r�   r)   r)   r)   r*   r¶   G  s   	r¶   .c                   C   s   t ttjƒƒ dS )z!Displays Scapy's default commandsN)Úprintr:   r\   Úcommandsr)   r)   r)   r*   ÚlscW  s    r¼   c                       s¸   e Zd Zg d¢Zd&dd„Zdd„ Z‡ fdd	„Zd'd
d„Z‡ fdd„Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Z‡ fdd„Z‡ fdd„Zdd„ Z‡ fdd„Zd d!„ Zd"d#„ Zd$d%„ Z‡  ZS )(ÚCacheInstance)ÚtimeoutrJ   Ú
_timetabler&   ÚnonameNc                 C   s   || _ || _i | _d S r%   )r¾   rJ   r¿   )r(   rJ   r¾   r)   r)   r*   rP   `  s    zCacheInstance.__init__c                 C   s   t j| | j| jd� d S ©N)rJ   r¾   )r½   rP   rJ   r¾   r.   r)   r)   r*   Úflushf  s
    ýzCacheInstance.flushc                    sX   || j v rt | |¡S tt| ƒ |¡}| jd urT| j| }t ¡ | | jkrTt	|ƒ‚|S r%   )
Ú	__slots__ÚobjectÚ__getattribute__Úsuperr½   r�   r¾   r¿   ÚtimeÚKeyError)r(   r�   rV   Út©r7   r)   r*   r�   n  s    


zCacheInstance.__getitem__c                 C   s&   z
| | W S  t y    | Y S 0 d S r%   )rÈ   r“   r)   r)   r*   r”   y  s    
zCacheInstance.getc                    s<   || j v rt | ||¡S t ¡ | j|< tt| ƒ ||¡ d S r%   )rÃ   rÄ   Ú__setattr__rÇ   r¿   rÆ   r½   Ú__setitem__)r(   r�   ÚvrÊ   r)   r*   rÌ   ‚  s    
zCacheInstance.__setitem__c                 K   sR   t  |¡D ]B\}}|| vs.| j| |j| k r
t | ||¡ |j| | j|< q
d S r%   )r   r—   r¿   ÚdictrÌ   )r(   Úotherr_   r·   Úvaluer)   r)   r*   r8   ‰  s    zCacheInstance.updatec                    s:   ˆ j d u rt ˆ j¡S t ¡ ‰‡ ‡fdd„t ˆ j¡D ƒS )Nc                 3   s.   | ]&\}}ˆˆ j |  ˆ jk r||fV  qd S r%   ©r¿   r¾   ©rt   ÚkrÍ   ©r(   Út0r)   r*   r�   š  ra   z*CacheInstance.iteritems.<locals>.<genexpr>)r¾   r   r—   r&   rÇ   r.   r)   rÔ   r*   r—   •  s    
zCacheInstance.iteritemsc                    s:   ˆ j d u rt ˆ j¡S t ¡ ‰‡ ‡fdd„t ˆ j¡D ƒS )Nc                 3   s&   | ]}ˆˆ j |  ˆ jk r|V  qd S r%   rÑ   ©rt   rÓ   rÔ   r)   r*   r�   ¡  ra   z)CacheInstance.iterkeys.<locals>.<genexpr>)r¾   r   Úiterkeysr&   rÇ   r.   r)   rÔ   r*   r×   œ  s    
zCacheInstance.iterkeysc                 C   s   |   ¡ S r%   )r×   r.   r)   r)   r*   Ú__iter__£  s    zCacheInstance.__iter__c                    s:   ˆ j d u rt ˆ j¡S t ¡ ‰‡ ‡fdd„t ˆ j¡D ƒS )Nc                 3   s*   | ]"\}}ˆˆ j |  ˆ jk r|V  qd S r%   rÑ   rÒ   rÔ   r)   r*   r�   ¬  ra   z+CacheInstance.itervalues.<locals>.<genexpr>)r¾   r   r°   r&   rÇ   r—   r.   r)   rÔ   r*   r°   §  s    
zCacheInstance.itervaluesc                    s<   ˆ j d u rttˆ ƒ ¡ S t ¡ ‰‡ ‡fdd„t ˆ j¡D ƒS )Nc                    s,   g | ]$\}}ˆˆ j |  ˆ jk r||f‘qS r)   rÑ   rÒ   rÔ   r)   r*   r¯   ³  ra   z'CacheInstance.items.<locals>.<listcomp>)r¾   rÆ   r½   r®   rÇ   r   r—   r&   r.   rÊ   rÔ   r*   r®   ®  s    
zCacheInstance.itemsc                    s<   ˆ j d u rttˆ ƒ ¡ S t ¡ ‰‡ ‡fdd„t ˆ j¡D ƒS )Nc                    s$   g | ]}ˆˆ j |  ˆ jk r|‘qS r)   rÑ   rÖ   rÔ   r)   r*   r¯   º  ra   z&CacheInstance.keys.<locals>.<listcomp>)r¾   rÆ   r½   rA   rÇ   r   r×   r&   r.   rÊ   rÔ   r*   rA   µ  s    
zCacheInstance.keysc                    s<   ˆ j d u rtt ˆ ¡ƒS t ¡ ‰‡ ‡fdd„t ˆ j¡D ƒS )Nc                    s(   g | ] \}}ˆˆ j |  ˆ jk r|‘qS r)   rÑ   rÒ   rÔ   r)   r*   r¯   Á  ra   z(CacheInstance.values.<locals>.<listcomp>)r¾   rž   r   r°   rÇ   r—   r&   r.   r)   rÔ   r*   Úvalues¼  s    
zCacheInstance.valuesc                    s$   | j d u rtt| ƒ ¡ S t|  ¡ ƒS r%   )r¾   rÆ   r½   Ú__len__r?   rA   r.   rÊ   r)   r*   rÚ   Ã  s    
zCacheInstance.__len__c                 C   s   d| j t| ƒ| jf S )Nz%s: %i valid items. Timeout=%rs)rJ   r?   r¾   r.   r)   r)   r*   ÚsummaryÉ  s    zCacheInstance.summaryc                 C   sX   g }| rNt dd„ t | j¡D ƒƒ}d|d  }t | j¡D ]}| || ¡ q:d |¡S )Nc                 s   s   | ]}t |ƒV  qd S r%   )r?   rÖ   r)   r)   r*   r�   Ñ  ra   z)CacheInstance.__repr__.<locals>.<genexpr>z
%%-%is %%sr¬   r•   )r>   r   r×   r&   r—   r˜   r<   )r(   r@   ÚmkÚfmtr�   r)   r)   r*   r/   Í  s    zCacheInstance.__repr__c                 C   s
   t   | ¡S r%   )r'   r.   r)   r)   r*   r'   ×  s    zCacheInstance.copy)rÀ   N)N)rE   rF   rG   rÃ   rP   rÂ   r�   r”   rÌ   r8   r—   r×   rØ   r°   r®   rA   rÙ   rÚ   rÛ   r/   r'   Ú__classcell__r)   r)   rÊ   r*   r½   ]  s$   

	
r½   c                   @   sF   e Zd Zdd„ Zdd„ Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚNetCachec                 C   s
   g | _ d S r%   )Ú_caches_listr.   r)   r)   r*   rP   Ý  s    zNetCache.__init__c                 C   s   | j  |¡ t| |j|ƒ d S r%   )rà   r˜   rR   rJ   )r(   Úcacher)   r)   r*   Ú	add_cacheá  s    zNetCache.add_cacheNc                 C   s   t ||d�}|  |¡ |S rÁ   )r½   râ   )r(   rJ   r¾   Úcr)   r)   r*   Ú	new_cacheæ  s    
zNetCache.new_cachec                 C   s   t dƒ‚d S )NzCannot delete attributes)ÚAttributeError)r(   Úattrr)   r)   r*   Ú__delattr__ì  s    zNetCache.__delattr__c                 C   s>   |j D ]2}t| |jƒr*t| |jƒ |¡ q|  | ¡ ¡ qd S r%   )rà   rQ   rJ   r;   r8   râ   r'   )r(   rÏ   Úcor)   r)   r*   r8   ð  s    
zNetCache.updatec                 C   s   | j D ]}| ¡  qd S r%   )rà   rÂ   )r(   rã   r)   r)   r*   rÂ   ø  s    
zNetCache.flushc                 C   s   d  dd„ | jD ƒ¡S )Nr•   c                 s   s   | ]}|  ¡ V  qd S r%   )rÛ   )rt   rã   r)   r)   r*   r�   ÿ  ra   z$NetCache.__repr__.<locals>.<genexpr>)r<   rà   r.   r)   r)   r*   r/   ý  s    zNetCache.__repr__)N)
rE   rF   rG   rP   râ   rä   rç   r8   rÂ   r/   r)   r)   r)   r*   rß   Ü  s   
rß   c                 C   sN   d}t  |t| ddƒ¡}|s dS | d¡ d¡}tdd„ |D ƒƒ}t||kƒS )	z‰Checks 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__r0   Fr¬   Ú.c                 s   s   | ]}t |ƒV  qd S r%   )r’   r   r)   r)   r*   r�     ra   z#_version_checker.<locals>.<genexpr>)ÚreÚmatchr;   Úgroupr=   ÚtupleÚbool)ÚmoduleZminverZversion_regexpZversion_tags_rZversion_tags_iZversion_tagsr)   r)   r*   Ú_version_checker  s    	
þrñ   c                  C   s,   zddl } W n ty    Y dS 0 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ó   r)   r)   r*   ÚisCryptographyValid  s
    rô   c                  C   s6   zddl m}  |  ¡  W n ty,   Y dS 0 dS dS )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   ©ÚX25519PrivateKeyFTN)Z0cryptography.hazmat.primitives.asymmetric.x25519rö   ÚgenerateÚ	Exceptionrõ   r)   r)   r*   ÚisCryptographyAdvanced$  s    
rù   c                  C   s(   zddl } W dS  ty"   Y dS 0 dS )z1Returns either scapy is running under PyPy or notr   NTF)Ú__pypy__r¤   )rú   r)   r)   r*   ÚisPyPy7  s
    rû   c                 C   sd   t  t| |¡ ztj tj¡t_W n ty4   Y n0 ztt	ƒ ƒ W n t
yV   Y n0 tt| |ƒS )zChange the current prompt theme)rH   rW   r\   Úcolor_themeÚpromptÚsysÚps1rø   r   Úget_ipythonÚ	NameErrorr;   ©ræ   rV   rX   r)   r)   r*   Ú_prompt_changerA  s    ÿr  c               	   C   sÈ  t jr ts t t dd¡ tdƒ‚t js@tr@t t dd¡ tdƒ‚t jr¼zddlm	} m
}m} W n, ttfyŠ   td	ƒ t t dd¡ Y n20 |t _tj|d
d�t _|t _| t _t j ¡  dS t j�rddlm}m}m} |t _tj|d
d�t _|t _|t _t j ¡  dS t�rXddlm}m}m} |t _t dtj|d
d�ƒt _|t _|t _t j ¡  dS t!�r ddl"m#}	 ddl$m%}
m&} |
t _|t _|	t _|	t _t j ¡  dS ddl'm(} ddl)m*} |t _|t _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ÚL3pcapSocketz2No libpcap provider available ! pcap won't be usedZip6)r³   N)ÚL2bpfListenSocketÚL2bpfSocketÚL3bpfSocket)ÚL3PacketSocketÚL2SocketÚL2ListenSocketzType[SuperSocket])Ú_NotAvailableSocket)ÚL3WinSocketÚL3WinSocket6)ÚL3RawSocket)ÚL3RawSocket6)+r\   r  r	   rH   rW   r   r  r
   Zscapy.arch.libpcapr  r  r  ÚOSErrorr¤   r   ÚL3socketÚ	functoolsÚpartialÚ	L3socket6ÚL2socketÚL2listenÚifacesÚreloadZscapy.arch.bpf.supersocketr	  r
  r  r   Zscapy.arch.linuxr  r  r  r   r   Zscapy.arch.windowsr  Zscapy.arch.windows.nativer  r  Úscapy.supersocketr  Zscapy.layers.inet6r  )r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r)   r)   r*   Ú_set_conf_socketsR  sv    

ÿÿ
ÿ
þþ

r  c           	   
   C   sÌ   t |tƒstdƒ‚t t| |¡ dgdgdœ}dd„ |D ƒ}|| = |rb||  D ]}t t|d¡ qNz
tƒ  W nT ttfyÀ } z8| 	¡ D ]\}}t t||¡ qˆt |tƒr¬‚ W Y d }~n
d }~0 0 t
t| ƒS )Nz!This argument should be a booleanr  r  )r  r  c                 S   s   i | ]}|t t|ƒ“qS r)   )r;   r\   rÖ   r)   r)   r*   Ú
<dictcomp>¡  ra   z#_socket_changer.<locals>.<dictcomp>F)r|   rï   Ú	TypeErrorrH   rW   r\   r  r   r¤   r®   r;   )	ræ   rV   rX   ÚdependenciesÚrestoreÚparamÚer·   rÐ   r)   r)   r*   Ú_socket_changer˜  s&    
þ

r%  c                 C   s   t  |¡ |S )z Handle a change of conf.logLevel)r   ÚsetLevelr  r)   r)   r*   Ú_loglevel_changer°  s    
r'  c                 C   s8   t |tƒr4ddlm} ||ƒ}|r0|jr0tdƒ |S |S )z$Resolves the interface in conf.ifacer   )Úresolve_ifacezHThis interface is not specified in any provider ! See conf.ifaces output)r|   r-   Zscapy.interfacesr(  Údummyr   )ræ   rV   rX   r(  Úifacer)   r)   r*   Ú_iface_changer·  s    

ÿr+  c                   @   sò  e Zd ZdZedeƒZdZdZdZ	dZ
eddeƒZeƒ Zeƒ ZdZdZdZedejeƒZdZd	Zd	Zd	ZdZd
ZeddeƒZ d	Z!d	Z"dZ#dZ$dZ%dZ&e'ƒ Z(e'ƒ Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2e3 4de3j5 6e3j5 7d¡d¡¡Z8dZ9dZ:dZ;dZ<dZ=dZ>dZ?i Z@dZAdZBdZCdZDdZEdZFd	ZGdZHedeIƒ eƒZJdZKeLƒ ZMeNƒ ZOeNƒ ZPeQƒ ZRedeSƒ ƒZTede3 4dd¡ U¡  Vd¡eWƒZXeddeWƒZYdZZe[j\Z]dZ^g Z_g Z`g Zaebƒ ZcdZdg d¢Zeefƒ Zgehƒ Ziejƒ Zkd	Zld	ZmdZndZoep�rÚdndZqdZrdZsdd „ ZtdS )!r[   z:
    This object contains the configuration of Scapy.
    Úversionr0   Fznot implementedr*  NÚlogLevelTrò   rý   z>>> é<   i   ZSCAPY_HISTFILEú~z.scapy_historyr¬   rü   é   Úuse_pypyr  ZSCAPY_USE_LIBPCAPr–   r  rê   )0Z	bluetoothZbluetooth4LEZdcerpcZdhcpÚdhcp6ZdnsZdot11Zdot15d4ZeapZgprsZhsrpZinetÚinet6ZipsecZirZisakmpZkerberosÚl2Zl2tpZldapZllmnrZlltdZmgcpZmobileipZmspacZnetbiosZnetflowZntlmÚntpZppiZpppZpptpZradiusZripZrtpZsctpZ	sixlowpanZskinnyÚsmbZsmb2Z	smbclientZ	smbserverZsnmpZtftpZvrrpZvxlanÚx509Zzigbeegš™™™™™©?ÚloZlo0c                 C   s´   |dkrddl m} |S |dkr0ddl m} |S |dkrHddl m} |S |dkr`dd	l m} |S |d
krxddl m} |S |dkr�ddl m} |S |dkr¨t dt	¡ d}t
 | |¡S )NÚmanufdbr   )ÚMANUFDBZ
ethertypes)ÚETHER_TYPESÚ	protocols)Ú	IP_PROTOSZservices_udp)ÚUDP_SERVICESZservices_tcp)ÚTCP_SERVICESZservices_sctp)ÚSCTP_SERVICESZiface6z0conf.iface6 is deprecated in favor of conf.ifacer*  )Z
scapy.datar:  r;  r=  r>  r?  r@  ÚwarningsÚwarnÚDeprecationWarningrÄ   rÅ   )r(   ræ   r:  r;  r=  r>  r?  r@  r)   r)   r*   rÅ   ‡  s2    þzConf.__getattribute__)urE   rF   rG   r§   ÚReadOnlyAttributer   r,  ÚsessionÚinteractiveZinteractive_shellZstealthrH   r+  r*  r�   ro   r¶   r»   ZASN1_default_codecZAS_resolverZdot15d4_protocolr   Úlevelr'  r-  Z	checkIPIDZ
checkIPsrcZcheckIPaddrZcheckIPinIPZcheck_TCPerror_seqackÚverbr  rý   ZpromiscZsniff_promiscZ	raw_layerZraw_summaryZpadding_layerZ
default_l2r…   Zl2typesZl3typesr  r  r  r  ZBTsocketZ	USBsocketZmin_pkt_sizeZmibÚbufsizeÚosÚgetenvÚpathr<   Ú
expanduserZhistfileÚpaddingZexcept_filterr³   Údebug_matchZ	debug_tlsZwepkeyr  Zcache_pcapiflistZneighborZrouteZroute6r9  ZteredoPrefixZteredoServerPortZauto_fragmentZdebug_dissectorr   rü   Zwarning_thresholdrb   Úprogr„   ÚresolveZnoenumr‚   Zemphrû   r1  ÚlowerÚ
startswithr%  r  r  Z	use_npcapÚsocketÚhas_ipv6Úipv6_enabledZextensions_pathsZstats_classic_protocolsZstats_dot11_protocolsÚ
temp_filesrß   ZnetcacheZ
geoip_cityÚload_layersrÎ   Zcontribsrô   Úcrypto_validrù   Zcrypto_valid_advancedZfancy_promptZauto_crop_tablesZrecv_poll_rateZraise_no_dst_macr   Zloopback_nameZ	nmap_baseZnmap_kdbrÅ   r)   r)   r)   r*   r[   Æ  s¶   
ÿÿý4r[   z?IPv6 support disabled in Python. Cannot load Scapy IPv6 layers.)r3  r2  c                    s   ‡ fd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                     s   t jstdƒ‚ˆ | i |¤ŽS )NzWCannot execute crypto-related method! Please install python-cryptography v1.7 or later.)r\   rY  r¤   )rN   r_   ©Úfuncr)   r*   Úfunc_in´  s    z!crypto_validator.<locals>.func_inr)   )r[  r\  r)   rZ  r*   Úcrypto_validator®  s    r]  c               	   C   s>   t jD ]&} zt | ¡ W q ty*   Y q0 qt jd d …= d S r%   )r\   rW  rJ  Úunlinkrø   rq   r)   r)   r*   Úscapy_delete_temp_files½  s    
r_  )^r§   Ú
__future__r   r   Úatexitr'   r  rJ  rë   rT  rþ   rÇ   rA  r¢   r   Zscapy.base_classesr   Zscapy.constsr   r   r   r	   r
   Zscapy.errorr   r   r   Z
scapy.libsr   Zscapy.themesr   r   Zscapy.compatr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Útypesr    Zscapy.as_resolversZ
scapy.nmapr!   Zscapy.packetr"   r  r#   Zscapy.asn1.asn1Zscapy.asn1.mibrÄ   r$   rH   r^   r  rD  rb   rl   r‚   r„   r…   r�   r¶   r¼   r-   r½   rß   rñ   rô   rù   rû   r  r  r%  r'  r+  r[   rV  ÚmrX  r{   r\   r]  r_  r�   r)   r)   r)   r*   Ú<module>   s‚   D#þ$D<&
F `

