Support IPv6 in Tor always mode by creating ipv4 sockets with ipv6 address
This commit is contained in:
parent
ef6f9b9d70
commit
860ef650f9
1 changed files with 10 additions and 4 deletions
|
@ -85,6 +85,13 @@ class Connection(object):
|
||||||
self.ip_type = helper.getIpType(ip)
|
self.ip_type = helper.getIpType(ip)
|
||||||
self.updateName()
|
self.updateName()
|
||||||
|
|
||||||
|
def createSocket(self):
|
||||||
|
if helper.getIpType(self.ip) == "ipv6" and not hasattr(socket, "socket_noproxy"):
|
||||||
|
# Create IPv6 connection as IPv4 when using proxy
|
||||||
|
return socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
|
||||||
|
else:
|
||||||
|
return socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
|
||||||
def updateName(self):
|
def updateName(self):
|
||||||
self.name = "Conn#%2s %-12s [%s]" % (self.id, self.ip, self.protocol)
|
self.name = "Conn#%2s %-12s [%s]" % (self.id, self.ip, self.protocol)
|
||||||
|
|
||||||
|
@ -128,14 +135,14 @@ class Connection(object):
|
||||||
proxy_ip, proxy_port = config.trackers_proxy.split(":")
|
proxy_ip, proxy_port = config.trackers_proxy.split(":")
|
||||||
self.sock.set_proxy(socks.PROXY_TYPE_SOCKS5, proxy_ip, int(proxy_port))
|
self.sock.set_proxy(socks.PROXY_TYPE_SOCKS5, proxy_ip, int(proxy_port))
|
||||||
else:
|
else:
|
||||||
self.sock = helper.createSocket(self.ip)
|
self.sock = self.createSocket()
|
||||||
|
|
||||||
if "TCP_NODELAY" in dir(socket):
|
if "TCP_NODELAY" in dir(socket):
|
||||||
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||||
|
|
||||||
timeout_before = self.sock.gettimeout()
|
timeout_before = self.sock.gettimeout()
|
||||||
self.sock.settimeout(30)
|
self.sock.settimeout(30)
|
||||||
if self.ip_type == "ipv6":
|
if self.ip_type == "ipv6" and not hasattr(self.sock, "proxy"):
|
||||||
sock_address = (self.ip, self.port, 1, 1)
|
sock_address = (self.ip, self.port, 1, 1)
|
||||||
else:
|
else:
|
||||||
sock_address = (self.ip, self.port)
|
sock_address = (self.ip, self.port)
|
||||||
|
@ -160,11 +167,10 @@ class Connection(object):
|
||||||
self.log("Crypt connection error: %s, adding ip %s as broken ssl." % (err, self.ip))
|
self.log("Crypt connection error: %s, adding ip %s as broken ssl." % (err, self.ip))
|
||||||
self.server.broken_ssl_ips[self.ip] = True
|
self.server.broken_ssl_ips[self.ip] = True
|
||||||
self.sock.close()
|
self.sock.close()
|
||||||
self.sock = helper.createSocket(self.ip_type)
|
self.sock = self.createSocket()
|
||||||
self.sock.settimeout(30)
|
self.sock.settimeout(30)
|
||||||
self.sock.connect(sock_address)
|
self.sock.connect(sock_address)
|
||||||
|
|
||||||
|
|
||||||
# Detect protocol
|
# Detect protocol
|
||||||
self.send({"cmd": "handshake", "req_id": 0, "params": self.getHandshakeInfo()})
|
self.send({"cmd": "handshake", "req_id": 0, "params": self.getHandshakeInfo()})
|
||||||
event_connected = self.event_connected
|
event_connected = self.event_connected
|
||||||
|
|
Loading…
Reference in a new issue