
    h;H                     d   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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mZmZmZmZmZmZmZmZ ddl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rd ZCd"ZDnd.ZCd/ZDd0ZEd1ZFd2ZGd3ZHd4ZId5ZJd6ZKd7ZLd8ZMd9ZNd:ZOd;ZPd<ZQd=ZRd>ZSd?ZTd@ZUdAZVdBZWdCZXere6ZYe6ZZndDZYdEZZdFZ[dGZ\dHZ]dIZ^dJZ_dKZ`dLZadMZbdNZcdOZddPZedZfdZgd#Zhd$ZidZjdQZkdRZldSZmdLZndTZodZpdZqdZrdZsdZtdZudZvd#Zwd'ZxdZydLZzdUZ{dVZ|dWZ}dXZ~dYZdZdZZd[Zd\Zd]ZdZd^Zd_Zd`ZdaZdbZdcZddZdeZdfZdgZdhZdiZdjZdkZdlZdmZdZi epe,eye,ee,eqe-ereUese/ete0eeEee1eue1eveLee5exdneeAeeHeeKee6i ee@ee6e{e6e|e6e}e6e~e6eze6ee6ewe6eeBeeFd&eJeeWeeWeeWeeWeeMeeOee6ee[ee]eebiZdZdZdZdZdZdZdZdZdoZdpZdqZdrZdsZedteduedvedwedxedyedzed{ed|ed}ed~edediZ ej        d          dz
  ZdZddddddddddd
Zd Zddeeef         fdZ G d deeef                   Z ed          dd            Z ed          d             Z G d deeeeef         f                   Z ed          dd            Zd Zer} eej                            ej        d         dddd                    Z eej                            ej        d         dddd                    \  ZZZ e            Z e            Zn< ed          Z ed          \  ZZZ ed          Z e eg dd                    Zeeeeeeeeeeef         f         f                  f                  Z G d de          ZdS )zA
Global variables and functions for handling external data sets.
    N)DADictfixname)FREEBSDNETBSDOPENBSDWINDOWS)log_loading)	AnyCallableDictIteratorListOptionalTupleUnioncast)DecoratorCallables         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#  i$  i8  i:  i   i2u  i3u  i4u  i5u  i6u  zdot11-commonz
dot11-nmaczdot11-nmacphyzspectrum-mapzprocess-infozcapture-infoaggregationdot3gpsvectorsensorantennabtle)	i  r   r   r   r   r   r   r   r   iQ i  ciscoSystemszNortel Networks3Com	MicrosoftzJuniper Networks, Inc.NetgearzCisco Systems, Inc.zCisco SystemszGoogle, Inc)
r   r   +   i7  iL
  i  i  i  iy+  iA  c                 6    ddl m} |d S || z  | ffd	}|S )zi
    This decorator caches the loading of 'data' dictionaries, in order to reduce
    loading times.
    r   )SCAPY_CACHE_FOLDERNc                     | S N )xs    N/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/data.py<lambda>z"scapy_data_cache.<locals>.<lambda>0  s         c                      d fd	}|S )Nc           	         t          j        | pd                                                                          }                                r	                     d          5 }t          j        |          }d d d            n# 1 swxY w Y   |d         |k    r|d         S na# t          $ rT}t          j
        dt                    dt          |                                         d           Y d }~nd }~ww xY w |           }||d	}	 j                            dd
                               d          5 }t          j        ||           d d d            n# 1 swxY w Y   |S # t          $ r@}t          j
        dt                    dt          |                     |cY d }~S d }~ww xY w)N rbidcontentzCouldn't load cache from z: T)
missing_ok)rl   rk   )parentsexist_okwbzCouldn't write cache into )hashlibsha256encode	hexdigestexistsopenpickleload	Exceptionr	   infostrunlinkparentmkdirdump)filenamecache_idfddataexrl   	cachepathfuncs         rd   rx   z6scapy_data_cache.<locals>._cached_loader.<locals>.load5  st   ~x~2&=&=&?&?@@JJLLH!! 66"-- /%{2/ / / / / / / / / / / / / / /DzX--#I. .  6 6 6$$	NNNNGGG   $$$555555556 d8nnG" D &&td&CCC^^D)) *RKb)))* * * * * * * * * * * * * * *     IB   s   B' &B;B' BB' BB' '
D1A
D  D1E9 
E, E9 ,E00E9 3E04E9 9
G5F>8G>Gra   rb   )r   namerx   r   s   `  rd   _cached_loaderz(scapy_data_cache.<locals>._cached_loader3  s/    #	 #	 #	 #	 #	 #	 #	H rf   )
scapy.mainr_   )r   r_   r   r   s      @rd   scapy_data_cacher   '  sY     .-----!{"T)I"& & & & & & &N rf   c                 (     |            fd}	  st           t           dd          5 } ||           ddd           n# 1 swxY w Y   n;# t           $ r. |r | |                       nt          j        d            Y nw xY wS )zB"
    Parse /etc/protocols and return values as a dictionary.
    _namec                    | D ]}	 |                     d          }|dk    r
|d |         }|                                }|s?t          |                                          }t	          |          dk     s|d         s|t          |d                   t          |d                   <   # t          $ r!}t          j	        d||           Y d }~d }~ww xY wd S )N#r   r   r   (Couldn't parse file [%s]: line [%r] (%s))
findstriptuplesplitlenr   intry   r	   rz   )fdesclineshrplte_integer_basedctr   s        rd   _process_dataz%load_protocols.<locals>._process_datae  s    	 	Dyy~~199;Dzz|| 4::<<((r77Q;;be;18AC1}--..    >	       	 	s#   ;B-<B- ,B--
C7CCrbackslashreplaceerrorsNzCan't open %s file)IOErrorrv   r	   rz   )r   	_fallbackr   _clsr   r   r   s   ` `   @rd   load_protocolsr   ]  s     $X


C      *	= 	M(C(:;;; 	!uM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! = = = 	=M))++&&&&18<<<	=
 Js3   A AA AA AA 5BBc                   (     e Zd Z fdZ fdZ xZS )EtherDAc                     t          |t                    r||}}t          j        dt                     t          t          |                               ||           d S )Nz/ETHER_TYPES now uses the integer value as key !)
isinstancer{   warningswarnDeprecationWarningsuperr   __setitem__)selfattrval	__class__s      rd   r   zEtherDA.__setitem__  s`    dC   	T#DMA"   	gt((s33333rf   c                    t          |t                    rEt          j        d|z  t                     t          t          |                               |          S t          t          |                               |          S )NzPlease use 'ETHER_TYPES.%s')	r   r{   r   r   r   r   r   __getattr____getitem__)r   r   r   s     rd   r   zEtherDA.__getitem__  sr    dC   	:M-4"   $''33D999Wd##//555rf   )__name__
__module____qualname__r   r   __classcell__r   s   @rd   r   r     sQ        4 4 4 4 46 6 6 6 6 6 6 6 6rf   r   
ethertypesc                     dt           t                   fd}t          | pd|dt                    }t	          t          |          S )zn"Parse /etc/ethertypes and return values as a dictionary.
    If unavailable, use the copy bundled with Scapy.returnc                  R    ddl m}  t          |                     d                    S )Nr   DATA
)scapy.libs.ethertypesr   iterr   r   s    rd   r   z"load_ethertypes.<locals>._fallback  s.    ......DJJt$$%%%rf   zscapy/ethertypesr&   )r   r   r   )r   r{   r   r   r   )r   r   prots      rd   load_ethertypesr     sZ    
&x} & & & & (8&8$-(*&( ( (D rf   servicesc           	         t          d| z            }t          d| z            }t          d| z            }|||d}	 t          | d          5 }|D ]i}	 |                    d          }|dk    r
|d |         }|                                }|s@t	          |                                          }t          |          d	k     s|d         s}d
|d         vr|d                             d
d          \  }	}
	 ||
         }n# t          $ r Y w xY wt          |d                   }d|	v rN|	                    d          \  }}t          t          |          t          |          dz             D ]}|||<   n||t          |	          <   <# t          $ r"}t          j        d| ||           Y d }~cd }~ww xY w	 d d d            n# 1 swxY w Y   n$# t          $ r t          j        d           Y nw xY w|||fS )Nz%s-tcpr   z%s-udpz%s-sctp)s   tcps   udps   sctprj      #r   r      /r      -r   zCan't open /etc/services file)r   rv   r   r   r   r   r   KeyErrorr   ranger   ry   r	   warningr   rz   )r   tdctudctsdctdctsr   r   r   r   portprotodtctr   sporteportir   s                    rd   load_servicesr     s    8+,,,D8+,,,D	H,---D D
#:(D!!  	U  99T??Dqyy#ETE{::<<D ! tzz||,,B2ww{{"Q%{ 2a5(( "$Q%++dA"6"6KD%!#E{# ! ! ! !"2a5>>Dt||'+zz$'7'7u!&s5zz3u::>!B!B + +A&*DGG+ +/SYY    'B 	       3 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	B  : : :899999:ts   G G;FG<FG
FGF<DF
DFGDA<FG
F<F71G7F<<G G GG GG G98G9c                   J     e Zd Zd Zd Zd Zd Zd Zd Zd
dZ	 fd	Z
 xZS )ManufDAc                 Z    t          t          |t                    r|d         n|          S Nr   )r   r   r   )r   vs     rd   identzManufDA.ident  s'    z!U33:qtt;;;rf   c                     d                     |                    d          d d                                                   }| j                            |||f          S )N:r   )joinr   upperdgetr   macouis      rd   _get_manuf_couplezManufDA._get_manuf_couple  sL    hhsyy~~bqb)**0022vzz#Sz***rf   c                 8    |                      |          d         S )Nr   r   r   r   s     rd   
_get_manufzManufDA._get_manuf      %%c**1--rf   c                 8    |                      |          d         S r   r   r   s     rd   _get_short_manufzManufDA._get_short_manuf  r   rf   c                    d                     |                    d          d d                                                   }|| v r@d                     | |         d         g|                    d          dd          z             S |S )Nr   r   r   )r   r   r   r   s      rd   _resolve_MACzManufDA._resolve_MAC  st    hhsyy~~bqb)**0022$;;88T#Yq\NSYYs^^ABB-??@@@
rf   c                 ,    |                      |          S )zFind OUI name matching to a MACr   r   s     rd   lookupzManufDA.lookup  s     %%c***rf   Fc                     |rd n                                 d fd| 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                 :     t           fd|D                       S )Nc              3       K   | ]}|v V  	d S ra   rb   .0zrc   s     rd   	<genexpr>z;ManufDA.reverse_lookup.<locals>.<lambda>.<locals>.<genexpr>	  s'      $7$7Q!V$7$7$7$7$7$7rf   anyrc   ls   ` rd   re   z(ManufDA.reverse_lookup.<locals>.<lambda>	  s$    $7$7$7$7Q$7$7$7!7!7 rf   c                 :     t           fd|D                       S )Nc              3   D   K   | ]}|                                 v V  d S ra   )lowerr   s     rd   r   z;ManufDA.reverse_lookup.<locals>.<lambda>.<locals>.<genexpr>  s/      $?$?Q!''))^$?$?$?$?$?$?rf   r   r   s   ` rd   re   z(ManufDA.reverse_lookup.<locals>.<lambda>  s$    $?$?$?$?Q$?$?$?!?!? rf   c                 4    i | ]\  }} |          ||S rb   rb   )r   kr   filtrr   s      rd   
<dictcomp>z*ManufDA.reverse_lookup.<locals>.<dictcomp>  s.    BBBA55q>>B1BBBrf   )r  r   items)r   r   case_sensitiver  s    ` @rd   reverse_lookupzManufDA.reverse_lookup  sU      	@77EE::<<D??EBBBBBBBBBrf   c                 \    g dt          t          |                                           z   S )N)r   r   r   loopkupr	  )r   r   __dir__)r   r   s    rd   r  zManufDA.__dir__  s7    
 
 
 '4  ((**+ 	+rf   )F)r   r   r   r   r   r   r   r   r   r	  r  r   r   s   @rd   r   r     s        < < <+ + +
. . .. . .  + + +
C C C C + + + + + + + + +rf   r   manufdbc                 <    t           pd           fd}	  st          t           dd          5 } ||           ddd           n# 1 swxY w Y   nA# t          $ r4 dd	lm}  |t          |                    d
                               Y nw xY wS )z
    Loads manuf file from Wireshark.

    :param filename: the file to load the manuf file from
    :returns: a ManufDA filled object
    zscapy/manufdbr   c                    | D ]}	 |                                 }|r|                    d          r/|                    d d          }|d d         \  }}t          |          dk    r-|d                             d                                           nd}|p|}||f|<   # t
          $ r t          j        d|d           Y w xY wd S )Nr   r   ri   z&Couldn't parse one line from [%s] [%r]T)exc_info)r   
startswithr   r   lstripry   r	   r   )r   r   partsr   shrtlngr   r  s         rd   r   z!load_manuf.<locals>._process_data%  s    	C 	CDCzz|| ts33 

4++!"1"I	T69%jj1nneAhooc**00222"kT#Sy C C C#$L$,dTC C C C C CC	C 	Cs   +B$A0B$$"C	C	r   r   r   Nr   r   r   )r   r   rv   scapy.libs.manufr   r   r   )r   r   r   r   r  s   `   @rd   
load_manufr    s(    H7888GC C C C C C . 	M(C(:;;; 	!uM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! . . .))))))d4::d++,,-----. Ns4   A AA AA AA ;BBc                     | D ]E}t           j                            ||          }t           j                            |          r|c S FdS )z'Find filename among several directoriesN)ospathr   ru   )directoriesr   	directoryr  s       rd   select_pathr  A  sQ     !  	w||Ix007>>$ 	KKK	4rf   
SystemRootsystem32driversetcprotocolz/etc/protocolsz/etc/servicesz/etc/ethertypes)z/usrz
/usr/localz/optz/opt/wiresharkz./Applications/Wireshark.app/Contents/Resourceszshare/wireshark/manufc                   (    e Zd Zd Zd ZddZd ZdS )KnowledgeBasec                 "    || _         d | _        d S ra   )r   base)r   r   s     rd   __init__zKnowledgeBase.__init__p  s     			rf   c                     d| _         d S )Nri   )r&  r   s    rd   	lazy_initzKnowledgeBase.lazy_initu  s    			rf   Nc                 |    ||| _         | j        }d | _        |                                  | j        	|| _        d S d S ra   )r   r&  r*  )r   r   oldbases      rd   reloadzKnowledgeBase.reloady  sH    $DM)	9DIII rf   c                    | j         |                                  t          t          t          t
          t          t          t          t          t          t          t          f         f         f                  f         | j                   S ra   )r&  r*  r   r   r{   r   r   r   r)  s    rd   get_basezKnowledgeBase.get_base  sW    9NNE#tE#tCc3h4G/H*H$IJJKTYWWWrf   ra   )r   r   r   r'  r*  r-  r/  rb   rf   rd   r$  r$  o  sZ          
         X X X X Xrf   r$  ra   )__doc__calendarrq   r  rw   r   scapy.dadictr   r   scapy.constsr   r   r   r   scapy.errorr	   typingr
   r   r   r   r   r   r   r   r   scapy.compatr   	ETHER_ANYETHER_BROADCAST
SOL_PACKETSO_ATTACH_FILTERSO_TIMESTAMPNS	ETH_P_ALLETH_P_IP	ETH_P_ARP
ETH_P_IPV6ETH_P_MACSECARPHDR_ETHERARPHDR_METRICOM
ARPHDR_PPPARPHDR_LOOPBACK
ARPHDR_TUNDLT_NULL
DLT_EN10MB	DLT_EN3MBDLT_AX25
DLT_PRONET	DLT_CHAOSDLT_IEEE802
DLT_ARCNETDLT_SLIPDLT_PPPDLT_FDDIDLT_RAWDLT_RAW_ALTDLT_SLIP_BSDOSDLT_PPP_BSDOS
DLT_PFSYNC	DLT_HHDLCDLT_ATM_CLIPDLT_PPP_SERIALDLT_PPP_ETHERDLT_SYMANTEC_FIREWALL
DLT_C_HDLCDLT_IEEE802_11
DLT_FRELAYDLT_LOOPDLT_ENCDLT_LINUX_SLL	DLT_LTALK	DLT_PFLOGDLT_PRISM_HEADERDLT_AIRONET_HEADERDLT_IP_OVER_FCDLT_IEEE802_11_RADIODLT_ARCNET_LINUXDLT_LINUX_IRDADLT_IEEE802_11_RADIO_AVSDLT_LINUX_LAPDDLT_BLUETOOTH_HCI_H4DLT_USB_LINUXDLT_PPIDLT_IEEE802_15_4_WITHFCSDLT_BLUETOOTH_HCI_H4_WITH_PHDRDLT_AX25_KISSDLT_PPP_WITH_DIRDLT_FC_2DLT_CAN_SOCKETCANDLT_IPV4DLT_IPV6DLT_IEEE802_15_4_NOFCSDLT_USBPCAPDLT_NETLINKDLT_USB_DARWINDLT_BLUETOOTH_LE_LLDLT_BLUETOOTH_LINUX_MONITORDLT_BLUETOOTH_LE_LL_WITH_PHDR	DLT_VSOCKDLT_NORDIC_BLEDLT_ETHERNET_MPACKETDLT_LINUX_SLL2IPV6_ADDR_UNICASTIPV6_ADDR_MULTICASTIPV6_ADDR_CAST_MASKIPV6_ADDR_LOOPBACKIPV6_ADDR_GLOBALIPV6_ADDR_LINKLOCALIPV6_ADDR_SITELOCALIPV6_ADDR_SCOPE_MASKIPV6_ADDR_6TO4IPV6_ADDR_UNSPECIFIEDARPHRD_ETHERARPHRD_EETHERARPHRD_AX25ARPHRD_PRONETARPHRD_CHAOSARPHRD_IEEE802ARPHRD_ARCNETARPHRD_DLCI
ARPHRD_ATMARPHRD_METRICOMARPHRD_SLIPARPHRD_CSLIPARPHRD_SLIP6ARPHRD_CSLIP6ARPHRD_ADAPT
ARPHRD_CAN
ARPHRD_PPPARPHRD_CISCOARPHRD_RAWHDLCARPHRD_TUNNELARPHRD_FRADARPHRD_LOOPBACKARPHRD_LOCALTLKARPHRD_FDDI
ARPHRD_SITARPHRD_FCPPARPHRD_FCALARPHRD_FCPLARPHRD_FCFABRICARPHRD_IRDAARPHRD_IEEE802_TRARPHRD_IEEE80211ARPHRD_IEEE80211_PRISMARPHRD_IEEE80211_RADIOTAPARPHRD_IEEE802154ARPHRD_NETLINKARPHRD_VSOCKMONARPHRD_LAPDARPHRD_NONEARPHRD_TO_DLTPPI_DOT11COMMONPPI_DOT11NMACPPI_DOT11NMACPHYPPI_SPECTRUM_MAPPPI_PROCESS_INFOPPI_CAPTURE_INFOPPI_AGGREGATIONPPI_DOT3PPI_GPS
PPI_VECTOR
PPI_SENSORPPI_ANTENNAPPI_BTLE	PPI_TYPEStimegmEPOCHMTUIANA_ENTERPRISE_NUMBERSr   r   r{   r   r   r   r   r   r  r  r  r   environ	IP_PROTOSTCP_SERVICESUDP_SERVICESSCTP_SERVICESETHER_TYPESMANUFDB
KBBaseTypeobjectr$  rb   rf   rd   <module>r     sl	      				   ( ( ( ( ( ( ( ( : : : : : : : : : : : : # # # # # #
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 + * * * * * 	 
 		
 

 
	
	


 GGG
 f NMMNM
 JJJI 


 HGGHG		      
 !$   
 HHHHH  !  # 	             



     (*(Z( Z( 9	(
 ( :( )( ( {( K( #( ( ( n( ,(  3!(" #( ($ *%(& '(( ')(* '+(, 7-(. '/(0 1(2 G3(4 5(6 7(8 Y9(: ;(< =(> ?(@ A(B XC(D E( (F -KYO( (V     


 ^<onnn]fUf	$ 	677%? 	
"


  3 3 3l (,2sCx(' ' ' 'T6 6 6 6 6fS#X 6 6 60 ,     *. . .b6+ 6+ 6+ 6+ 6+fS%S/)* 6+ 6+ 6+r )# # # #L    rw||

<      I 1>bgll

< ? ? 1 1-L, "/##KjllGG/00I0=o0N0N-L,!/"344Kj? ? ?#	
 	
 G eCeCc4S>6I1J,J&K!LLMN
X X X X XF X X X X Xrf   