Пример #1
0
    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()
Пример #2
0
 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)
Пример #3
0
 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)