1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
U
Z±dnyã    @svddlmZzddlmZWn ek
r<ddlmZYnXddlmZmZm    Z    ddl
Z
ddl m Z ddl Z ddlZddlmZddlZddlZddlZdZejdkrÜejd    krÜz ddlZWnek
rÚed
ƒ‚YnXe  e¡Zd ZZd ZZd ZZeeedœZ e!e"e  #¡e  $¡ƒƒZ%ejZ&Z'dd„Z(Gdd„de)ƒZ*Gdd„de*ƒZ+Gdd„de*ƒZ,Gdd„de*ƒZ-Gdd„de*ƒZ.Gdd„de*ƒZ/Gdd„de*ƒZ0dd d!d"œZ1d#d$d%d&d'd(d)d*d+œZ2ed,ed,ed-iZ3d@d/d0„Z4d1d2„Z5d3d4„Z6e6Z7d5d6„Z8e8Z9dAd7d8„Z:Gd9d:„d:ejƒZ;d;d<„Z<d=D]:Ze=e;edƒZ>e?e>eƒs&e;j@ Ae¡eBe;ee<eƒƒq&Gd>d?„d?e;ƒZCdS)Bé)Ú    b64encode)ÚCallable)Ú
EOPNOTSUPPÚEINVALÚEAGAINN)ÚBytesIO)ÚSEEK_CURz1.7.1Únt)érz8To run PySocks on Windows you must install win_inet_ptonéér
)ÚSOCKS4ÚSOCKS5ÚHTTPcst ˆ¡‡fdd„ƒ}|S)Nc
sv|d}zTz*| ¡}|dkr&| d¡ˆ||ŽWW¢*Stk
rX}z‚W5d}~XYnXW5|dkrp| d¡XdS)NrFT)Ú setblockingÚ
gettimeoutÚ    Exception)ÚargsÚkwargsÚselfZ _is_blockingÚe©Úfunction©ú<d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\socks.pyÚwrapper(s
z"set_self_blocking.<locals>.wrapper)Ú    functoolsÚwraps)rrrrrÚset_self_blocking&s rc@s"eZdZdZddd„Zdd„ZdS)Ú
ProxyErrorz4Socket_err contains original socket.error exception.NcCs(||_||_|r$|jd |¡7_dS)Nz: {})ÚmsgÚ
socket_errÚformat)rr r!rrrÚ__init__;szProxyError.__init__cCs|jS©N)r ©rrrrÚ__str__BszProxyError.__str__)N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__r#r&rrrrr9s
rc@s eZdZdS)ÚGeneralProxyErrorN©r'r(r)rrrrr+Fsr+c@s eZdZdS)ÚProxyConnectionErrorNr,rrrrr-Jsr-c@s eZdZdS)ÚSOCKS5AuthErrorNr,rrrrr.Nsr.c@s eZdZdS)Ú SOCKS5ErrorNr,rrrrr/Rsr/c@s eZdZdS)Ú SOCKS4ErrorNr,rrrrr0Vsr0c@s eZdZdS)Ú    HTTPErrorNr,rrrrr1Zsr1zRequest 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 refusedz TTL expiredz(Command not supported, or protocol errorzAddress type not supported)r r r
éééééi8iTcCs.|||||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ÚpasswordrrrÚset_default_proxyssþrCcOs d|kr| d¡|d<t||ŽS©NZ    proxytyper=)ÚpoprC)rrrrrÚsetdefaultproxy~srFcCstjS)z4Returns the default proxy, set by set_default_proxy.)r;r<rrrrÚget_default_proxy„srGcCstjrt|j_ntdƒ‚dS)aAttempts 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+)ÚmodulerrrÚ wrap_module‹s
rJc
 Cs6|\}
} |
 d¡r|
 d¡}
|r4| d¡r4| d¡}d} t ||dtj¡D]Ò} | \}}}}}d}zzt|||ƒ}|    r†|    D]}|j|Žqvt|tt    fƒrž| 
|¡|r¶|  ||||||¡|rÄ|  |¡|  |
| f¡|WStjtfk
r}z|} |r
| ¡d}W5d}~XYqJXqJ| 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[]Nrzgai returned empty list.)Ú
startswithÚstriprHÚ getaddrinfoÚ SOCK_STREAMr;Ú
setsockoptÚ
isinstanceÚintÚfloatÚ
settimeoutÚ    set_proxyÚbindÚconnectÚerrorrÚclose)Ú    dest_pairÚtimeoutÚsource_addressr=Ú
proxy_addrÚ
proxy_portZ
proxy_rdnsZproxy_usernameZproxy_passwordÚsocket_optionsZ remote_hostZ remote_portÚerrÚrÚfamilyÚ socket_typeÚprotoÚ    canonnameÚsaÚsockÚoptrrrrÚcreate_connection™sB
 
 
 
 ÿ
 
ric@seZdZdZdd„ZeƒZdS)Ú _BaseSocketzBAllows Python 2 delegated methods such as send() to be overridden.cOsDtj|f|ž|Žtƒ|_|jD]}t||ƒ|j|<t||ƒq dSr$)Ú _orig_socketr#ÚdictÚ _savedmethodsÚ
_savenamesÚgetattrÚdelattr)rÚposÚkwÚnamerrrr#Øs
 
z_BaseSocket.__init__N)r'r(r)r*r#ÚlistrnrrrrrjÖsrjcs ‡fdd„S)Ncs|jˆ||ŽSr$)rm)rrqrr©rsrrÚ<lambda>äóz_makemethod.<locals>.<lambda>rrurrurÚ _makemethodãsrx)ÚsendtoÚsendÚrecvfromÚrecvcs<eZdZdZdZejejdf‡fdd„    Zdd„Z    ‡fdd    „Z
d
d „Z d d „Z d7dd„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;a2socksocket([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.
    Nrcsp|tjtjfkr"d}t| |¡ƒ‚tt|ƒj|||f|ž|Žd|_|j    rT|j    |_
nd|_
d|_ d|_ d|_ dS)Nz0Socket type must be stream or datagram, not {!r})NNNNNN)rHrOÚ
SOCK_DGRAMÚ
ValueErrorr"Úsuperr;r#Ú
_proxyconnr<ÚproxyÚproxy_socknameÚproxy_peernameÚ_timeout)rrbÚtyperdrrr ©Ú    __class__rrr#üs
zsocksocket.__init__cCs<d}t|ƒ|kr8| |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.rwúConnection closed unexpectedly)ÚlenÚreadr+)rÚfileÚcountÚdataÚdrrrÚ_readalls 
zsocksocket._readallcs@||_z| ¡}tt|ƒ |j¡Wntjk
r:YnXdSr$)r„Úget_proxy_peernamerr;rTrHrX)rr[Zpeerr†rrrTs zsocksocket.settimeoutcCs|jSr$)r„r%rrrr#szsocksocket.gettimeoutcCs|r| d¡n
| d¡dS)Ng)rT)rÚvrrrr&s zsocksocket.setblockingTcCs.|||||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:r)rr=r>r?r@rArBrrrrU,sþzsocksocket.set_proxycOs"d|kr| d¡|d<|j||ŽSrD)rErU)rrrrrrÚsetproxyAszsocksocket.setproxycsø|j\}}}}}}|r"|jtjkr4tj|f|ž|ŽS|jrFt td¡‚|t    kr^d}    t t
|    ¡‚t t |ƒj||Ž|  ¡\}
} d| f} tƒ|_| ¡} |j | ¡d}| |j|| ¡\}
}| \}}
|\}
} t t |ƒ || f¡t t |ƒ |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.0rN)rr…rHr}rkrVr€rXrrrrr;Ú getsocknameÚ _proxy_addrrWÚ_SOCKS5_requestrTr„r‚)rrqrrr=r]r^r@rArBr Ú_r?ÚdstrZ UDP_ASSOCIATEZrelayÚhostr†rrrVFs.ÿ     zsocksocket.bindc
s¢|jtjkr$tt|ƒj|f|ž|ŽS|js4| d¡|d}|dd…}tƒ}d}|     |¡d}|     |¡| 
||¡tt|ƒj |  ¡|f|ž|Ž}    |    |  ¡S)N©Úréÿÿÿÿsó)r…rHr}rr;ryr€rVrÚwriteÚ_write_SOCKS5_addressrzÚgetvalueÚtell)
rÚbytesrrÚaddressÚflagsÚheaderZRSVZ
STANDALONEÚsentr†rrryks  
 
 
 ÿzsocksocket.sendtoc s:|jtjkr |j|||jf|ŽStt|ƒj||f|ŽSdSr$)r…rHr}ryrƒrr;rz)rr¤r¦rr†rrrzs zsocksocket.sendc    s¾|jtjkrtt|ƒ ||¡S|js.| d¡ttt|ƒ     |d|¡ƒ}| 
dt ¡|  d¡}t |ƒrntdƒ‚| |¡\}}|jr¬|j\}}||ks |d|fkr¬t td¡‚|  |¡||ffS)Nrœir r zReceived UDP packet fragmentrzPacket filtered)r…rHr}rr;r{r€rVrr|ÚseekrrŠÚordÚNotImplementedErrorÚ_read_SOCKS5_addressrƒrXr)    rÚbufsizer¦ÚbufÚfragZfromhostZfromportZpeerhostZpeerportr†rrr{…s 
 
 
 zsocksocket.recvfromcOs|j||Ž\}}|Sr$)r{)rrqrrr¤r™rrrr|™szsocksocket.recvcs|jr|j ¡tt|ƒ ¡Sr$)r€rYrr;r%r†rrrYs
zsocksocket.closecCs|jS)z:Returns the bound IP address and port number at the proxy.)r‚r%rrrÚget_proxy_sockname¢szsocksocket.get_proxy_socknamecCs| ¡S)z>
        Returns the IP and port number of the proxy.
        )Ú getpeernamer%rrrr¨szsocksocket.get_proxy_peernamecCs|jS)zwReturns the IP address and port number of the destination machine.
 
        Note: get_proxy_peername returns the proxy.)rƒr%rrrÚ get_peername°szsocksocket.get_peernamecGsd}| |||¡\|_|_dS)z7Negotiates a stream connection through a SOCKS5 server.óN)r˜rƒr‚)rÚ    dest_addrZCONNECTrrrÚ_negotiate_SOCKS5¸s ÿzsocksocket._negotiate_SOCKS5cs|j\}}}}}}    | d¡}
| dd¡} zÆ|r@|    r@|
 d¡n
|
 d¡|
 ¡| | d¡} | dd…dkrvtd    ƒ‚| dd…d
kr|r|    s˜td ƒ‚|
 d tt    |ƒƒ 
¡|tt    |    ƒƒ 
¡|    ¡|
 ¡| | d¡} | dd…d krö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|  ¡|
 ¡XdS)z‘
        Send SOCKS5 request with given command (CMD field) and
        address (DST field). Returns resolved DST address that was used.
        ÚwbÚrbrssr 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)rÚmakefilerYr Úflushrr+r.Úchrr‰r:r¡rªÚ SOCKS5_ERRORSÚgetr/r"r¬rr;rTr„)rÚconnÚcmdršr=r>r?r@rArBÚwriterÚreaderZ chosen_authZ auth_statusZresolvedÚrespÚstatusrXZbndr†rrr˜¾sp
 
 ÿÿþý ÿ
ÿÿ  ÿ
 
 zsocksocket._SOCKS5_requestc    CsL|\}}|j\}}}}}}    tjdtjdi}
tjtjfD]j} zJt | |¡} | |
| | ¡t | | ¡}| t d|¡¡||fWStj    k
ržYq6Yq6Xq6|rÐ| 
d¡} | dt t | ƒƒ 
¡| ¡nbt  ||tjtjtjtj¡}|d}|d} |dd}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”rr5)rrHÚAF_INETÚAF_INET6Ú    inet_ptonr Ú    inet_ntopÚstructÚpackrXr:rÀr‰rNÚ    AF_UNSPECrOÚ IPPROTO_TCPÚ AI_ADDRCONFIG)rr>r‹r›r?r=r™r@rArBZfamily_to_byterbÚ
addr_bytesZ
host_bytesÚ    addressesZ target_addrrrrr¡ s8   
  ý   z socksocket._write_SOCKS5_addresscCs–| |d¡}|dkr(t | |d¡¡}nN|dkrN| |d¡}| |t|ƒ¡}n(|dkrnt tj| |d¡¡}ntdƒ‚t d| |d    ¡¡d
}||fS) Nr r³r5r”rÉér¹rÊr r)    rrHÚ    inet_ntoarªrÏrÍr+rÐÚunpack)rr‹Zatypr>Úlengthr?rrrr¬Ms  zsocksocket._read_SOCKS5_addresscCsŽ|j\}}}}}}| d¡}    | dd¡}
zLd} zt |¡} Wn4tjk
rr|r^d} d} nt t |¡¡} YnX|     t     ddd    |¡¡|     | ¡|r¢|     |¡|     d
¡| rÄ|     | 
d ¡d
¡|      ¡|  |
d ¡} | dd    …d
krðt d ƒ‚t| d    d…ƒ}|dkr&t |d¡}td ||¡ƒ‚t | dd…¡t d| dd…¡df|_| rjt | ¡|f|_n
||f|_W5|
 ¡|     ¡XdS)z0Negotiates a connection through a SOCKS4 server.r¶r·rFsTz>BBHr5r rŸrËr9z%SOCKS4 proxy server sent invalid datar éZr¼r½NrÊ)rr¾rYrHÚ    inet_atonrXÚ gethostbynamer rÐrÑr:r¿rr+rªÚ SOCKS4_ERRORSrÂr0r"rØrÙr‚rƒ)rr´Ú    dest_portr=r>r?r@rArBrÅrÆZremote_resolverÕrÇrÈrXrrrÚ_negotiate_SOCKS4\sN
 ÿ
 
 
 
 ÿ
 ÿzsocksocket._negotiate_SOCKS4cCsj|j\}}}}}}|r|nt |¡}d| d¡dt|ƒ ¡dd| d¡g}    |rv|rv|     dt|d|ƒ¡|     d¡| d |    ¡¡|     ¡}
|
 
¡} |
  ¡| s´t dƒ‚z|   d    d
¡\} } }Wntk
ræt d ƒ‚YnX|  d ¡sút d ƒ‚z t| ƒ} Wntk
r$tdƒ‚YnX| dkrVd | |¡}| dkrN|d7}t|ƒ‚d|_||f|_dS)zwNegotiates a connection through an HTTP server.
 
        NOTE: This currently only supports HTTP CONNECT-style proxies.sCONNECT rËó:s     HTTP/1.1sHost: sProxy-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))s0.0.0.0rN)rrHrÝr:ÚstrÚappendrÚsendallÚjoinr¾ÚreadlinerYr+Úsplitr~rLrRr1r"r‚rƒ)rr´rßr=r>r?r@rArBZ http_headersZfobjZ status_linerdÚ status_codeZ
status_msgrXrrrÚ_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¡|dkr
||_
tt|ƒ |j¡tt|ƒ ||f¡dS| ¡}ztt|ƒ |¡Wnztjk
r } zX| ¡|sŒ|\}}d     ||¡} t|} d
 | | ¡}t d || ¡t|| ƒ‚n| ‚W5d} ~ XYn€Xz|j|}||||ƒWnbtjk
r} z"|sì| ¡td | ƒ‚n| ‚W5d} ~ XYn tk
r| ¡‚YnXdS) 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 rrKz PySocks doesn't support IPv6: %srœr•Nz0Invalid destination-connection (host, port) pairz{}:{}zError connecting to {} proxy {}z %s due to: %sz Socket error)r‰rLrHrXrär…r}r€rVrÝrƒrrQrtÚtuplerRr+rr;rTr„rWr—rYr"ÚPRINTABLE_PROXY_TYPESÚlogÚdebugr-Ú_proxy_negotiatorsr)rrZÚ catch_errorsr´rßr=r]r^r@rArBrXZ proxy_serverZprintable_typer Z    negotiater†rrrWÙst    ÿ 
 
 
ÿ 
ÿþýÿ
 ÿ 
 zsocksocket.connectc
CsRz|j|ddWdStk
rL}z|jr:|jWY¢S‚W5d}~XYnXdS)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ñrN)rWÚOSErrorÚerrno)rrZrrrrÚ
connect_ex6szsocksocket.connect_excCs4|j\}}}}}}|pt |¡}|s,tdƒ‚||fS)zD
        Return proxy address to connect to as tuple object
        zInvalid proxy type)rÚ DEFAULT_PORTSrÂr+)rr=r]r^r@rArBrrrr—Fsÿ zsocksocket._proxy_addr)NNNTNN)r)r)N)*r'r(r)r*r<rHrÌrOr#rrTrrrUr’rVryrzr{r|rYr°ZgetproxysocknamerZgetproxypeernamer²r±rµr˜r¡r¬ràrër rrrðrrWrôr—Ú __classcell__rrr†rr;ñsXÿ     ÿ
 %   b-<<ý\
r;)NNNTNN)    NNNNNTNNN)DÚbase64rÚcollections.abcrÚ ImportErrorÚ collectionsrórrrrÚiorÚloggingÚosrrHrÐÚsysÚ __version__rsÚ version_infoZ win_inet_ptonÚ    getLoggerr'rîZPROXY_TYPE_SOCKS4r ZPROXY_TYPE_SOCKS5rZPROXY_TYPE_HTTPrZ PROXY_TYPESrlÚzipÚvaluesÚkeysríZ
_orgsocketrkrÚIOErrorrr+r-r.r/r0r1rÞrÁrõrCrFrGZgetdefaultproxyrJZ
wrapmodulerirjrxroÚmethodrQrnråÚsetattrr;rrrrÚ<module>sš    ÿ
 
 
 ü    ø ÿ
 û
=