a
    kÄ#dŽF  ã                &   @   sð  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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Z ej!Z"ejj#Z#ej$Z%ej&Z'ej(Z)ej*Z+ej,Z-ej. Z/Z0ej1Z2ej3Z4dd	„ Z5d
d„ Z6ej7j8j9Z:ee:_;ege:_<dzdd„Z=eZ>G dd„ deƒZ?ej7j@jAZAe>eA_;e>eegeA_<ej7j@jBZBeeB_;e>geB_<ej7j@jCZCe>eC_;eeegeC_<ej7j@jDZDeeD_;e>ee?ƒgeD_<dd„ ZEej7jFZFG dd„ deƒZGG dd„ deƒZHG dd„ deƒZIG dd„ deƒZJG dd„ dejKƒZLG dd„ deƒZMG dd„ deƒZNG d d!„ d!eƒZOeeOƒZPeeePƒd"eFfƒZQd#d"„ ZRd$ZSd%ZTd&ZUd'ZVe ZWe ZXe ZYe#ZZe+Z[e)Z\e-d& Z]e]Z^e#Z_e#Z`G d(d)„ d)ejƒZaG d*d+„ d+eƒZbG d,d-„ d-eƒZceecƒZde�rd.efd/efd0edfd1eafd2e"fd3e"fd4e"fd5efd6efd7efg
ec_enHd.efd/efd0edfd1eafd2e"fd3e"fd4e"fd5efd6efd7efd8e0fgec_eG d9d:„ d:eƒZfeefƒZgd.efd/efd0egfd1eafgef_eG d;d<„ d<eƒZheehƒZid.efd/efd0eifd1eafgeh_eG d=d>„ d>eƒZjeejƒZkd.efd/efd0ekfd1eafgej_eG d?d@„ d@eƒZle el¡ZmdAefd0emfd1eafdBefgel_eG dCdD„ dDeƒZneenƒZoe�rèd.efdEefd0eofdFejpfdGedfdHegfdIeifdJekfdKejqfdLejqfdMejqfdNe-eS fdOefd/efdPefdQefdReZfdSefdTed& fdUemfgen_enød.efdEefd0eofdFejpfdGedfdHegfdIeifdJekfdKejqfdLejqfdMejqfdNe-eS fdOefd/efdPefdQefdReZfdSefdTed& fdUemfdVefdWefdXeWfdYeXfdZefd[efd\e[fd]eafd^e\fd_e^fd`e_fdae`fdbeafdce-eT fddefdeefdfeYfg%en_eeeeeee ƒeoeeƒƒdgeFfƒZrejsfdhdg„ZtG didj„ djeƒZuG dkdl„ dleƒZveevƒZweeeweeƒeƒdmeFfƒZxdndm„ ZyeZze"Z{e"Z|G dodp„ dpeƒZ}G dqdr„ dreƒZ~G dsdt„ dteƒZG dudv„ dveƒZ€ee€ƒZ�e�sÞeee4ee�ƒƒdweFfƒZ‚ede�ƒdxeFfƒZƒejsfdydw„Z„dS ){z
C API calls to Windows DLLs
é    N)ÚPOINTERÚ	StructureÚWINFUNCTYPEÚbyrefÚcreate_string_buffer)Úconf)Ú
WINDOWS_XP)ÚAddressFamilyÚAnyÚDictÚListÚOptionaliÜÿ  c                 C   s4   | }g }|r0t |dƒr0| t|jƒ¡ |jj}q|S )NÚcontents)ÚhasattrÚappendÚ_struct_to_dictr   Únext)Úlist_objÚcurrentZ_list© r   úT/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/arch/windows/structures.pyÚ_resolve_list=   s    
r   c                 C   s†   i }| j jD ]t\}}t| |ƒ}|dkr(qt|ttjfƒrFt|ƒ||< q|rxt|dƒrxt|j	dƒrnt
|ƒ||< q€|||< q|||< q|S )Nr   r   )Ú	__class__Ú_fields_ÚgetattrÚ
issubclassr   ÚctypesÚUnionr   r   r   r   )Z
struct_objÚresultsÚfnameÚctypeÚvalr   r   r   r   G   s    


r   c                 C   s   t jrt| pd t j¡ƒ 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)Útitler   r   r   Ú_windows_titlec   s    r'   c                   @   s>   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_statusZdwServiceTypeZdwCurrentStateZdwControlsAcceptedZdwWin32ExitCodeZdwServiceSpecificExitCodeZdwCheckPointZ
dwWaitHintN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚDWORDr   r   r   r   r   r(   o   s   úr(   c                 C   sH   d}t dd|ƒ}t|| |ƒ} tƒ }t| |ƒ t|ƒ}t| ƒ t|ƒ |S )z3Returns content of QueryServiceStatus for a serviceé   N)ÚOpenSCManagerWÚOpenServiceWr(   ÚQueryServiceStatusr   ÚCloseServiceHandle)ZserviceZSERVICE_QUERY_STATUSZschSCManagerÚstatusÚresultr   r   r   Úget_service_statusŠ   s(    ýýþr5   c                   @   s   e Zd Zded fgZdS )Úin_addrÚbyter.   N©r)   r*   r+   ÚUBYTEr   r   r   r   r   r6   ¯   s   r6   c                   @   s   e Zd Zded fgZdS )Úin6_addrr7   é   Nr8   r   r   r   r   r:   ³   s   r:   c                   @   s,   e Zd Zdefdefdefdde fgZdS )Úsockaddr_inZ
sin_familyZsin_portZsin_addrZsin_zeroé   N)r)   r*   r+   ÚSHORTÚUSHORTr6   ÚCHARr   r   r   r   r   r<   ·   s
   
ýr<   c                   @   s.   e Zd ZdefdefdefdefdefgZdS )Úsockaddr_in6Zsin6_familyZ	sin6_portZsin6_flowinfoZ	sin6_addrZsin6_scope_idN)r)   r*   r+   r>   r?   ÚULONGr:   r   r   r   r   r   rA   ¾   s   ürA   c                   @   s"   e Zd ZdefdefdefgZdS )ÚSOCKADDR_INETZIpv4ZIpv6Z	si_familyN)r)   r*   r+   r<   rA   r?   r   r   r   r   r   rC   Æ   s   þrC   c                   @   s^   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gZdS )ÚMIBICMPSTATSZdwMsgsZdwErrorsZdwDestUnreachsZdwTimeExcdsZdwParmProbsZdwSrcQuenchsZdwRedirectsZdwEchosZ
dwEchoRepsZdwTimestampsZdwTimestampRepsZdwAddrMasksZdwAddrMaskRepsN©r)   r*   r+   r-   r   r   r   r   r   rD   Ð   s   ôrD   c                   @   s   e Zd ZdefdefgZdS )ÚMIBICMPINFOZicmpInStatsZicmpOutStatsN)r)   r*   r+   rD   r   r   r   r   r   rF   à   s   ÿrF   c                   @   s   e Zd ZdefgZdS )ÚMIB_ICMPÚstatsN)r)   r*   r+   rF   r   r   r   r   r   rG   å   s   rG   ÚGetIcmpStatisticsc                  C   s    t ƒ } tt| ƒƒ t| ƒ}~ |S )z+Return all Windows ICMP stats from iphlpapi)rG   Ú_GetIcmpStatisticsr   r   )Ú
statisticsr   r   r   r   rI   ñ   s
    r=   é‚   r;   é   c                   @   s    e Zd ZdeeƒfdefgZdS )ÚSOCKET_ADDRESSÚaddressÚlengthN)r)   r*   r+   r   rC   ÚINTr   r   r   r   r   rN     s   
ÿrN   c                   @   s   e Zd ZdefdefgZdS )Ú_IP_ADAPTER_ADDRESSES_METRICrP   Úinterface_indexN)r)   r*   r+   rB   r-   r   r   r   r   r   rR     s   ÿrR   c                   @   s   e Zd ZdS )ÚIP_ADAPTER_UNICAST_ADDRESSN©r)   r*   r+   r   r   r   r   rT   "  s   rT   rP   Úflagsr   rO   Zprefix_originZsuffix_originZ	dad_stateZvalid_lifetimeZpreferred_lifetimeZlease_lifetimeZon_link_prefix_lengthc                   @   s   e Zd ZdS )ÚIP_ADAPTER_ANYCAST_ADDRESSNrU   r   r   r   r   rW   D  s   rW   c                   @   s   e Zd ZdS )ÚIP_ADAPTER_MULTICAST_ADDRESSNrU   r   r   r   r   rX   Q  s   rX   c                   @   s   e Zd ZdS )ÚIP_ADAPTER_DNS_SERVER_ADDRESSNrU   r   r   r   r   rY   ^  s   rY   c                   @   s   e Zd ZdS )ÚIP_ADAPTER_PREFIXNrU   r   r   r   r   rZ   k  s   rZ   Z	alignmentZprefix_lengthc                   @   s   e Zd ZdS )ÚIP_ADAPTER_ADDRESSESNrU   r   r   r   r   r[   x  s   r[   rS   Zadapter_nameZfirst_unicast_addressZfirst_anycast_addressZfirst_multicast_addressZfirst_dns_server_addressZ
dns_suffixÚdescriptionZfriendly_nameZphysical_addressZphysical_address_lengthZmtuZinterface_typeZoper_statusZipv6_interface_indexZzone_indicesZfirst_prefixZtransmit_link_speedZreceive_link_speedZfirst_wins_server_addressZfirst_gateway_addressZipv4_metricZipv6_metricZluidZdhcpv4_serverZcompartment_idZnetwork_guidZconnection_typeZtunnel_typeZdhcpv6_serverZdhcpv6_client_duidZdhcpv6_client_duid_lengthZdhcpv6_iaidZfirst_dns_suffixÚGetAdaptersAddressesc                 C   sŽ   t ƒ }t ttB ƒ}t| |ddt|ƒƒ}|dkr:td| ƒ‚ttƒ}t|j	ƒ}t
 ||¡}t| |d|t|ƒƒ}|tkr€td| ƒ‚t|ƒ}~|S )z3Return all Windows Adapters addresses from iphlpapiNéo   ú#Error getting structure length (%d)úError retrieving table (%d))rB   ÚGAA_FLAG_INCLUDE_PREFIXÚGAA_FLAG_INCLUDE_ALL_INTERFACESÚ_GetAdaptersAddressesr   ÚRuntimeErrorr   r[   r   Úvaluer   ÚcastÚNO_ERRORr   )ÚAFÚsizerV   ÚresÚpointer_typeÚbufferZAdapterAddressesr   r   r   r   r]   Æ  s(    þ
þc                   @   sd   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_IPFORWARDROWZForwardDestZForwardMaskZForwardPolicyZForwardNextHopZForwardIfIndexZForwardTypeZForwardProtoZ
ForwardAgeZForwardNextHopASZForwardMetric1ZForwardMetric2ZForwardMetric3ZForwardMetric4ZForwardMetric5NrE   r   r   r   r   rm   æ  s   órm   c                   @   s    e Zd Zdefdee fgZdS )ÚMIB_IPFORWARDTABLEÚ
NumEntriesÚTableN)r)   r*   r+   r-   rm   ÚANY_SIZEr   r   r   r   r   rn   ÷  s   
ÿrn   ÚGetIpForwardTablec                  C   sš   t ƒ } tdt| ƒdƒ}|dkr*td| ƒ‚t}t| jƒ}t ||¡}t|t| ƒdƒ}|t	krhtd| ƒ‚g }t
|jjƒD ]}| t|jj| ƒ¡ qx~|S )z3Return all Windows routes (IPv4 only) from iphlpapiNFéz   r_   Tr`   )rB   Ú_GetIpForwardTabler   rd   ÚPMIB_IPFORWARDTABLEr   re   r   rf   rg   Úranger   ro   r   r   rp   )ri   rj   rk   rl   ZpIpForwardTabler   Úir   r   r   rr     s    
c                   @   s   e Zd ZdefgZdS )ÚNET_LUIDÚValueN)r)   r*   r+   Ú	ULONGLONGr   r   r   r   r   rx   #  s   rx   c                   @   s   e Zd ZdefdefgZdS )ÚIP_ADDRESS_PREFIXZPrefixZPrefixLengthN)r)   r*   r+   rC   ÚUINT8r   r   r   r   r   r{   '  s   ÿr{   c                   @   sj   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_ROW2ZInterfaceLuidZInterfaceIndexZDestinationPrefixZNextHopZSitePrefixLengthZValidLifetimeZPreferredLifetimeZMetricÚProtocolZLoopbackZAutoconfigureAddressZPublishZImmortalZAgeZOriginN)r)   r*   r+   rx   ÚNET_IFINDEXr{   rC   ÚUCHARrB   ÚNL_ROUTE_PROTOCOLÚBOOLEANÚNL_ROUTE_ORIGINr   r   r   r   r   r}   ,  s    òr}   c                   @   s    e Zd Zdefdee fgZdS )ÚMIB_IPFORWARD_TABLE2ro   rp   N)r)   r*   r+   rB   r}   rq   r   r   r   r   r   r„   >  s   
ÿr„   ÚGetIpForwardTable2ZFreeMibTablec                 C   sl   t rtdƒ‚tƒ }t| t|ƒƒ}|tkr4td| ƒ‚g }t|jj	ƒD ]}| 
t|jj| ƒ¡ qDt|ƒ |S )z3Return all Windows routes (IPv4/IPv6) from iphlpapizNot available on Windows XP !r`   )r   ÚOSErrorÚPMIB_IPFORWARD_TABLE2Ú_GetIpForwardTable2r   rg   rd   rv   r   ro   r   r   rp   Ú_FreeMibTable)rh   Útablerj   r   rw   r   r   r   r…   S  s    )N)…r,   r   Zctypes.wintypesr   r   r   r   r   Zscapy.configr   Zscapy.constsr   Zscapy.compatr	   r
   r   r   r   rq   rg   Zc_charr@   Zwintypesr-   ZBOOLr‚   rB   Zc_ulonglongrz   ZHANDLEZLPWSTRZc_void_pZVOIDÚc_intrQ   ZUINTZc_uint8r|   Zc_uint16ZUINT16Zc_uint32ZUINT32Zc_uint64ZUINT64Zc_byteZBYTEZc_ubyter€   r9   Zc_shortr>   Zc_ushortr?   r   r   ZwindllZkernel32ZSetConsoleTitleWr#   ÚrestypeÚargtypesr'   Z	SC_HANDLEr(   ZAdvapi32r0   r2   r/   r1   r5   Ziphlpapir6   r:   r<   rA   r   rC   rD   rF   rG   Z	PMIB_ICMPrJ   rI   ZMAX_ADAPTER_ADDRESS_LENGTHZMAX_DHCPV6_DUID_LENGTHra   rb   Z"PIP_ADAPTER_WINS_SERVER_ADDRESS_LHZPIP_ADAPTER_GATEWAY_ADDRESS_LHZPIP_ADAPTER_DNS_SUFFIXZIF_OPER_STATUSZIF_LUIDZNET_IF_COMPARTMENT_IDZGUIDZNET_IF_NETWORK_GUIDZNET_IF_CONNECTION_TYPEZTUNNEL_TYPErN   rR   rT   ZPIP_ADAPTER_UNICAST_ADDRESSr   rW   ZPIP_ADAPTER_ANYCAST_ADDRESSrX   ZPIP_ADAPTER_MULTICAST_ADDRESSrY   ZPIP_ADAPTER_DNS_SERVER_ADDRESSrZ   ZPIP_ADAPTER_PREFIXr[   ZLP_IP_ADAPTER_ADDRESSESÚc_char_pZ	c_wchar_prc   Ú	AF_UNSPECr]   rm   rn   ru   rt   rr   r   r�   rƒ   rx   r{   r}   r„   r‡   rˆ   r‰   r…   r   r   r   r   Ú<module>	   sÌ  









ÿöõüüü
ü

ì


Û)ýü 
ÿþþýÿ