o
    �õ±j”  ã                   @   s´   d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZmZ d dlmZmZmZ G dd	„ d	ejƒZeeeeed
œZG dd„ dƒZdS )é    )ÚstatN)ÚCallableÚDictÚList)ÚurlparseÚparse_qs)ÚUniSSL)ÚUniProxyProtoÚUniProxyTarget)Ústr_oneÚint_oneÚbool_onec                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚUniProtoé   é   é   é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú
CLIENT_TCPÚCLIENT_SSL_TCPÚ
CLIENT_UDPÚCLIENT_DTLSÚCLIENT_QUICÚ
SERVER_TCPÚSERVER_SSL_TCPÚ
SERVER_UDP© r"   r"   ú‘/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/unicomm/common/target.pyr      s    r   )ÚdcÚtimeoutÚserveripÚdnsÚprivportc                   @   sò   e Zd Zd4dededed	ed
ededededee dede	dedefdd„Z
dd„ Zed5defdd„ƒZd6dd„Zd7dd„Zd7dd „Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zedi fdeded-eeef fd.d/„ƒZd0d1„ Zd2d3„ ZdS )8Ú	UniTargetr   NFÚ r   ÚipÚportÚprotocolr%   Ússl_ctxÚhostnameÚdc_ipÚdomainÚproxiesr'   Úuse_privileged_source_portÚsrcipÚsrcportc                 C   sØ   || _ || _|| _|| _|| _|| _|| _|
| _|| _|| _	|| _
|	| _|	d u r+g | _z
t |¡ || _W n   |d ur@|| _ d | _Y z
t |¡ || _W n   |d urY|| _ Y |d u rf|d u rftdƒ‚|  ¡  d S )Nz#Both IP and Hostname can't be none!)r/   r,   r-   r%   r.   r0   r1   r'   r4   r5   r3   r2   Ú	ipaddressÚ
ip_addressr+   Ú	ExceptionÚ_UniTarget__update_proxy)Úselfr+   r,   r-   r%   r.   r/   r0   r1   r2   r'   r3   r4   r5   r"   r"   r#   Ú__init__    s>   



€zUniTarget.__init__c                 C   s4   t | jƒdkr	d S |  ¡ | jd _| j| jd _d S )Nr   éÿÿÿÿ)Úlenr2   Úget_hostname_or_ipÚendpoint_ipr,   Úendpoint_port©r:   r"   r"   r#   Ú__update_proxyD   s   zUniTarget.__update_proxyÚurlÚhelptypec                 C   s   | dkrdS d S )NrC   a—  Connection related parameters -query params-:
	timeout - int - connection timeout in seconds
	dc - str - domain controller IP address (KERBEROS)
	serverip - str - server IP address (if different from what your DNS resolver would say)
	dns - str - DNS server IP address (not used)
	sslverify - bool - SSL/TLS verify server certificate
	sslcert - str - SSL/TLS certificate path
	sslkey - str - SSL/TLS key path
	sslpassword - str - SSL/TLS key password
	=== PROXY PARAMETERS ===
	Each proxy needs at least "proxytype", "proxyhost" and "proxyport" defined!
	Proxy parameters can be repeated to add multiple proxies, just change the prefix to "proxy1" "proxy2" ...
	proxytype - str - Available PROXY protocols: http, socks4, socks5

	proxyusername - str - proxy username
	proxypassword - str - proxy password
	proxytimeout - int - proxy connection timeout in seconds
	proxyhost - str - proxy server IP address
	proxyport - int - proxy port
	proxyssl - bool - proxy SSL/TLS
	proxysslverify - bool - proxy SSL/TLS verification
	proxysslcert - str - proxy SSL/TLS certificate path
	proxysslkey - str - proxy SSL/TLS key path
	proxysslkey_password - str - proxy SSL/TLS key password
r"   )rD   r"   r"   r#   Úget_helpJ   s   ÿzUniTarget.get_helpc                 C   sN   |d u r| j d u rtdƒ‚|d u r| j }t|dtj| jd |||t | j¡d�	S )Nz+DC IP must be provided for kerberos target!éX   )r%   r.   r/   r0   r1   r2   )	r0   r8   r)   r   r   r%   ÚcopyÚdeepcopyr2   )r:   r0   r/   r1   r"   r"   r#   Úget_kerberos_targete   s   
÷zUniTarget.get_kerberos_targetc                 C   s,   t ||| j| j| j|| j| jt | j¡d�	S )N)r.   r/   r0   r1   r2   )	r)   r-   r%   r.   r0   r1   rG   rH   r2   )r:   r+   r,   r/   r"   r"   r#   Úget_newtargetv   s   ,zUniTarget.get_newtargetc                 C   s@   | j d u r| jtjtjtjfv rdnd}t |¡| _ | j  |¡S )NTF)	r.   r-   r   r   r    r!   r   Úget_noverify_contextÚget_ssl_context)r:   r-   Ú	is_serverr"   r"   r#   rL   y   s   
zUniTarget.get_ssl_contextc                 C   s   | j S ©N)r/   rA   r"   r"   r#   Úget_hostname�   s   zUniTarget.get_hostnamec                 C   s0   zt t |¡ƒ| _W d S    || _|| _Y d S rN   )Ústrr6   r7   r+   r/   )r:   r+   r"   r"   r#   Úset_hostname_or_ip„   s
   zUniTarget.set_hostname_or_ipc                 C   ó   | j d ur| j S | jS rN   )r+   r/   rA   r"   r"   r#   Úget_ip_or_hostname‹   ó   
zUniTarget.get_ip_or_hostnamec                 C   rR   rN   )r/   r+   rA   r"   r"   r#   r>   �   rT   zUniTarget.get_hostname_or_ipc                 C   s$   | j dks
| j d u rd S | j | jfS )Nr*   )r4   r5   rA   r"   r"   r#   Úget_sockaddr•   s   zUniTarget.get_sockaddrc                 C   s   |   ¡ | jfS rN   )rS   r,   rA   r"   r"   r#   Úget_peeraddrš   s   zUniTarget.get_peeraddrÚextraparamsc                 C   s¸  t | ƒ}d }|jd ur'|j d¡dkr"|j d¡\}}|dkr!d }nd }|j}|j}|jd u r7|d u r7tdƒ‚|jrA|d u rA|j}t t	 
¡ d ¡}t | 
¡ d ¡}	d}
|jd ur‡t|jƒ}|D ]'}| d¡du rjd}
|t	v rxt	| || ƒ||< ||v r†|| || ƒ|	|< q_d }|d ur�zt |¡ W n   |}d }Y |d d ur§|d }d }|
du r´tj| |d	�}|d
 d ur¾|d
 nd}t | ¡}t|||||||d |||d |d d�|	fS )Nú\r<   Ú.zPort must be provided!FÚproxyTr&   )r@   r%   r   r$   r'   r(   )r%   r/   r.   r0   r1   r2   r'   r3   )r   ÚusernameÚfindÚsplitr/   r,   r8   ÚdictÚfromkeysÚunitarget_url_paramsÚkeysÚqueryr   Ú
startswithr6   r7   r
   Úfrom_urlr   r)   )Úconnection_urlr-   r,   rW   Úurl_er1   r[   r+   ÚparamsÚextraÚproxy_presentrb   Úkr/   r2   r%   Ússlctxr"   r"   r#   rd   �   sr   
€

€
õôzUniTarget.from_urlc                 C   s@   t | jƒdkr| jd }tj}t|j|j|| jd d… d�S | S )Nr   r<   )r-   r2   )r=   r2   r   r   r)   Ú	server_ipÚserver_port)r:   ÚlproxyÚlprotor"   r"   r#   Úget_preproxyÜ   s
   
zUniTarget.get_preproxyc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz==== UniTarget ====
z%s: %s
)Ú__dict__)r:   Útrj   r"   r"   r#   Ú__str__æ   s   
zUniTarget.__str__)
r   NNNNNNFr*   r   )rC   )NNNrN   )r   r   r   rP   Úintr   r   r   r
   Úboolr;   r9   ÚstaticmethodrE   rI   rJ   rL   rO   rQ   rS   r>   rU   rV   r   r   rd   rp   rs   r"   r"   r"   r#   r)      s$    D$


&>
r)   )Úosr   ÚsslrG   Úenumr6   Útypingr   r   r   Úurllib.parser   r   Úasysocks.unicomm.common.unisslr   Úasysocks.unicomm.common.proxyr	   r
   Ú%asysocks.unicomm.utils.paramprocessorr   r   r   ÚEnumr   r`   r)   r"   r"   r"   r#   Ú<module>   s$    û