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rt|j}|D ]'}|ddu rjd}
|t	v rxt	| || ||< ||v r|| || |	|< q_d }|d urzt| W n   |}d }Y |d d ur|d }d }|
du rt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$    