Merge pull request #2193 from bauerj/socks-auth
Allow using a SOCKS5 proxy with authentication
This commit is contained in:
@@ -129,7 +129,7 @@ proxy_modes = ['socks4', 'socks5', 'http']
|
||||
def serialize_proxy(p):
|
||||
if type(p) != dict:
|
||||
return None
|
||||
return ':'.join([p.get('mode'),p.get('host'), p.get('port')])
|
||||
return ':'.join([p.get('mode'),p.get('host'), p.get('port'), p.get('user'), p.get('password')])
|
||||
|
||||
def deserialize_proxy(s):
|
||||
if type(s) not in [str, unicode]:
|
||||
@@ -147,8 +147,14 @@ def deserialize_proxy(s):
|
||||
n += 1
|
||||
if len(args) > n:
|
||||
proxy["port"] = args[n]
|
||||
n += 1
|
||||
else:
|
||||
proxy["port"] = "8080" if proxy["mode"] == "http" else "1080"
|
||||
if len(args) > n:
|
||||
proxy["user"] = args[n]
|
||||
n += 1
|
||||
if len(args) > n:
|
||||
proxy["password"] = args[n]
|
||||
return proxy
|
||||
|
||||
def deserialize_server(server_str):
|
||||
@@ -400,7 +406,12 @@ class Network(util.DaemonThread):
|
||||
if proxy:
|
||||
self.print_error('setting proxy', proxy)
|
||||
proxy_mode = proxy_modes.index(proxy["mode"]) + 1
|
||||
socks.setdefaultproxy(proxy_mode, proxy["host"], int(proxy["port"]))
|
||||
socks.setdefaultproxy(proxy_mode,
|
||||
proxy["host"],
|
||||
int(proxy["port"]),
|
||||
# socks.py seems to want either None or a non-empty string
|
||||
username=(proxy.get("user", "") or None),
|
||||
password=(proxy.get("password", "") or None))
|
||||
socket.socket = socks.socksocket
|
||||
# prevent dns leaks, see http://stackoverflow.com/questions/13184205/dns-over-proxy
|
||||
socket.getaddrinfo = lambda *args: [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]
|
||||
|
||||
Reference in New Issue
Block a user