Browse Source

Update PySocks 1.7.0 (91dcdf0) → 1.7.1 (c2fa43c).

pull/1289/head
JackDandy 5 years ago
parent
commit
6a51df75c1
  1. 1
      CHANGES.md
  2. 4
      lib/socks/socks.py
  3. 54
      lib/socks/sockshandler.py

1
CHANGES.md

@ -8,6 +8,7 @@
* Update attr 19.2.0.dev0 (daf2bc8) to 20.1.0.dev0 (9b5e988) * Update attr 19.2.0.dev0 (daf2bc8) to 20.1.0.dev0 (9b5e988)
* Update Certifi 2019.06.16 (84dc766) to 2019.11.28 (21abb9b) * Update Certifi 2019.06.16 (84dc766) to 2019.11.28 (21abb9b)
* Update DiskCache library 4.0.0 (2c79bb9) to 4.1.0 (b0451e0) * Update DiskCache library 4.0.0 (2c79bb9) to 4.1.0 (b0451e0)
* Update PySocks 1.7.0 (91dcdf0) to 1.7.1 (c2fa43c)
* Update Requests library 2.22.0 (3d968ff) to 2.22.0 (d2f65af) * Update Requests library 2.22.0 (3d968ff) to 2.22.0 (d2f65af)
* Update Six compatibility library 1.13.0 (ec58185) to 1.14.0 (3a3db75) * Update Six compatibility library 1.13.0 (ec58185) to 1.14.0 (3a3db75)

4
lib/socks/socks.py

@ -13,7 +13,7 @@ import socket
import struct import struct
import sys import sys
__version__ = "1.7.0" __version__ = "1.7.1"
if os.name == "nt" and sys.version_info < (3, 0): if os.name == "nt" and sys.version_info < (3, 0):
@ -199,7 +199,7 @@ def create_connection(dest_pair,
sock.connect((remote_host, remote_port)) sock.connect((remote_host, remote_port))
return sock return sock
except (socket.error, ProxyConnectionError) as e: except (socket.error, ProxyError) as e:
err = e err = e
if sock: if sock:
sock.close() sock.close()

54
lib/socks/sockshandler.py

@ -7,6 +7,7 @@ author: e<e@tr0ll.in>
This module provides a Handler which you can use with urllib2 to allow it to tunnel your connection through a socks.sockssocket socket, with out monkey patching the original socket... This module provides a Handler which you can use with urllib2 to allow it to tunnel your connection through a socks.sockssocket socket, with out monkey patching the original socket...
""" """
import socket
import ssl import ssl
try: try:
@ -23,17 +24,45 @@ def merge_dict(a, b):
d.update(b) d.update(b)
return d return d
def is_ip(s):
try:
if ':' in s:
socket.inet_pton(socket.AF_INET6, s)
elif '.' in s:
socket.inet_aton(s)
else:
return False
except:
return False
else:
return True
socks4_no_rdns = set()
class SocksiPyConnection(httplib.HTTPConnection): class SocksiPyConnection(httplib.HTTPConnection):
def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs): def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs):
self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password) self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password)
httplib.HTTPConnection.__init__(self, *args, **kwargs) httplib.HTTPConnection.__init__(self, *args, **kwargs)
def connect(self): def connect(self):
self.sock = socks.socksocket() (proxytype, proxyaddr, proxyport, rdns, username, password) = self.proxyargs
self.sock.setproxy(*self.proxyargs) rdns = rdns and proxyaddr not in socks4_no_rdns
if type(self.timeout) in (int, float): while True:
self.sock.settimeout(self.timeout) try:
self.sock.connect((self.host, self.port)) sock = socks.create_connection(
(self.host, self.port), self.timeout, None,
proxytype, proxyaddr, proxyport, rdns, username, password,
((socket.IPPROTO_TCP, socket.TCP_NODELAY, 1),))
break
except socks.SOCKS4Error as e:
if rdns and "0x5b" in str(e) and not is_ip(self.host):
# Maybe a SOCKS4 server that doesn't support remote resolving
# Let's try again
rdns = False
socks4_no_rdns.add(proxyaddr)
else:
raise
self.sock = sock
class SocksiPyConnectionS(httplib.HTTPSConnection): class SocksiPyConnectionS(httplib.HTTPSConnection):
def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs): def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs):
@ -41,12 +70,15 @@ class SocksiPyConnectionS(httplib.HTTPSConnection):
httplib.HTTPSConnection.__init__(self, *args, **kwargs) httplib.HTTPSConnection.__init__(self, *args, **kwargs)
def connect(self): def connect(self):
sock = socks.socksocket() SocksiPyConnection.connect(self)
sock.setproxy(*self.proxyargs) self.sock = self._context.wrap_socket(self.sock, server_hostname=self.host)
if type(self.timeout) in (int, float): if not self._context.check_hostname and self._check_hostname:
sock.settimeout(self.timeout) try:
sock.connect((self.host, self.port)) ssl.match_hostname(self.sock.getpeercert(), self.host)
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) except Exception:
self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close()
raise
class SocksiPyHandler(urllib2.HTTPHandler, urllib2.HTTPSHandler): class SocksiPyHandler(urllib2.HTTPHandler, urllib2.HTTPSHandler):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

Loading…
Cancel
Save