summaryrefslogtreecommitdiffstats
path: root/contrib/python/PySocks/py3/sockshandler.py
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/python/PySocks/py3/sockshandler.py')
-rw-r--r--contrib/python/PySocks/py3/sockshandler.py111
1 files changed, 0 insertions, 111 deletions
diff --git a/contrib/python/PySocks/py3/sockshandler.py b/contrib/python/PySocks/py3/sockshandler.py
deleted file mode 100644
index 6a2ed81ceef..00000000000
--- a/contrib/python/PySocks/py3/sockshandler.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/env python
-"""
-SocksiPy + urllib2 handler
-
-version: 0.3
-author: e<[email protected]>
-
-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
-
-try:
- import urllib2
- import httplib
-except ImportError: # Python 3
- import urllib.request as urllib2
- import http.client as httplib
-
-import socks # $ pip install PySocks
-
-def merge_dict(a, b):
- d = a.copy()
- d.update(b)
- 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):
- def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs):
- self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password)
- httplib.HTTPConnection.__init__(self, *args, **kwargs)
-
- def connect(self):
- (proxytype, proxyaddr, proxyport, rdns, username, password) = self.proxyargs
- rdns = rdns and proxyaddr not in socks4_no_rdns
- while True:
- try:
- 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):
- def __init__(self, proxytype, proxyaddr, proxyport=None, rdns=True, username=None, password=None, *args, **kwargs):
- self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password)
- httplib.HTTPSConnection.__init__(self, *args, **kwargs)
-
- def connect(self):
- SocksiPyConnection.connect(self)
- self.sock = self._context.wrap_socket(self.sock, server_hostname=self.host)
- if not self._context.check_hostname and self._check_hostname:
- try:
- ssl.match_hostname(self.sock.getpeercert(), self.host)
- except Exception:
- self.sock.shutdown(socket.SHUT_RDWR)
- self.sock.close()
- raise
-
-class SocksiPyHandler(urllib2.HTTPHandler, urllib2.HTTPSHandler):
- def __init__(self, *args, **kwargs):
- self.args = args
- self.kw = kwargs
- urllib2.HTTPHandler.__init__(self)
-
- def http_open(self, req):
- def build(host, port=None, timeout=0, **kwargs):
- kw = merge_dict(self.kw, kwargs)
- conn = SocksiPyConnection(*self.args, host=host, port=port, timeout=timeout, **kw)
- return conn
- return self.do_open(build, req)
-
- def https_open(self, req):
- def build(host, port=None, timeout=0, **kwargs):
- kw = merge_dict(self.kw, kwargs)
- conn = SocksiPyConnectionS(*self.args, host=host, port=port, timeout=timeout, **kw)
- return conn
- return self.do_open(build, req)
-
-if __name__ == "__main__":
- import sys
- try:
- port = int(sys.argv[1])
- except (ValueError, IndexError):
- port = 9050
- opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, "localhost", port))
- print("HTTP: " + opener.open("http://httpbin.org/ip").read().decode())
- print("HTTPS: " + opener.open("https://httpbin.org/ip").read().decode())