def run(self): global PUBLIC_IP_UPDATE_LAST self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind(('', REFLECTION_SERVER_PORT)) debug("Reflection Server listening on %d"%REFLECTION_SERVER_PORT) refreshPublicIP() PUBLIC_IP_UPDATE_LAST = time.time() while True: r, w, e = select([self.sock], [self.sock], [], 0) if r: data, addr = self.sock.recvfrom(1024) ip = addr[0] port = addr[1] if ip == SERVER_GATEWAY_IP: ip = SERVER_PUBLIC_IP out = ByteStream() out.writeString(ip) out.writeInt(port) self.sock.sendto(out.toString(), addr) now = time.time() if now - PUBLIC_IP_UPDATE_LAST > PUBLIC_IP_UPDATE_INTERVAL: PUBLIC_IP_UPDATE_LAST = now threading.Thread(target=refreshPublicIP).start() time.sleep(0.01) self.sock.close()
def sendTunnelInfo(self, targetId, targetPort, privIp, privPort, pubIp, pubPort): out = ByteStream() out.writeByte(P_TUNNEL_INFO) out.writeString(targetId) out.writeString(targetPort) out.writeString(privIp) out.writeInt(privPort) out.writeString(pubIp) out.writeInt(pubPort) self.send(out)
def sendTunnelInfo(self, targetId, targetPort, privIp, privPort, pubIp, pubPort): out = ByteStream() out.writeByte(P_TUNNEL_INFO) out.writeString(targetId) out.writeString(targetPort) out.writeString(privIp) out.writeInt(privPort) out.writeString(pubIp) out.writeInt(pubPort) self.send(out)