
    hsH                        d Z ddlZddlZddlmZ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 ddlmZmZmZmZmZmZ d	ZdZej        Zej        j        Zej        j        Zej        j        Zej        j        Zej         Z!ej        j"        Z"ej        j#        Z#ej        j$        Z$ej%        Z&ej'        Z(ej        j)        Z)ej*        Z+ej,        Z-ej.        Z/ej0        Z1ej2        Z3ej4        xZ5Z6ej7        Z8ej9        Z:d
 Z;d Z<ej=        j>        j?        Z@ee@_A        e$ge@_B        dvdZCe"ZD G d de          ZEej=        jF        jG        ZGeDeG_A        eDe$egeG_B        ej=        jF        jH        ZHeeH_A        eDgeH_B        ej=        jF        jI        ZIeDeI_A        e$e$egeI_B        ej=        jF        jJ        ZJeeJ_A        eD eeE          geJ_B        d ZKej=        jL        ZL G d de          ZM G d de          ZN G d de          ZO G d de          ZP G d dejQ                  ZRdZSdZTdZUdZVe&ZWe&ZXe&ZYe)ZZe1Z[e/Z\e3dz  Z]e]Z^e)Z_e)Z` G d dej                  Za G d  d!e          Zb G d" d#e          Zc eec          Zder&d$efd%efd&edfd'eafd(e(fd)e(fd*e(fd+efd,efd-efg
ec_e        n(d$efd%efd&edfd'eafd(e(fd)e(fd*e(fd+efd,efd-efd.e6fgec_e         G d/ d0e          Zf eef          Zgd$efd%efd&egfd'eafgef_e         G d1 d2e          Zh eeh          Zid$efd%efd&eifd'eafgeh_e         G d3 d4e          Zj eej          Zkd$efd%efd&ekfd'eafgej_e         G d5 d6e          Zl ej        el          Zmd7e!fd&emfd'eafd8efgel_e         G d9 d:e          Zn een          Zoer^d$efd;efd&eofd<ejp        fd=edfd>egfd?eifd@ekfdAejq        fdBejq        fdCejq        fdDe3eSz  fdEefd%efdFefdGefdHeZfdIefdJedz  fdKemfgen_e        ng d$efd;efd&eofd<ejp        fd=edfd>egfd?eifd@ekfdAejq        fdBejq        fdCejq        fdDe3eSz  fdEefd%efdFefdGefdHeZfdIefdJedz  fdKemfdLe!fdMe!fdNeWfdOeXfdPefdQefdRe[fdSeafdTe\fdUe^fdVe_fdWe`fdXeafdYe3eTz  fdZefd[efd\eYfen_e          eeee ee&          eo ee                    d]eLf          Zre	js        fd^Zt G d_ d`e          Zu G da dbe          Zv eev          Zw  eeew ee          e          dceLf          Zxdd ZyeZze(Z{e(Z| G de dfe          Z} G dg dhe          Z~ G di dje          Z G dk dle          Z ee          Zes8  eee: ee                    dmeLf          Z  ede          dneLf          Ze	js        fdoZ G dp dqe          Z ee          Zdreeef         fdsZdtedree         fduZdS )wz
C API calls to Windows DLLs
    N)POINTER	StructureWINFUNCTYPEbyrefcreate_string_buffer)AddressFamily)conf)
WINDOWS_XP)MTU)AnyDictIOListOptionalTuplei  c                     | }g }|rUt          |d          rE|                    t          |j                             |j        j        }|rt          |d          E|S )Ncontents)hasattrappend_struct_to_dictr   next)list_objcurrent_lists      a/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/arch/windows/structures.py_resolve_listr   B   so    GE
 (ggz22 (_W%566777"'  (ggz22 ( L    c                 N   i }| j         j        D ]\  }}t          | |          }|dk    rt          |t          t
          j        f          rt          |          ||<   P|r>t          |d          r.t          |j	        d          rt          |          ||<   |||<   |||<   |S )Nr   r   )	__class___fields_getattr
issubclassr   ctypesUnionr   r   r   r   )
struct_objresultsfnamectypevals        r   r   r   L   s    G",5 ! !uj%((F??ei677 		!,S11GENN 	!WS*-- 	!s|V,, %!.s!3!3!$ GENNNr   c                 ~    t           j        r0t          | pd                    t           j                             dS dS )zZ
    Updates the terminal title with the default one or with `title`
    if provided.
    z	Scapy v{}N)r	   interactive_winapi_SetConsoleTitleformatversion)titles    r   _windows_titler0   h   sE      K I););DL)I)IJJJJJK Kr   c                   @    e Zd ZdZdefdefdefdefdefdefdefgZd	S )
SERVICE_STATUSzUhttps://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_statusdwServiceTypedwCurrentStatedwControlsAccepteddwWin32ExitCodedwServiceSpecificExitCodedwCheckPoint
dwWaitHintN)__name__
__module____qualname____doc__DWORDr     r   r   r2   r2   t   sS        __ %(!5)%u-"E*,e4'u%'HHHr   r2   c                     d}t          dd|          }t          || |          } t                      }t          | |           t	          |          }t          |            t          |           |S )z3Returns content of QueryServiceStatus for a service   N)OpenSCManagerWOpenServiceWr2   QueryServiceStatusr   CloseServiceHandle)serviceSERVICE_QUERY_STATUSschSCManagerstatusresults        r   get_service_statusrK      s     "! L
  G
 F   V$$Fw|$$$Mr   c                       e Zd Zdedz  fgZdS )in_addrbyterA   Nr:   r;   r<   UBYTEr    r?   r   r   rM   rM      s        #$HHHr   rM   c                       e Zd Zdedz  fgZdS )in6_addrrN      NrO   r?   r   r   rR   rR      s        $%HHHr   rR   c                   0    e Zd Zdefdefdefddez  fgZdS )sockaddr_in
sin_familysin_portsin_addrsin_zero   N)r:   r;   r<   SHORTUSHORTrM   CHARr    r?   r   r   rU   rU      s9        u%V$W%QX&(HHHr   rU   c                   0    e Zd ZdefdefdefdefdefgZdS )sockaddr_in6sin6_family	sin6_portsin6_flowinfo	sin6_addrsin6_scope_idN)r:   r;   r<   r[   r\   ULONGrR   r    r?   r   r   r_   r_      s=        &f% %(h' %(	*HHHr   r_   c                   $    e Zd ZdefdefdefgZdS )SOCKADDR_INETIpv4Ipv6	si_familyN)r:   r;   r<   rU   r_   r\   r    r?   r   r   rg   rg      s-        %&f%'HHHr   rg   rZ      rS      c                   0    e Zd Zd ee          fdefgZdS )SOCKET_ADDRESSaddresslengthN)r:   r;   r<   r   rg   INTr    r?   r   r   rn   rn      s.        GGM2233!HHHr   rn   c                       e Zd ZdefdefgZdS )_IP_ADAPTER_ADDRESSES_METRICrp   interface_indexN)r:   r;   r<   re   r>   r    r?   r   r   rs   rs      s%        5!"E*,HHHr   rs   c                       e Zd ZdS )IP_ADAPTER_UNICAST_ADDRESSNr:   r;   r<   r?   r   r   rv   rv              Dr   rv   rp   flagsr   ro   prefix_originsuffix_origin	dad_statevalid_lifetimepreferred_lifetimelease_lifetimeon_link_prefix_lengthc                       e Zd ZdS )IP_ADAPTER_ANYCAST_ADDRESSNrw   r?   r   r   r   r     rx   r   r   c                       e Zd ZdS )IP_ADAPTER_MULTICAST_ADDRESSNrw   r?   r   r   r   r   (  rx   r   r   c                       e Zd ZdS )IP_ADAPTER_DNS_SERVER_ADDRESSNrw   r?   r   r   r   r   5  rx   r   r   c                       e Zd ZdS )IP_ADAPTER_PREFIXNrw   r?   r   r   r   r   B  rx   r   r   	alignmentprefix_lengthc                       e Zd ZdS )IP_ADAPTER_ADDRESSESNrw   r?   r   r   r   r   O  rx   r   r   rt   adapter_namefirst_unicast_addressfirst_anycast_addressfirst_multicast_addressfirst_dns_server_address
dns_suffixdescriptionfriendly_namephysical_addressphysical_address_lengthmtuinterface_typeoper_statusipv6_interface_indexzone_indicesfirst_prefixtransmit_link_speedreceive_link_speedfirst_wins_server_addressfirst_gateway_addressipv4_metricipv6_metricluiddhcpv4_servercompartment_idnetwork_guidconnection_typetunnel_typedhcpv6_serverdhcpv6_client_duiddhcpv6_client_duid_lengthdhcpv6_iaidfirst_dns_suffixGetAdaptersAddressesc           	         t                      }t          t          t          z            }t          | |ddt	          |                    }|dk    rt          d|z            t          t                    }t          |j	                  }t          j        ||          }t          | |d|t	          |                    }|t          k    rt          d|z            t          |          }~|S )z3Return all Windows Adapters addresses from iphlpapiNo   #Error getting structure length (%d)Error retrieving table (%d))re   GAA_FLAG_INCLUDE_PREFIXGAA_FLAG_INCLUDE_ALL_INTERFACES_GetAdaptersAddressesr   RuntimeErrorr   r   r   valuer#   castNO_ERRORr   )AFsizery   respointer_typebufferAdapterAddressesr&   s           r   r   r     s     77D),KKLLE
E $d %d- -C d{{@3FGGG/00L!$*--F{6<88
E $&6 %d- -C h83>???,--GNr   c                   f    e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefdefdefdefgZdS )MIB_IPFORWARDROWForwardDestForwardMaskForwardPolicyForwardNextHopForwardIfIndexForwardTypeForwardProto
ForwardAgeForwardNextHopASForwardMetric1ForwardMetric2ForwardMetric3ForwardMetric4ForwardMetric5N)r:   r;   r<   r>   r    r?   r   r   r   r     s        && %(!5)!5)&'u%#U+!5)!5)!5)!5)!5)+HHHr   r   c                   $    e Zd Zdefdeez  fgZdS )MIB_IPFORWARDTABLE
NumEntriesTableN)r:   r;   r<   r>   r   ANY_SIZEr    r?   r   r   r   r     s+        u%*X568HHHr   r   GetIpForwardTablec                     t                      } t          dt          |           d          }|dk    rt          d|z            t          }t          | j                  }t          j        ||          }t          |t          |           d          }|t          k    rt          d|z            g }t          |j        j                  D ]4}|                    t          |j        j        |                              5~|S )z3Return all Windows routes (IPv4 only) from iphlpapiNFz   r   Tr   )re   _GetIpForwardTabler   r   PMIB_IPFORWARDTABLEr   r   r#   r   r   ranger   r   r   r   r   )r   r   r   r   pIpForwardTabler&   is          r   r   r     s     77D
T5;;
6
6C
d{{@3FGGG&L!$*--Fk&,77O
_eDkk4
@
@C
h83>???G?+677 K K'?'Ea'HIIJJJJNr   c                       e Zd ZdefgZdS )NET_LUIDValueN)r:   r;   r<   	ULONGLONGr    r?   r   r   r   r     s        )$%HHHr   r   c                       e Zd ZdefdefgZdS )IP_ADDRESS_PREFIXPrefixPrefixLengthN)r:   r;   r<   rg   UINT8r    r?   r   r   r   r     s%        =)')HHHr   r   c                   l    e Zd Zdefdefdefdefdefdefdefdefd	e	fd
e
fde
fde
fde
fdefdefgZdS )MIB_IPFORWARD_ROW2InterfaceLuidInterfaceIndexDestinationPrefixNextHopSitePrefixLengthValidLifetimePreferredLifetimeMetricProtocolLoopbackAutoconfigureAddressPublishImmortalAgeOriginN)r:   r;   r<   r   NET_IFINDEXr   rg   UCHARre   NL_ROUTE_PROTOCOLBOOLEANNL_ROUTE_ORIGINr    r?   r   r   r   r     s         (+!;/$&78M*#U+ %($e,5!./W%'1G$W%?+-HHHr   r   c                   $    e Zd Zdefdeez  fgZdS )MIB_IPFORWARD_TABLE2r   r   N)r:   r;   r<   re   r   r   r    r?   r   r   r   r     s+        u%,x78:HHHr   r   GetIpForwardTable2FreeMibTablec                    t           rt          d          t                      }t          | t	          |                    }|t
          k    rt          d|z            g }t          |j        j	                  D ]4}|
                    t          |j        j        |                              5t          |           |S )z3Return all Windows routes (IPv4/IPv6) from iphlpapizNot available on Windows XP !r   )r
   OSErrorPMIB_IPFORWARD_TABLE2_GetIpForwardTable2r   r   r   r   r   r   r   r   r   _FreeMibTable)r   tabler   r&   r   s        r   r   r   *  s      75666!##E
b%,,
/
/C
h83>???G5>,-- A Au~';A'>??@@@@%Nr   c                   $    e Zd ZdefdefdefgZdS )_SECURITY_ATTRIBUTESnLengthlpSecurityDescriptorbInheritHandleN)r:   r;   r<   r>   LPVOIDBOOLr    r?   r   r   r  r  >  s-        E"'0!4(*HHHr   r  returnc            
         ddl m}  dt           | d                    z  }t          t	          j        t                              }t	          j        |t                    }t	          j        t                    |j	        _
        t          j        j                            t          |                                          dddddd|          }|d	k    r t          t	          j                              ||fS )
zCCreate a windows fifo and returns the (client file, server fd)
    r   )
RandStringz\\.\pipe\scapy%s   i  @   i   i,  )scapy.volatiler  strr   r#   sizeofr  r   LPSECURITY_ATTRIBUTESr   r  windllkernel32CreateNamedPipeAencoder  FormatError)r  fr   secr   s        r   _get_win_fifor  G  s     *)))))c**Q--000A!&-0D"E"EFFF
+f3
4
4C!=)=>>CL
-
 
1
1QXXZZ((		5% C byyf(**+++c6Mr   fdc                      t           j        j                             d            G  fddt          t
                             } |            S )z4Connect NamedPipe and return a fake open() file
    Nc                   4    e Zd Zefdedef fdZd fdZdS )_win_fifo_open.<locals>._openedxr  c                     t          j        |          }t           j        j                            ||d d           }|dk    r t          t          j                              |j        S )Nr   )r#   r   r  r  ReadFiler  r  raw)selfr#  bufr   r  s       r   readz$_win_fifo_open.<locals>._opened.readb  se    -a00C-(11 C axxf0223337Nr   Nc                 P    t           j        j                                       d S N)r#   r  r  CloseHandle)r'  r  s    r   closez%_win_fifo_open.<locals>._opened.closen  s"    M"..r22222r   )r  N)r:   r;   r<   r   intbytesr)  r-  )r  s   r   _openedr"  a  sg         # 	 	# 	 	 	 	 	 	 		3 	3 	3 	3 	3 	3 	3 	3r   r0  )r#   r  r  ConnectNamedPiper   r/  )r  r0  s   ` r   _win_fifo_openr2  \  sf     M++B5553 3 3 3 3 3 3"U) 3 3 3  799r   r+  )r=   r#   ctypes.wintypesr   r   r   r   r   socketr   scapy.configr	   scapy.constsr
   
scapy.datar   typingr   r   r   r   r   r   r   r   c_charr]   wintypesr>   r  r   re   c_ulonglongr   HANDLEr  LPWSTRc_void_pVOIDc_intrq   UINTc_uint8r   c_uint16UINT16c_uint32UINT32c_uint64UINT64c_byteBYTEc_ubyter   rP   c_shortr[   c_ushortr\   r   r   r  r  SetConsoleTitleWr,   restypeargtypesr0   	SC_HANDLEr2   Advapi32rC   rE   rB   rD   rK   iphlpapirM   rR   rU   r_   r$   rg   MAX_ADAPTER_ADDRESS_LENGTHMAX_DHCPV6_DUID_LENGTHr   r   "PIP_ADAPTER_WINS_SERVER_ADDRESS_LHPIP_ADAPTER_GATEWAY_ADDRESS_LHPIP_ADAPTER_DNS_SUFFIXIF_OPER_STATUSIF_LUIDNET_IF_COMPARTMENT_IDGUIDNET_IF_NETWORK_GUIDNET_IF_CONNECTION_TYPETUNNEL_TYPErn   rs   rv   PIP_ADAPTER_UNICAST_ADDRESSr    r   PIP_ADAPTER_ANYCAST_ADDRESSr   PIP_ADAPTER_MULTICAST_ADDRESSr   PIP_ADAPTER_DNS_SERVER_ADDRESSr   PIP_ADAPTER_PREFIXr   LP_IP_ADAPTER_ADDRESSESc_char_p	c_wchar_pr   	AF_UNSPECr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r  r  r  r  r/  r2  r?   r   r   <module>ri     s                      !                 # # # # # #                      }
/
!							l			} 	    0 !-0A "&  $*8   K K K K 	' ' ' ' 'Y ' ' ' }%2  "FE2 ]+> !  (k  '6" !651 ]+> !  (''.*A*AB    < =!% % % % %i % % %& & & & &y & & &( ( ( ( () ( ( (* * * * *9 * * *' ' ' ' 'FL ' ' '      "( %) "!%  
 by  ! ! ! ! !V% ! ! !
, , , , ,9 , , ,
	 	 	 	 	 	 	 	 &g&@AA  	5	%	,-	N#	#	#	c	5!	u%	5!+'' 
5	%	,-	N#	#	#	c	5!	u%	5!	 %(+'	 	 	 	 	 	 	 	 &g&@AA ue()	'  #	 	 	 	 	9 	 	 	 !((D E E ue*+	)  %	 	 	 	 	I 	 	 	 "))F!G!G ue+,	*  &	 	 	 	 		 	 	 	 $V^$566 ) e	  	 	 	 	 	9 	 	 	 "'"677  =6	5	E"	()	)	 "=>	 "=>	"$AB	#%CD	v'(	()	&*+	T$>>?	"E*	%		5!	'	'	$	+,)%!!.%%6	5%%6	E"%%6 
()%%6 
)	%%6
 
!"=>%%6 
!"=>%%6 
#$AB%%6 
$%CD%%6 
v'(%%6 
()%%6 
&*+%%6 
T$>>?%%6 
#E*%%6 
%%%6 
%%6  
5!!%%6" 
'#%%6$ 
 '%%%6& 
$'%%6( 
+,)%%6* 
	*+%%6, 
y)-%%6. 
%&HI/%%60 
!"@A1%%62 
3%%64 
5%%66 
7%%68 
.)9%%6: 
01;%%6< 
,-=%%6> 
23?%%6@ 
$A%%6B 
.)C%%6D 
t&<<=E%%6F 
%e,G%%6H 
I%%6J 
34K%%6!R4E5%$+GDMM$;$+GENN4 4 *@(J	L L  *3    @+ + + + +y + + +"8 8 8 8 8 8 8 8
 g011 L[[!4ggenndL L&98%DF F 
  2  & & & & &y & & &) ) ) ) )	 ) ) )
- - - - - - - -$: : : : :9 : : :
   455   	(++v%&&( ( "8, 
 =KK&;<<	" M
 (1    (* * * * *9 * * *   455 uS#X    *s r%y      r   