관리-도구
편집 파일: socks.cpython-39.pyc
a ����G2�]ny������������������� ���@���sr��d�dl�mZ�zd�dlmZ�W�n�ey:���d�dlmZ�Y�n0�d�dlmZmZm Z �d�dl Z d�dlmZ�d�dl Z d�dlZd�dlmZ�d�dlZd�dlZd�dlZdZejdkr�ejd k�r�zd�dlZW�n�ey����ed ��Y�n0�e �e�Zd�ZZd�ZZd �ZZeeed�Z e!e"e �#��e �$����Z%ej�Z&Z'dd��Z(G�dd��de)�Z*G�dd��de*�Z+G�dd��de*�Z,G�dd��de*�Z-G�dd��de*�Z.G�dd��de*�Z/G�dd��de*�Z0dd d!d"�Z1d#d$d%d&d'd(d)d*d+�Z2ed,ed,ed-iZ3d@d/d0�Z4d1d2��Z5d3d4��Z6e6Z7d5d6��Z8e8Z9dAd7d8�Z:G�d9d:��d:ej�Z;d;d<��Z<d=D�]:Ze=e;ed�Z>e?e>e��s"e;j@�Ae��eBe;ee<e����q"G�d>d?��d?e;�ZCdS�)B�����)� b64encode)�Callable)� EOPNOTSUPP�EINVAL�EAGAINN)�BytesIO)�SEEK_CURz1.7.1�nt)����r���z8To run PySocks on Windows you must install win_inet_pton��������r ���)�SOCKS4�SOCKS5�HTTPc��������������������s���t�������fdd��}|S�)Nc��������������� ������s����|�d�}z|z>|����}|dkr&|�d����|�i�|��W�W�|dkrH|�d��S��tyn�}�z��W�Y�d�}~n d�}~0�0�W�|dkr�|�d��n|dkr�|�d��0�d�S�)Nr���TF)� gettimeout�setblocking� Exception)�args�kwargs�selfZ_is_blocking�e��function���)/usr/lib/python3.9/site-packages/socks.py�wrapper(���s���� ��z"set_self_blocking.<locals>.wrapper)� functools�wraps)r���r���r���r���r����set_self_blocking&���s���� r���c�������������������@���s"���e�Zd�ZdZddd�Zdd��ZdS�)� ProxyErrorz4Socket_err contains original socket.error exception.Nc�����������������C���s(���||�_�||�_|r$|��j�d�|�7��_�d�S�)Nz: {})�msg� socket_err�format)r���r ���r!���r���r���r����__init__;���s����zProxyError.__init__c�����������������C���s���|�j�S��N)r ����r���r���r���r����__str__B���s����zProxyError.__str__)N)�__name__� __module__�__qualname__�__doc__r#���r&���r���r���r���r���r���9���s��� r���c�������������������@���s���e�Zd�ZdS�)�GeneralProxyErrorN�r'���r(���r)���r���r���r���r���r+���F���s���r+���c�������������������@���s���e�Zd�ZdS�)�ProxyConnectionErrorNr,���r���r���r���r���r-���J���s���r-���c�������������������@���s���e�Zd�ZdS�)�SOCKS5AuthErrorNr,���r���r���r���r���r.���N���s���r.���c�������������������@���s���e�Zd�ZdS�)�SOCKS5ErrorNr,���r���r���r���r���r/���R���s���r/���c�������������������@���s���e�Zd�ZdS�)�SOCKS4ErrorNr,���r���r���r���r���r0���V���s���r0���c�������������������@���s���e�Zd�ZdS�)� HTTPErrorNr,���r���r���r���r���r1���Z���s���r1���zRequest rejected or failedzLRequest rejected because SOCKS server cannot connect to identd on the clientzPRequest rejected because the client program and identd report different user-ids)�[����\����]���zGeneral SOCKS server failurez!Connection not allowed by rulesetzNetwork unreachablezHost unreachablezConnection refusedzTTL expiredz(Command not supported, or protocol errorzAddress type not supported)r���r���r �����������������������i8��i���Tc�����������������C���s.���|�||||r|����nd|r"|����ndft_dS�)z�Sets a default proxy. All further socksocket objects will use the default unless explicitly changed. All parameters are as for socket.set_proxy().N)�encode� socksocket� default_proxy)� proxy_type�addr�port�rdns�username�passwordr���r���r����set_default_proxys���s�����rC���c������������������O���s$���d|v�r|��d�|d<�t|�i�|��S��NZ proxytyper=���)�poprC���)r���r���r���r���r����setdefaultproxy~���s����rF���c�������������������C���s���t�jS�)z4Returns the default proxy, set by set_default_proxy.)r;���r<���r���r���r���r����get_default_proxy����s����rG���c�����������������C���s���t�jrt�|�j_ntd��dS�)a��Attempts to replace a module's socket library with a SOCKS socket. Must set a default proxy using set_default_proxy(...) first. This will only work on modules that import socket directly into the namespace; most of the Python Standard Library falls into this category.zNo default proxy specifiedN)r;���r<����socketr+���)�moduler���r���r����wrap_module����s���� rJ���c �����������������C���s8��|�\} }| ��d�r| �d�} |r4|��d�r4|�d�}d}t�||dtj�D�]�} | \}}}}}d}zzt|||�}| r�| D�]}|j|���qvt|tt f�r�|� |��|r�|�||||||��|r�|�|��|� | |f��|W���S��tjtf�y�}�z"|}|�r|����d}W�Y�d}~qJd}~0�0�qJ|�r*|�t�d��dS�)a���create_connection(dest_pair, *[, timeout], **proxy_args) -> socket object Like socket.create_connection(), but connects to proxy before returning the socket object. dest_pair - 2-tuple of (IP/hostname, port). **proxy_args - Same args passed to socksocket.set_proxy() if present. timeout - Optional socket timeout value, in seconds. source_address - tuple (host, port) for the socket to bind to as its source address before connecting (only for compatibility) �[z[]Nr���zgai returned empty list.)� startswith�striprH����getaddrinfo�SOCK_STREAMr;���Z setsockopt� isinstance�int�float� settimeout� set_proxy�bind�connect�errorr����close)� dest_pair�timeoutZsource_addressr=���� proxy_addr� proxy_portZ proxy_rdnsZproxy_usernameZproxy_passwordZsocket_optionsZremote_hostZremote_port�err�r�familyZsocket_type�protoZ canonnameZsaZsock�optr���r���r���r����create_connection����s@���� � rb���c�������������������@���s���e�Zd�ZdZdd��Ze��ZdS�)�_BaseSocketzBAllows Python 2 delegated methods such as send() to be overridden.c�����������������O���sJ���t�j|�g|�R�i�|���t��|�_|�jD�]}t|�|�|�j|<�t|�|��q&d�S�r$���)�_orig_socketr#����dict� _savedmethods� _savenames�getattr�delattr)r����pos�kw�namer���r���r���r#�������s ���� z_BaseSocket.__init__N)r'���r(���r)���r*���r#����listrg���r���r���r���r���rc�������s���rc���c��������������������s�����fdd�S�)Nc��������������������s���|�j����|i�|��S�r$���)rf���)r���rj���rk����rl���r���r����<lambda>���������z_makemethod.<locals>.<lambda>r���rn���r���rn���r����_makemethod����s����rq���)�sendto�send�recvfrom�recvc�����������������������s<��e�Zd�ZdZdZejejdf��fdd� Zdd��Z ��fdd �Z d d��Zdd ��Zd7dd�Z dd��Z��fdd�Z��fdd�Zd8��fdd� Zd9��fdd� Zdd��Z��fdd�Zdd ��ZeZd!d"��ZeZd#d$��ZeZd%d&��Z��fd'd(�Zd)d*��Zd+d,��Zd-d.��Zd/d0��Z e!ee"ee#e iZ$e%d:��fd1d2� �Z&e%d3d4���Z'd5d6��Z(���Z)S�);r;���a2��socksocket([family[, type[, proto]]]) -> socket object Open a SOCKS enabled socket. The parameters are the same as those of the standard socket init. In order for SOCKS to work, you must specify family=AF_INET and proto=0. The "type" argument must be either SOCK_STREAM or SOCK_DGRAM. Nr���c��������������������sv���|t�jt�jfvr"d}t|�|���tt|��j|||g|�R�i�|���d�|�_|�j rZ|�j |�_ nd|�_ d�|�_d�|�_d�|�_ d�S�)Nz0Socket type must be stream or datagram, not {!r})NNNNNN)rH���rO���� SOCK_DGRAM� ValueErrorr"����superr;���r#���� _proxyconnr<����proxy�proxy_sockname�proxy_peername�_timeout)r���r_����typer`���r���r���r ����� __class__r���r���r#�������s����" zsocksocket.__init__c�����������������C���s<���d}t�|�|k�r8|�|t�|���}|s.td��||7�}q|S�)z�Receive EXACTLY the number of bytes requested from the file object. Blocks until the required number of bytes have been received.rp����Connection closed unexpectedly)�len�readr+���)r����file�count�data�dr���r���r����_readall��s���� zsocksocket._readallc��������������������s>���||�_�z|����}tt|���|�j���W�n�tjy8���Y�n0�d�S�r$���)r}����get_proxy_peernamerx���r;���rS���rH���rW���)r���rZ���Zpeerr���r���r���rS�����s����zsocksocket.settimeoutc�����������������C���s���|�j�S�r$���)r}���r%���r���r���r���r���#��s����zsocksocket.gettimeoutc�����������������C���s���|r|���d���n |���d��d�S�)Ng��������)rS���)r����vr���r���r���r���&��s����zsocksocket.setblockingTc�����������������C���s.���|||||r|����nd|r"|����ndf|�_dS�)a��� Sets the proxy to be used. proxy_type - The type of the proxy to be used. Three types are supported: PROXY_TYPE_SOCKS4 (including socks4a), PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP addr - The address of the server (IP or DNS). port - The port of the server. Defaults to 1080 for SOCKS servers and 8080 for HTTP proxy servers. rdns - Should DNS queries be performed on the remote side (rather than the local side). The default is True. Note: This has no effect with SOCKS4 servers. username - Username to authenticate with to the server. The default is no authentication. password - Password to authenticate with to the server. Only relevant when username is also provided.N)r:���rz���)r���r=���r>���r?���r@���rA���rB���r���r���r���rT���,��s�����zsocksocket.set_proxyc�����������������O���s&���d|v�r|��d�|d<�|�j|i�|��S�rD���)rE���rT���)r���r���r���r���r���r����setproxyA��s����zsocksocket.setproxyc��������������������s��|�j�\}}}}}}|r"|�jtjkr:tj|�g|�R�i�|��S�|�jrLt�td��|t krdd} t�t | ��tt|��j|i�|���|�� ��\} }d|f}t��|�_|����} |�j�| ��d}|��|�j||�\} }| \}} |\} }tt|���||f��tt|���|�j��d|�_dS�)zVImplements proxy connection for UDP sockets. Happens during the bind() phase.z"Socket already bound to an addressz'UDP only supported by SOCKS5 proxy type�0����)�0.0.0.0r���N)rz���r~���rH���rv���rd���rU���ry���rW���r���r���r���rx���r;���Zgetsockname�_proxy_addrrV����_SOCKS5_requestrS���r}���r{���)r���rj���rk���r=���r[���r\���r@���rA���rB���r ����_r?����dstrz���Z UDP_ASSOCIATEZrelay�hostr���r���r���rU���F��s.�����zsocksocket.bindc����������� ���������s����|�j�tjkr*tt|��j|g|�R�i�|��S�|�js:|��d��|d�}|d�d��}t��}d}|� |��d}|� |��|�� ||��tt|��j|���|�g|�R�i�|��} | |� ���S�)N���r������s����������)r~���rH���rv���rx���r;���rr���ry���rU���r����write�_write_SOCKS5_addressrs����getvalue�tell) r����bytesr���r���Zaddress�flags�headerZRSVZ STANDALONE�sentr���r���r���rr���k��s ���� �zsocksocket.sendtoc��������������������sB���|�j�tjkr$|�j|||�jfi�|��S�tt|��j||fi�|��S�d�S�r$���)r~���rH���rv���rr���r|���rx���r;���rs���)r���r����r����r���r���r���r���rs�����s����zsocksocket.sendc����������� ���������s����|�j�tjkrtt|���||�S�|�js.|��d��ttt|��� |d�|��}|� dt��|�d�}t |�rntd��|��|�\}}|�jr�|�j\}}||ks�|d|fvr�t�td��|�|�||ffS�)Nr����i���r���r���zReceived UDP packet fragmentr���zPacket filtered)r~���rH���rv���rx���r;���rt���ry���rU���r���ru����seekr���r�����ord�NotImplementedError�_read_SOCKS5_addressr|���rW���r���) r����bufsizer�����buf�fragZfromhostZfromportZpeerhostZpeerportr���r���r���rt������s���� zsocksocket.recvfromc�����������������O���s���|�j�|i�|��\}}|S�r$���)rt���)r���rj���rk���r����r����r���r���r���ru������s����zsocksocket.recvc��������������������s���|�j�r|�j�����tt|�����S�r$���)ry���rX���rx���r;���r%���r���r���r���rX������s���� zsocksocket.closec�����������������C���s���|�j�S�)z:Returns the bound IP address and port number at the proxy.)r{���r%���r���r���r����get_proxy_sockname���s����zsocksocket.get_proxy_socknamec�����������������C���s���|�����S�)z> Returns the IP and port number of the proxy. )�getpeernamer%���r���r���r���r�������s����zsocksocket.get_proxy_peernamec�����������������C���s���|�j�S�)zwReturns the IP address and port number of the destination machine. Note: get_proxy_peername returns the proxy.)r|���r%���r���r���r����get_peername���s����zsocksocket.get_peernamec�����������������G���s���d}|���|�||�\|�_|�_dS�)z7Negotiates a stream connection through a SOCKS5 server.����N)r����r|���r{���)r���� dest_addrZCONNECTr���r���r����_negotiate_SOCKS5���s�����zsocksocket._negotiate_SOCKS5c��������������������s��|�j�\}}}}}} |�d�} |�dd�}�z�|r@| r@| �d��n | �d��| ����|��|d�}|dd��dkrvtd ��|dd��d k�r|r�| s�td��| �dtt|��� ���|�tt| ��� ���| ���| ����|��|d�} | dd��dkr�td ��| dd��d k�rHtd��n6|dd��d k�rH|dd��dk�r@td��ntd ��| �d|�d ���|�� || �}| ����|��|d�}|dd��dk�r�td ��t|dd���}|dk�r�t� |d�}td�||���|��|�}tt|���|�j��||fW�|����| ����S�|����| ����0�dS�)z� Send SOCKS5 request with given command (CMD field) and address (DST field). Returns resolved DST address that was used. �wb�rbr���s����s����r���r��������%SOCKS5 proxy server sent invalid data����zPNo username/password supplied. Server requested username/password authenticationr����r����zSOCKS5 authentication failed�����z7All offered SOCKS5 authentication methods were rejectedr ���� Unknown error�{:#04x}: {}N)rz����makefiler�����flushr����r+���r.����chrr����r:���r����r����� SOCKS5_ERRORS�getr/���r"���r����rx���r;���rS���r}���rX���)r���Zconn�cmdr����r=���r>���r?���r@���rA���rB����writer�readerZchosen_authZauth_statusZresolved�resp�statusrW���Zbndr���r���r���r�������sz���� ����� ��� ����zsocksocket._SOCKS5_requestc�������������� ���C���sJ��|\}}|�j�\}}}}}} tjdtjdi} tjtjfD�]h}zJt�||�}|�| |�|���t�||�}|�t�d|���||fW���S��tj y����Y�q6Y�q60�q6|r�|� d�} |�dtt| ��� ���| ���nbt� ||tjtjtjtj�}|d�}|d�}|d�d�}t�||�}|�| |�|���t�||�}|�t�d|���||fS�)z~ Return the host and port packed for the SOCKS5 protocol, and the resolved address as a tuple object. r���������>H�idnar����r���r5���)rz���rH����AF_INET�AF_INET6Z inet_ptonr����� inet_ntop�struct�packrW���r:���r����r����rN���Z AF_UNSPECrO���ZIPPROTO_TCPZ AI_ADDRCONFIG)r���r>���r����r����r?���r=���r����r@���rA���rB���Zfamily_to_byter_���� addr_bytesZ host_bytesZ addressesZtarget_addrr���r���r���r���� ��s8���� �z socksocket._write_SOCKS5_addressc�����������������C���s����|���|d�}|dkr(t�|���|d��}nN|dkrN|���|d�}|���|t|��}n(|dkrnt�tj|���|d��}ntd��t�d|���|d ��d �}||fS�)Nr���r����r5���r����r��������r����r����r���r���) r����rH���� inet_ntoar����r����r����r+���r�����unpack)r���r����Zatypr>����lengthr?���r���r���r���r����M��s����zsocksocket._read_SOCKS5_addressc�����������������C���s���|�j�\}}}}}}|��d�} |��dd�} �zZd}zt�|�}W�n2�tjyp���|r\d}d}nt�t�|��}Y�n0�| �t�ddd |���| �|��|r�| �|��| �d ��|r�| �|� d�d ���| � ���|��| d�} | dd ��d kr�td ��t | d d���}|dk�r$t�|d�}td�||���t�| dd���t�d| dd���d�f|�_|�rht�|�|f|�_n ||f|�_W�| ����| ����n| ����| ����0�dS�)z0Negotiates a connection through a SOCKS4 server.r����r����r���Fs������Tz>BBHr5���r���r����r����r9���z%SOCKS4 proxy server sent invalid datar����Z���r����r����Nr����)rz���r����rH���Z inet_atonrW���� gethostbynamer����r����r����r:���r����r����r+���r����� SOCKS4_ERRORSr����r0���r"���r����r����r{���r|���rX���)r���r����� dest_portr=���r>���r?���r@���rA���rB���r����r����Zremote_resolver����r����r����rW���r���r���r����_negotiate_SOCKS4\��sR���� � � � �zsocksocket._negotiate_SOCKS4c�����������������C���sf��|�j�\}}}}}}|r|nt�|�}d|�d��d�t|�����d�d|�d��g} |rv|rv| �dt|d�|�����| �d��|��d�| ���|�� ��} | � ��}| ����|s�td��z|� d d �\}} }W�n�ty����td��Y�n0�|�d�s�td ��zt| �} W�n�t�y ���td��Y�n0�| dk�rRd�| |�}| dv��rJ|d7�}t|��d|�_||f|�_dS�)zwNegotiates a connection through an HTTP server. NOTE: This currently only supports HTTP CONNECT-style proxies.s���CONNECT r��������:s ��� HTTP/1.1s���Host: s���Proxy-Authorization: basic s��� r����� r���z'HTTP proxy server sent invalid responsezHTTP/z0Proxy server does not appear to be an HTTP proxyz4HTTP proxy server did not return a valid HTTP status�����z{}: {})i���i���i���za [*] Note: The HTTP proxy server may not be supported by PySocks (must be a CONNECT tunnel proxy))s���0.0.0.0r���N)rz���rH���r����r:����str�appendr���Zsendall�joinr�����readlinerX���r+����splitrw���rL���rQ���r1���r"���r{���r|���)r���r����r����r=���r>���r?���r@���rA���rB���Zhttp_headersZfobjZstatus_liner`���Zstatus_codeZ status_msgrW���r���r���r����_negotiate_HTTP���sR���� ���� �� zsocksocket._negotiate_HTTPc�������������� ������s&��t�|�dks|d��d�r,t�dt|����|\}}|�jtjkr||�jsP|��d��t� |�}|dkrn|snd|�_ n ||f|�_ dS�|�j\}}}}} } t|t tf�r�t�|�dks�|r�t|t�s�td��tt|���|�j��|du��r ||�_ tt|���|�j��tt|���||f��dS�|����}ztt|���|��W�n|�tj�y��}�z`|�����|�s�|\}}d �||�}t|�} d �| |�}t�d||��t||��n|�W�Y�d}~n�d}~0�0�z|�j|�}||�||��W�nb�tj�y�}�z*|�s�|�����td|��n|�W�Y�d}~n&d}~0��t�y ���|�������Y�n0�dS�) z� Connects to the specified destination through a proxy. Uses the same API as socket's connect(). To select the proxy server, use set_proxy(). dest_pair - 2-tuple of (IP/hostname, port). r���r���rK���z PySocks doesn't support IPv6: %sr����r����Nz0Invalid destination-connection (host, port) pairz{}:{}zError connecting to {} proxy {}z %s due to: %szSocket error)r����rL���rH���rW���r����r~���rv���ry���rU���r����r|���rz���rP���rm����tuplerQ���r+���rx���r;���rS���r}���rV���r����rX���r"����PRINTABLE_PROXY_TYPES�log�debugr-����_proxy_negotiatorsr���)r���rY����catch_errorsr����r����r=���r[���r\���r@���rA���rB���rW���Zproxy_serverZprintable_typer ���Z negotiater���r���r���rV������st���� � � ���� � zsocksocket.connectc�������������� ���C���sX���z|�j�|dd��W�dS��tyR�}�z&|jr<|jW��Y�d}~S���W�Y�d}~n d}~0�0�dS�)a&�� https://docs.python.org/3/library/socket.html#socket.socket.connect_ex Like connect(address), but return an error indicator instead of raising an exception for errors returned by the C-level connect() call (other problems, such as "host not found" can still raise exceptions). T)r����r���N)rV����OSError�errno)r���rY���r���r���r���r���� connect_ex6��s����zsocksocket.connect_exc�����������������C���s4���|�j�\}}}}}}|pt�|�}|s,td��||fS�)zD Return proxy address to connect to as tuple object zInvalid proxy type)rz���� DEFAULT_PORTSr����r+���)r���r=���r[���r\���r@���rA���rB���r���r���r���r����F��s�����zsocksocket._proxy_addr)NNNTNN)r���)r���)N)*r'���r(���r)���r*���r<���rH���r����rO���r#���r����rS���r���r���rT���r����rU���rr���rs���rt���ru���rX���r����Zgetproxysocknamer����Zgetproxypeernamer����r����r����r����r����r����r����r����r ���r���r���r����r���rV���r����r����� __classcell__r���r���r���r���r;�������sP���� ��� %b-<<�\ r;���)NNNTNN) NNNNNTNNN)D�base64r����collections.abcr����ImportError�collectionsr����r���r���r���r����ior���Zlogging�osr���rH���r�����sys�__version__rl����version_infoZ win_inet_ptonZ getLoggerr'���r����ZPROXY_TYPE_SOCKS4r ���ZPROXY_TYPE_SOCKS5r���ZPROXY_TYPE_HTTPr���ZPROXY_TYPESre����zip�values�keysr����Z _orgsocketrd���r����IOErrorr���r+���r-���r.���r/���r0���r1���r����r����r����rC���rF���rG���ZgetdefaultproxyrJ���Z wrapmodulerb���rc���rq���rh����methodrP���rg���r�����setattrr;���r���r���r���r����<module>���s����� � ���� ������ =