a
    kÄ#dð>  ã                N   @   st  d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlm  mZ ddlmZmZmZmZmZmZmZmZmZ dZd	Zd
ZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5e
�rdZ6nd Z6d!Z7e�s"e	�r,d"Z8dZ9nd#Z8d$Z9e�r@d%Z:nd&Z:d%Z;d'Z<d(Z=d)Z>d*Z?d+Z@d,ZAd-ZBe
�rtd ZCd"ZDnd.ZCd/ZDd0ZEd1ZFd2ZGd3ZHd4ZId5ZJd6ZKd7ZLd8ZMd9ZNd:ZOd;ZPd<ZQd=ZRd>ZSd?ZTd@ZUdAZVdBZWdCZXe
�rÜe6ZYe6ZZndDZYdEZZdFZ[dGZ\dHZ]dIZ^dJZ_dKZ`dLZadMZbdNZcdZddZed#Zfd$ZgdZhdOZidPZjdQZkdKZldRZmdZndZodZpdZqdZrdZsdZtd#Zud'ZvdZwdKZxdSZydTZzdUZ{dVZ|dWZ}dZ~dXZdYZ€dZZ�d[Z‚dZƒd\Z„d]Z…d^Z†d_Z‡d`ZˆdaZ‰dbZŠdcZ‹ddZŒdeZ�dfZŽdgZ�dhZ�diZ‘djZ’dkZ“dZ”ene,ewe,eƒe,eoe-epeUeqe/ere0e}eEeŒe1ese1eteLe…e5evdle�eAeŽeHe�eKe~e6ee@e†e6eye6eze6e{e6e|e6exe6e€e6eue6e‚eBe„eFd&eJe‡eWeˆeWe‰eWeŠeWe‹eMe“eOe”e6e�e[e‘e]e’eai'Z•dZ–dZ—dZ˜dZ™dZšdZ›dZœdZ�dmZždnZŸdoZ dpZ¡dqZ¢e–dre—dse˜dte™duešdve›dweœdxe�dyeždzeŸd{e d|e¡d}e¢d~iZ£e ¤d¡d€ Z¥d�Z¦d‚dƒd„d…d†d‡dˆd‰dŠdƒd‹œ
Z§ddee¨e©f fdŒd�„ZªG dŽd�„ d�ee¨e©f ƒZ«d�d‘„ Z¬d’d“„ Z­G d”d•„ d•ee©ee©e©f f ƒZ®d–d—„ Z¯d˜d™„ Z°e�rÌeªej± ²ej³dš d›dœd�dž¡ƒZ´e­ej± ²ej³dš d›dœd�dŸ¡ƒ\ZµZ¶Z·e¬dƒZ¸e®ƒ Z¹nheªd ƒZ´e¬d¡ƒZ¸e­d¢ƒ\ZµZ¶Z·e®ƒ Z¹e°g d£¢d¤ƒZºeº�r4ze¯eºƒZ¹W n" e»e¼f�y2   e ½d¥¡ Y n0 eee©eee©ee©ee©e©f f f  f  Z¾G d¦d§„ d§e¿ƒZÀdS )¨zA
Global variables and functions for handling external data sets.
é    N)ÚDADictÚfixname)ÚFREEBSDÚNETBSDÚOPENBSDÚWINDOWS)Úlog_loading)Ú	plain_str)	ÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚTupleÚUnionÚcasts         s   ÿÿÿÿÿÿi  é   é#   é   i   i  iÝ†  iåˆ  é   é   i   i  iþÿ  é   é   é   é   é   é   é	   é
   é   é   ée   é   é   é   éy   é   é   é2   é3   éc   éh   éi   ék   él   ém   éq   ér   éu   éw   éx   éz   é   é�   é�   é£   é±   é»   é½   éÀ   éÃ   éÉ   éÊ   éÌ   éà   éã   éä   éå   éæ   éù   éý   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$  i8  i:  iý   éÿÿÿÿi2u  i3u  i4u  i5u  i6u  zdot11-commonz
dot11-nmaczdot11-nmacphyzspectrum-mapzprocess-infozcapture-infoZaggregationZdot3ZgpsZvectorZsensorZantennaZbtle)	i²  r   r   r   r   r   r   r   r   i€Q iÿÿ  ZciscoSystemszNortel NetworksZ3ComÚ	MicrosoftzJuniper Networks, Inc.ZNetgearzCisco Systems, Inc.zCisco SystemszGoogle, Inc)
r   r   é+   i7  iL
  i®  i‹  iÒ  iy+  iõA  c                    s”   |ˆd�‰‡ ‡‡fdd„}z>ˆs$t ‚tˆdƒ�}||ƒ W d  ƒ n1 sL0    Y  W n6 t yŽ   |r~|t| d¡ƒƒ nt dˆ¡ Y n0 ˆS )z8"Parse /etc/protocols and return values as a dictionary.©Ú_namec                    s´   | D ]ª}zp|  d¡}|dkr(|d |… }| ¡ }|s8W qt| ¡ ƒ}t|ƒdk sX|d s\W qt|d ƒˆt|d ˆ ƒ< W q ty¬ } zt 	dˆ||¡ W Y d }~qd }~0 0 qd S )Nó   #r   r   r   ú(Couldn't parse file [%s]: line [%r] (%s))
ÚfindÚstripÚtupleÚsplitÚlenr   ÚintÚ	Exceptionr   Úinfo)ÚfdescÚlineÚshrpÚltÚe©Ú_integer_baseÚdctÚfilename© úA/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/data.pyÚ_process_data*  s&    
üz%load_protocols.<locals>._process_dataÚrbNó   
zCan't open %s file)ÚIOErrorÚopenÚiterrY   r   r]   )rf   Ú	_fallbackrd   Ú_clsri   r^   rg   rc   rh   Úload_protocols$  s    
*rq   c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚEtherDAc                    s6   t |tƒr || }}t dt¡ tt| ƒ ||¡ d S )Nz/ETHER_TYPES now uses the integer value as key !)Ú
isinstanceÚstrÚwarningsÚwarnÚDeprecationWarningÚsuperrr   Ú__setitem__)ÚselfÚattrÚval©Ú	__class__rg   rh   ry   O  s    

þzEtherDA.__setitem__c                    s:   t |tƒr*t d| t¡ tt| ƒ |¡S tt| ƒ |¡S )NzPlease use 'ETHER_TYPES.%s')	rs   rt   ru   rv   rw   rx   rr   Ú__getattr__Ú__getitem__)rz   r{   r}   rg   rh   r€   Y  s    
þzEtherDA.__getitem__)Ú__name__Ú
__module__Ú__qualname__ry   r€   Ú__classcell__rg   rg   r}   rh   rr   L  s   
rr   c                 C   s*   ddl m} t| pd|dtd�}tt|ƒS )zn"Parse /etc/ethertypes and return values as a dictionary.
    If unavailable, use the copy bundled with Scapy.r   )ÚDATAzScapy's backup ETHER_TYPESr%   )ro   rd   rp   )Zscapy.libs.ethertypesr…   rq   rr   r   )rf   r…   Zprotrg   rg   rh   Úload_ethertypesd  s    ýr†   c                 C   sÐ  t d|  d�}t d|  d�}t d|  d�}|||dœ}�znt| dƒ��L}|D �]4}zø| d¡}|dkrr|d |… }| ¡ }|s‚W qLt| ¡ ƒ}t|ƒd	k s¢|d s¦W qLd
|d vr¶W qL|d  d
d¡\}	}
z||
 }W n tyî   Y W qLY n0 t|d ƒ}d|	v �r<|	 d¡\}}t	t
|ƒt
|ƒd ƒD ]}|||< �q*n||t
|	ƒ< W qL t�y€ } zt d| ||¡ W Y d }~qLd }~0 0 qLW d   ƒ n1 �sš0    Y  W n t�yÄ   t d¡ Y n0 |||fS )Nz%s-tcprR   z%s-udpz%s-sctp)s   tcps   udps   sctprj   rT   r   r   ó   /r   ó   -rU   zCan't open /etc/services file)r   rm   rV   rW   rX   rY   rZ   ÚKeyErrorr   Úranger[   r\   r   Úwarningrl   r]   )rf   ZtdctZudctZsdctZdctsr^   r_   r`   ra   ÚportÚprotoZdtctÚnameZsportZeportÚirb   rg   rg   rh   Úload_servicesp  sV    ý


ü@r�   c                       sV   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zddd„Z	‡ fdd„Z
‡  ZS )ÚManufDAc                 C   s   t t|tƒr|d n|ƒS ©Nr   )r   rs   rX   )rz   Úvrg   rg   rh   Úident¢  s    zManufDA.identc                 C   s.   d  | d¡d d… ¡ ¡ }| j |||f¡S )Nú:r   )ÚjoinrY   ÚupperÚdÚget©rz   ÚmacÚouirg   rg   rh   Ú_get_manuf_couple¦  s    zManufDA._get_manuf_couplec                 C   s   |   |¡d S )Nr   ©r�   ©rz   r›   rg   rg   rh   Ú
_get_manuf«  s    zManufDA._get_manufc                 C   s   |   |¡d S r’   rž   rŸ   rg   rg   rh   Ú_get_short_manuf¯  s    zManufDA._get_short_manufc                 C   sN   d  | d¡d d… ¡ ¡ }|| v rJd  | | d g| d¡dd …  ¡S |S )Nr•   r   r   )r–   rY   r—   rš   rg   rg   rh   Ú_resolve_MAC³  s    &zManufDA._resolve_MACc                 C   s
   |   |¡S )zFind OUI name matching to a MACrž   rŸ   rg   rg   rh   Úlookupº  s    zManufDA.lookupFc                    s:   |rdd„ ‰ nˆ  ¡ ‰dd„ ‰ ‡ ‡fdd„t | j¡D ƒS )zÃ
        Find all MACs registered to a OUI

        :param name: the OUI name
        :param case_sensitive: default to False
        :returns: a dict of mac:tuples (Name, Extended Name)
        c                    s   t ‡ fdd„|D ƒƒS )Nc                 3   s   | ]}ˆ |v V  qd S ©Nrg   ©Ú.0Úz©Úxrg   rh   Ú	<genexpr>É  ó    ú;ManufDA.reverse_lookup.<locals>.<lambda>.<locals>.<genexpr>©Úany©r©   Úlrg   r¨   rh   Ú<lambda>É  r«   z(ManufDA.reverse_lookup.<locals>.<lambda>c                    s   t ‡ fdd„|D ƒƒS )Nc                 3   s   | ]}ˆ |  ¡ v V  qd S r¤   )Úlowerr¥   r¨   rg   rh   rª   Ì  r«   r¬   r­   r¯   rg   r¨   rh   r±   Ì  r«   c                    s    i | ]\}}ˆ ˆ|ƒr||“qS rg   rg   )r¦   Úkr“   ©ZfiltrrŽ   rg   rh   Ú
<dictcomp>Í  s   
ÿz*ManufDA.reverse_lookup.<locals>.<dictcomp>)r²   ÚsixÚ	iteritemsr˜   )rz   rŽ   Úcase_sensitiverg   r´   rh   Úreverse_lookup¿  s
    	
zManufDA.reverse_lookupc                    s   g d¢t t| ƒ ¡  S )N)r    r¡   r¢   Zloopkupr¹   )rx   r‘   Ú__dir__©rz   r}   rg   rh   rº   Ð  s    úzManufDA.__dir__)F)r�   r‚   rƒ   r”   r�   r    r¡   r¢   r£   r¹   rº   r„   rg   rg   r}   rh   r‘   ¡  s   
r‘   c           	      C   sè   t | d�}t| dƒ�À}|D ]ª}z€| ¡ }|r6| d¡r:W q| dd¡}|dd… \}}t|ƒdkrt|d  d¡ ¡ nd}|p~|}t|ƒ}t|ƒt|ƒf||< W q tyÂ   t	j
d| |dd	� Y q0 qW d  ƒ n1 sÚ0    Y  |S )
z‹
    Loads manuf file from Wireshark.

    :param filename: the file to load the manuf file from
    :returns: a ManufDA filled object
    rR   rj   rT   Nr   r«   z&Couldn't parse one line from [%s] [%r]T)Úexc_info)r‘   rm   rW   Ú
startswithrY   rZ   Úlstripr	   r\   r   r‹   )	rf   Zmanufdbr^   r_   ÚpartsZouibZshrtZlngrœ   rg   rg   rh   Ú
load_manufÛ  s$    
"ÿ,rÀ   c                 C   s0   | D ]&}t j ||¡}t j |¡r|  S qdS )z'Find filename among several directoriesN)ÚosÚpathr–   Úexists)Údirectoriesrf   Ú	directoryrÂ   rg   rg   rh   Úselect_pathö  s
    
rÆ   Z
SystemRootZsystem32ZdriversÚetcÚprotocolZservicesz/etc/protocolsz/etc/ethertypesz/etc/services)z/usrz
/usr/localz/optz/opt/wiresharkz./Applications/Wireshark.app/Contents/Resourceszshare/wireshark/manufz$Cannot read wireshark manuf databasec                   @   s.   e Zd Zdd„ Zdd„ Zd
dd„Zdd	„ ZdS )ÚKnowledgeBasec                 C   s   || _ d | _d S r¤   )rf   Úbase)rz   rf   rg   rg   rh   Ú__init__*  s    zKnowledgeBase.__init__c                 C   s
   d| _ d S )NÚ )rÊ   r»   rg   rg   rh   Ú	lazy_init/  s    zKnowledgeBase.lazy_initNc                 C   s6   |d ur|| _ | j}d | _|  ¡  | jd u r2|| _d S r¤   )rf   rÊ   rÍ   )rz   rf   Zoldbaserg   rg   rh   Úreload3  s    
zKnowledgeBase.reloadc                 C   sB   | j d u r|  ¡  tttttttttttf f f  f | j ƒS r¤   )rÊ   rÍ   r   r   rt   r   r   r   r»   rg   rg   rh   Úget_base=  s    
zKnowledgeBase.get_base)N)r�   r‚   rƒ   rË   rÍ   rÎ   rÏ   rg   rg   rg   rh   rÉ   )  s   

rÉ   )ÁÚ__doc__ÚcalendarrÁ   ru   Zscapy.dadictr   r   Zscapy.constsr   r   r   r   Zscapy.errorr   Zscapy.compatr	   Zscapy.libs.sixZlibsr¶   r
   r   r   r   r   r   r   r   r   Z	ETHER_ANYZETHER_BROADCASTZ
SOL_PACKETZSO_ATTACH_FILTERZSO_TIMESTAMPNSZ	ETH_P_ALLZETH_P_IPZ	ETH_P_ARPZ
ETH_P_IPV6ZETH_P_MACSECZARPHDR_ETHERZARPHDR_METRICOMZ
ARPHDR_PPPZARPHDR_LOOPBACKZ
ARPHDR_TUNZDLT_NULLZ
DLT_EN10MBZ	DLT_EN3MBZDLT_AX25Z
DLT_PRONETZ	DLT_CHAOSZDLT_IEEE802Z
DLT_ARCNETZDLT_SLIPZDLT_PPPZDLT_FDDIZDLT_RAWZDLT_RAW_ALTZDLT_SLIP_BSDOSZDLT_PPP_BSDOSZ
DLT_PFSYNCZ	DLT_HHDLCZDLT_ATM_CLIPZDLT_PPP_SERIALZDLT_PPP_ETHERZDLT_SYMANTEC_FIREWALLZ
DLT_C_HDLCZDLT_IEEE802_11Z
DLT_FRELAYZDLT_LOOPZDLT_ENCZDLT_LINUX_SLLZ	DLT_LTALKZ	DLT_PFLOGZDLT_PRISM_HEADERZDLT_AIRONET_HEADERZDLT_IP_OVER_FCZDLT_IEEE802_11_RADIOZDLT_ARCNET_LINUXZDLT_LINUX_IRDAZDLT_IEEE802_11_RADIO_AVSZDLT_LINUX_LAPDZDLT_BLUETOOTH_HCI_H4ZDLT_USB_LINUXZDLT_PPIZDLT_IEEE802_15_4_WITHFCSZDLT_BLUETOOTH_HCI_H4_WITH_PHDRZDLT_AX25_KISSZDLT_PPP_WITH_DIRZDLT_FC_2ZDLT_CAN_SOCKETCANZDLT_IPV4ZDLT_IPV6ZDLT_IEEE802_15_4_NOFCSZDLT_USBPCAPZDLT_NETLINKZDLT_USB_DARWINZDLT_BLUETOOTH_LE_LLZDLT_BLUETOOTH_LE_LL_WITH_PHDRZ	DLT_VSOCKZDLT_ETHERNET_MPACKETZDLT_LINUX_SLL2ZIPV6_ADDR_UNICASTZIPV6_ADDR_MULTICASTZIPV6_ADDR_CAST_MASKZIPV6_ADDR_LOOPBACKZIPV6_ADDR_GLOBALZIPV6_ADDR_LINKLOCALZIPV6_ADDR_SITELOCALZIPV6_ADDR_SCOPE_MASKZIPV6_ADDR_6TO4ZIPV6_ADDR_UNSPECIFIEDZARPHRD_ETHERZARPHRD_EETHERZARPHRD_AX25ZARPHRD_PRONETZARPHRD_CHAOSZARPHRD_IEEE802ZARPHRD_ARCNETZARPHRD_DLCIZ
ARPHRD_ATMZARPHRD_METRICOMZARPHRD_SLIPZARPHRD_CSLIPZARPHRD_SLIP6ZARPHRD_CSLIP6ZARPHRD_ADAPTZ
ARPHRD_CANZ
ARPHRD_PPPZARPHRD_CISCOZARPHRD_RAWHDLCZARPHRD_TUNNELZARPHRD_FRADZARPHRD_LOOPBACKZARPHRD_LOCALTLKZARPHRD_FDDIZ
ARPHRD_SITZARPHRD_FCPPZARPHRD_FCALZARPHRD_FCPLZARPHRD_FCFABRICZARPHRD_IRDAZARPHRD_IEEE802_TRZARPHRD_IEEE80211ZARPHRD_IEEE80211_PRISMZARPHRD_IEEE80211_RADIOTAPZARPHRD_IEEE802154ZARPHRD_NETLINKZARPHRD_VSOCKMONZARPHRD_LAPDZARPHRD_NONEZARPHRD_TO_DLTZPPI_DOT11COMMONZPPI_DOT11NMACZPPI_DOT11NMACPHYZPPI_SPECTRUM_MAPZPPI_PROCESS_INFOZPPI_CAPTURE_INFOZPPI_AGGREGATIONZPPI_DOT3ZPPI_GPSZ
PPI_VECTORZ
PPI_SENSORZPPI_ANTENNAZPPI_BTLEZ	PPI_TYPESÚtimegmÚEPOCHZMTUZIANA_ENTERPRISE_NUMBERSr[   rt   rq   rr   r†   r�   r‘   rÀ   rÆ   rÂ   r–   ÚenvironZ	IP_PROTOSZTCP_SERVICESZUDP_SERVICESZSCTP_SERVICESZETHER_TYPESZMANUFDBZ
manuf_pathrl   ÚOSErrorr‹   Z
KBBaseTypeÚobjectrÉ   rg   rg   rg   rh   Ú<module>   s  ,Ù+ó	ö
ÿ
(1 :
ûûý,