
    ha                     &   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 ddlm	Z	m
Z
 ddlmZ ddl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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&Z& ddl'm(Z(m)Z) ddlZ*ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 e*j4        j        sddl5m6Z6  e7ed          sde_8        dZ9dZ:g dZ; G d de&          Z<erdZ=ej>        rQerej?        d         dz   Z=ddl@mAZAmBZB nddl@mCZC ddlDmEZEmFZFmGZGmHZHm3ZI 	 ddl@mJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z] 	 ddl@m^Z^ n# e_$ r	 ddl@m`Z^ Y nw xY wd  Zaer eV            Zbd!ebc                                v rHejd        e                    e=d"z             r ed#           n ejf                    d$k    r ed%           nod&ebc                                v rd'e_g        d(xe_h        e_h        nC# ei$ r; d)e_>        erejj        r ejk        d*           nejj        r ejk        d+           Y nw xY wej>        re G d, d-          ZlelZm G d. d/e          Znesejo        p                    en            G d0 d1e<          Zq G d2 d3e<          Zr G d4 d5er          ZsdS dS )6z/
Packet sending and receiving libpcap/WinPcap.
    Nselect_objects)raw	plain_str)conf)WINDOWSLINUXBSDSOLARIS)DLT_RAW_ALTDLT_RAW	ETH_P_ALLMTU)Scapy_Exceptionlog_loadinglog_runtimewarning)InterfaceProviderNetworkInterface_GlobInterfaceTypenetwork_name)Packet)	inet_ntop)SuperSocket)str2macdecode_locale_str)AnyDictListNoReturnOptionalTupleTypecast)ioctlAF_LINK   ipB   )LOOPBACKUPRUNNINGWIRELESSOKDISCONNECTEDNAc                   T    e Zd ZddgZd ZefdZefdZd Ze	d
d            Z
d	 ZdS )_L2libpcapSocketpcap_fdlvlc                 8   || _         | j                                         }|t          j        v r9t          j        |         | _        |t
          t          fv r	d| _        d S d| _        d S t          j        | _        t          d| j
        || j        j                   d S )N   r(   zBUnable to guess datalink type (interface=%s linktype=%i). Using %s)r2   datalinkr   l2typesLLr   r   r3   
default_l2r   ifacename)selffdlls      V/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/arch/libpcap.py__init__z_L2libpcapSocket.__init__X   s    \""$$l2&DG   oDG7
B        c                 V    | j                                         \  }}|dS | j        ||fS )zb
        Receives a packet, then returns a tuple containing
        (cls, pkt_data, time)
        N)NNN)r2   nextr8   )r<   xtspkts       r?   recv_rawz_L2libpcapSocket.recv_rawm   s5     ,##%%C;##wRrA   c                     | j                             d           |                     |          }| j                             d           |S )z3Receives and dissect a packet in non-blocking mode.TF)r2   setnonblockrecv)r<   rD   ps      r?   nonblock_recvz_L2libpcapSocket.nonblock_recvx   sD     	  &&&IIaLL  '''rA   c                 4    | j                                         S N)r2   filenor<   s    r?   rO   z_L2libpcapSocket.fileno   s    |""$$$rA   Nc                 "    t          | |          S rN   r   )socketsremains     r?   selectz_L2libpcapSocket.select   s     gv...rA   c                 |    | j         rd S d| _         t          | d          r| j                                         d S d S )NTr2   )closedhasattrr2   closerP   s    r?   rX   z_L2libpcapSocket.close   sN    ; 	F4## 	!L     	! 	!rA   rN   )__name__
__module____qualname__	__slots__r@   r   rG   rL   rO   staticmethodrT   rX    rA   r?   r1   r1   U   s        E"I  *  	  	  	  	  "    % % % / / / \/! ! ! ! !rA   r1    WINDIRz\System32\Npcap)pcap_setmintocopypcap_getevent)pcap_get_selectable_fd)POINTERbyrefcreate_string_bufferc_ubyter$   )PCAP_ERRBUF_SIZE
PCAP_ERRORPCAP_ERROR_NO_SUCH_DEVICEPCAP_ERROR_PERM_DENIEDbpf_program
pcap_closepcap_compilepcap_datalinkpcap_findalldevspcap_freealldevspcap_geterr	pcap_if_tpcap_lib_versionpcap_next_expcap_open_livepcap_pkthdrpcap_setfilterpcap_setnonblocksockaddr_insockaddr_in6)pcap_inject)pcap_sendpacketc            	          ddl m}  t          t                    } t	          t
                                }i }t          t          |          |          dk     rdS 	 |}|rt          |j	        j
                  }t          |j	        j        pd          }|j	        j        }g }d}	d}
|j	        j        }|rm|j	        j        j	        j        }|j	        j        }|t           j        k    r7t%          |t	          t&                              }|j	        j        dd         }n|t           j        k    r7t%          |t	          t,                              }|j	        j        dd         }ni|t           j        k    rK|j	        j        }t5          t7          t9          |dd                                       }	|j	        j        }|j	        j        }t=          |t7          t9          |                              }|dk    r|                    |           |j	        j        }|m | |t@                    }||||	|
f||<   |j	        j        }||tB          _"        n# tF          $ r  w xY w	 tI          |           dS # tI          |           w xY w)zThis functions calls libpcap ``pcap_findalldevs`` function,
            and extracts and parse all the data scapy will need
            to build the Interface List.

            The data will be stored in ``conf.cache_pcapiflist``
            r   )	FlagValueNr_      z0.0.0.0)%scapy.fieldsr   rf   rh   rd   rs   rp   re   r   contentsr;   descriptionflags	addressesaddr	sa_familysocketAF_INETccastrz   sin_addrAF_INET6r{   	sin6_addrr&   sa_datar   bytes	bytearrayrC   r   append_pcap_if_flagsr   cache_pcapiflist	Exceptionrq   )r   errdevsif_listrK   r;   r   r   ipsmacitypeafamilyapvaladdr_rawr   s                    r?   load_winpcapyr      s    /.....&'788C%79%%''DGdS11A55-' %($QZ_55D"+
.4"# #K J,ECCE
,A ,!"!9!CZ_!V^33"'GK,@,@"A"AC'*|'<QQQ'?HH#v66"'GL,A,A"B"BC'*|'=aaa'@HH#v~55 #%+"5C")%	#bqb'0B0B*C*C"D"DC !
A$ !"
A$(y7J7J1K1KLL9,,JJt,,,JO1  ,2 &Ie^<<E%0#uc5$IGDM
AK  %(L )0%%    & !&&&&& &&&&s   G=I I< I''I< <Js   winpcapz
\wpcap.dllzaWinpcap is installed over Npcap. Will use Winpcap (see 'Winpcap/Npcap conflicts' in Scapy's docs)XPzDWinPcap is now deprecated (not maintained). Please use Npcap insteads   npcapTzNpcap Loopback AdapterFzeNpcap/Winpcap is not installed ! See https://scapy.readthedocs.io/en/latest/installation.html#windowszLibpcap is not installed!c                   J    e Zd ZdZ	 ddZd ZeZd Zd Zd Z	d Z
d	 Zd
 ZdS )_PcapWrapper_libpcapzWrapper for the libpcap callsNc                 h	   t          t                    | _        t          t          |                              d                    | _        d| _        t          rt          j	        rRddl
m}  || j        | j                  | _        | j        sEt          t          | j                                      d                    }|rt!          |          ddl
m}m}	m}
m}m}m}m}  || j        |          dk    rYt          t          | j                                      d                    }|rt!          |          t1          j        d            |	| j        |          dk    rYt          t          | j                                      d                    }|rt!          |          t1          j        d            |
| j        |          dk    rYt          t          | j                                      d                    }|rt!          |          t1          j        d	           |rn || j        d
          dk    rYt          t          | j                                      d                    }|rt!          |          t1          j        d            || j                  }|dk     rt          t          | j                                      d                    }t          t           || j                                                d                    }t          t           ||                                        d                    }|t4          k    r|}n;|t6          k    r|d|d|d}n$|t8          k    r|dk    r|d|d|d}n|d|}t!          |          nt          r|rt!          d          t;          | j        |||| j                  | _        t          t          | j                                      d                    }|rt!          |          t          rd| _        t?          | j        d            tA          tB                                | _"         tA          tF                                | _$        tK                      | _%        d S )Nutf8r   r   )pcap_create    )pcap_set_snaplenpcap_set_promiscpcap_set_timeoutpcap_set_rfmonpcap_activatepcap_statustostrrr   zCould not set snaplenzCould not set promisczCould not set timeout   zCould not set monitor modez: z
()r_   z)On Windows, this feature requires NPcap !T)&rf   rh   errbufr   encoder:   dtlr   r   	use_npcapscapy.libs.winpcapyr   pcapr   r   stripOSErrorr   r   r   r   r   r   rr   r   errorri   rj   rk   rv   	remainingra   rd   rw   headerrg   pkt_datarl   )r<   devicesnaplenpromiscto_msmonitorr   r   r   r   r   r   r   r   rr   statusr:   errstr	statusstrerrmsgs                       r?   r@   z_PcapWrapper_libpcap.__init__   s    //?@@DK-V$$++F33 DJ DH J)dn J);;;;;;'K
DK@@	y --i.D.D.J.J7.S.STTE -%enn,                  $#DIw771<<-i.D.D.J.J7.S.STTE -%enn,%&=>>>##DIw771<<-i.D.D.J.J7.S.STTE -%enn,%&=>>>##DIu55::-i.D.D.J.J7.S.STTE -%enn,%&=>>> H%~di33q88 1)DK2H2H2N2Nw2W2W X X  1")%..0#)*FGGG&ty11 A:: .!$*--33G<< E /!++di"8"899??HH F !2!"2"26":":;;AA'JJ! !I ++!'#<<<3855)))VVV!L#999fll3855)))VVV!L-2UUII!>!&//)/ 2  Ow O!"MNNN*4:+2GU+/;8 8	 *)DK*@*@*F*Fw*O*OPP )!%..( 0 "& "$)Q///.'+..00DK,GG,,..DM*}}DrA   c                    t          | j        t          | j                  t          | j                            }|dk    s	d| _        dS d| _        | j        j        j        j        t          | j        j        j        j
                  dz  z   }t          t          | j        d| j        j        j                                     }||fS )zb
            Returns the next packet as the tuple
            (timestamp, raw_packet)
            r   F)NNTg    .AN)ru   r   re   r   r   r   r   rE   tv_secfloattv_usecr   r   len)r<   crE   rF   s       r?   rC   z_PcapWrapper_libpcap.next  s     	dk""dm$$ A
 q55!&!z!%$'.dk*-566<=  	7t{3778   C s7NrA   c                 X    | j         dk    rt          | j                  | _         | j         S )zWrapper around pcap_datalinkr   )r   ro   r   rP   s    r?   r6   z_PcapWrapper_libpcap.datalink  s'     x2~~(338OrA   c                     t           r0| j        rdS t          t          t	          | j                            S t          t          t          | j                            S )Nr   )r   r   r$   intrb   r   rc   rP   s    r?   rO   z_PcapWrapper_libpcap.fileno  sQ     D> 2Cty!9!9::: C!7	!B!BCCCrA   c                    t          |                    d                    }t          | j        t	          | j                  |dd          dk    r-t          | j        t	          | j                            dk    rd S t          t          t          | j                            
                    d                    }t          d|z            )Nr   r   r   r   r   zCannot set filter: %s)rf   r   rn   r   re   rl   rx   r   r   rr   r   r   )r<   f
filter_expr   s       r?   	setfilterz_PcapWrapper_libpcap.setfilter  s    -ahhv.>.>??JDIuT-='>'>
ArRRVWWW!$)U43C-D-DEEJJF&+di001177@@ F ""9F"BCCCrA   c                 <    t          | j        || j                   d S rN   )ry   r   r   )r<   is     r?   rI   z _PcapWrapper_libpcap.setnonblock  s    TY4;77777rA   c                 H    t          | j        |t          |                    S rN   )r|   r   r   r<   rD   s     r?   sendz_PcapWrapper_libpcap.send  s    ty!SVV444rA   c                 .    t          | j                   d S rN   )rm   r   rP   s    r?   rX   z_PcapWrapper_libpcap.close  s    ty!!!!!rA   rN   )rY   rZ   r[   __doc__r@   rC   __next__r6   rO   r   rI   r   rX   r^   rA   r?   r   r     s        ++ "c	- c	- c	- c	-J	 	 	0 	 	 			D 		D 		D
	D 
	D 
	D	8 	8 	8	5 	5 	5	" 	" 	" 	" 	"rA   r   c                   &    e Zd ZdZdZdZd Zd ZdS )LibpcapProviderzF
        Load interfaces from Libpcap on non-Windows machines
        libpcapTc           
         t           j        rt          ri S t           j        st	                       i }d}t           j                                        D ]\  }}|\  }}}}}	|dz  }t          st          s	t          r9|s7ddl	m
}
 	  |
|          \  }	}t          |          }n# t          $ r d}Y nw xY w||p|||||	||d}t          | |          ||<   |S )Nr   r   )get_if_raw_hwaddrz00:00:00:00:00:00)r;   r   r   indexr   typer   r   )r   use_pcapr   r   r   itemsr	   r
   r   scapy.arch.unixr   r   r   r   )r<   datar   ifnamedatr   r   r   r   r   r   _macif_datas                r?   loadzLibpcapProvider.load  s1   = G 	(  DA#4::<< ? ?693S%eQ 2C 27 23 2AAAAAA2&7&7&?&?t%dmm$ 2 2 212 ##.#8&$*!"	 	  0g>>VKs   B  B/.B/c                 b    t           j        rddlm}  |             |                                 S )Nr   )r   )r   r   scapy.arch.libpcapr   r   )r<   r   s     r?   reloadzLibpcapProvider.reload  s7    }  <<<<<<99;;rA   N)rY   rZ   r[   r   r;   r   r   r   r^   rA   r?   r   r     sI        	 	 	 	 	@	 	 	 	 	rA   r   c                   4     e Zd ZdZdedddf fd	Zd Z xZS )L2pcapListenSocketz%read packets at layer 2 using libpcapNc                    || _         d | _        |t          j        }|| _        ||| _        nt          j        | _        || _        t          |t          | j        d| j                  }t          t          |                               |           	 t          s@t          | j                                        t           t#          j        dd                     n# t&          $ r Y nw xY w|t(          k    rOt          j        r%|rd|dt          j        d}ndt          j        z  }|r| j                            |           d S d S d S )	Nd   r   r   r   r   r   Ir   () and not (r   not (%s))r   outsr   r:   r   sniff_promiscr   	open_pcapr   superr   r@   r   r%   r2   rO   BIOCIMMEDIATEstructpackr   r   except_filterr   )r<   r:   r   r   filterr   r=   	__class__s          r?   r@   zL2pcapListenSocket.__init__   su    DIDI}
DJ"&#1"DL  B $d++44R888 ++--%C++  
    y  % A A A8>@R@R@R!S!+d.@!@ 3L**622222 ! 3 3s   AC 
C('C(c                      t          d          )Nz+Can't send anything with L2pcapListenSocket)r   r   s     r?   r   zL2pcapListenSocket.send,  s    !=  rA   rY   rZ   r[   descr   r@   r   __classcell__r   s   @r?   r   r     sc        6  #! !*	3 *	3 *	3 *	3 *	3 *	3X	 	 	 	 	 	 	rA   r   c                   6     e Zd ZdZdeddddf fd	Zd Z xZS )L2pcapSocketz0read/write packets at layer 2 using only libpcapNr   c                    |t           j        }|| _        || _        ||| _        nt           j        | _        || _        t          |t          | j        d| j                  }t          t          |           
                    |           	 t          s@t          | j                                        t          t!          j        dd                     n# t$          $ r Y nw xY w|r|t&          k    rd|z  }nNd }nKt           j        r%|rd|dt           j        d}nd	t           j        z  }|t&          k    r|rd
||fz  }nd|z  }|| _        |r| j                            |           d S d S )Nr   r   r   r   zether proto %ir   r   r   r   z(ether proto %i) and (%s))r   r:   r   r   r   r   r   r   r   r  r@   r   r%   r2   rO   r   r   r   r   r   r   r   r   )	r<   r:   r   r   r   nofilterr   r=   r   s	           r?   r@   zL2pcapSocket.__init__5  s    }
DJDI"&#1"DL  B ,%%..r222 ++--%C++  
     99$$-4FF!FF% A A A8>@R@R@R!S!+d.@!@9$$ 9!<f~!M!1D!8 DK /&&v...../ /s   AC 
C! C!c                     t          |          }	 t          j                    |_        n# t          $ r Y nw xY w| j                            |          S rN   )r   time	sent_timeAttributeErrorr2   r   )r<   rD   sxs      r?   r   zL2pcapSocket.sendn  sW    QB"ikk!   <$$R(((s   * 
77r  r  s   @r?   r  r  2  sf        A  #! !7	/ 7	/ 7	/ 7	/ 7	/ 7	/r	) 	) 	) 	) 	) 	) 	)rA   r  c                   T     e Zd ZdZ fdZefdZd Zedd            Z	 fdZ
 xZS )	L3pcapSocketz0read/write packets at layer 3 using only libpcapc                 ~     t          t          |           j        |i | t          | j                  | i| _        d S rN   )r   r  r@   r   r:   
send_socks)r<   argskwargsr   s      r?   r@   zL3pcapSocket.__init__z  s?    .E,%%.????+DJ77>DOOOrA   c                 v    t          j        | |fi |}|r#| j        dk    r|j        |j        _        |j        S |S )Nr(   )r  rJ   r3   r  payload)r<   rD   r  rs       r?   rJ   zL3pcapSocket.recv  sF    !$44V44A !TX]]!"	y HrA   c                    |                                 d         }|t          t          j                  }t	          |          }|| j        vr0t          || j        | j        | j        | j	                  | j        |<   | j        |         }|j
        }|j        dk    r2t          |j        |          st          d||j                   ||_        |j        dk    r%t          |                                |z            }nt          |          }	 t!          j                    |_        n# t$          $ r Y nw xY w|                    |          S )Nr   )r:   r   r   r   r   r5   z7Incompatible L3 types detected using %s instead of %s !r(   )router   r   r:   r   r  r  r   r   r   r2   r3   
issubclassr8   r   r   r  r  r  r   )r<   rD   ifftype_xsockr=   r  s          r?   r   zL3pcapSocket.send  s?    ''))A,C{"4:..!WWF$/))'3; L L( ( ($ ?3'DBx1}}!$'622 %U"DG- - -$DGx1}}47799q=))1XX"ikk!   772;;s   D( (
D54D5Nc                     g }| D ]I}t          |t                    r||j                                        z  }4|                    |           Jt
                              ||          S )N)rS   )
isinstancer  r  valuesr   r  rT   )rR   rS   socksr  s       r?   rT   zL3pcapSocket.select  sr     E ' 'dL11 'T_33555EELL&&&&&&uV&<<<rA   c                     | j         rd S t          t          |                                            | j                                        D ]}|| ur|                                 d S rN   )rV   r   r  rX   r  r   )r<   r=   r   s     r?   rX   zL3pcapSocket.close  sl    { ,%%++---o,,..  T>>HHJJJ rA   rN   )rY   rZ   r[   r  r@   r   rJ   r   r]   rT   rX   r  r  s   @r?   r  r  w  s        A	? 	? 	? 	? 	?
  	 	 	 		 	 	B 
	= 	= 	= 
	=	 	 	 	 	 	 	 	 	rA   r  )tr   osplatformr   r   r  scapy.automatonr   scapy.compatr   r   scapy.configr   scapy.constsr   r	   r
   r   
scapy.datar   r   r   r   scapy.errorr   r   r   r   scapy.interfacesr   r   r   r   scapy.packetr   scapy.pton_ntopr   scapy.supersocketr   scapy.utilsr   r   scapytypingr   r   r   r    r!   r"   r#   r$   constsfcntlr%   rW   r&   r   
PCAP_IF_UPr   r1   
NPCAP_PATHr   environr   ra   rb   rc   ctypesrd   re   rf   rg   r   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   ImportErrorr}   r   versionlowerpathexistsreleaser   loopback_namer   interactivecriticalr   r   r   ifacesregister_providerr   r  r  r^   rA   r?   <module>rC     s    
			     * * * * * * ' ' ' ' ' ' ' '       5 5 5 5 5 5 5 5 5 5 5 5                                         % % % % % % ) ) ) ) ) ) 2 2 2 2 2 2 2 2    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 |  wvy!! FN  
  ;! ;! ;! ;! ;!{ ;! ;! ;!D  J= @S ?Z),??
HHHHHHHHH>>>>>>SSSSSSSSSSSSSSuS	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
,	K7777777 	K 	K 	KJJJJJJJJ	K<	' <	' <	'V  	S&&((GW]]__,,7>>*}"<== 8G / 0 0 0 0 &X%''4//G 7 8 8 8W]]__,,!%:RR"T%77     
	 $$W  
  $$/  : = ^j" j" j" j" j" j" j" j"V %I, , , , ,+ , , ,\  7%%o6663 3 3 3 3- 3 3 3jC) C) C) C) C)' C) C) C)JC C C C C| C C C C Cw
^ ^s6   ,G" 1D8 7G" 8EG" EG" "=H"!H"