Esempio n. 1
0
    def server_loop(self):
        """
        Main server loop. As clients connect to the proxy, pass the
        connection on to the upstream server and bind it to a 'connection'.
        Start sniffing all packets as they fly by.

        :return:
        """
        (self._client_reader, self._client_writer) = \
            yield from asyncio.open_connection(self.config['upstream_host'],
                                               self.config['upstream_port'])
        self._client_loop_future = asyncio.ensure_future(self.client_loop())
        try:
            while True:
                packet = yield from read_packet(self._reader,
                                                Direction.TO_SERVER)
                # Break in case of emergencies:
                # if packet['type'] not in [17, 40, 43, 48, 51]:
                #    logger.debug('c->s  {}'.format(packet['type']))

                if (yield from self.check_plugins(packet)):
                    yield from self.write_client(packet)
        except asyncio.IncompleteReadError:
            # Pass on these errors. These occur when a player disconnects badly
            pass
        except Exception as err:
            logger.error('Server loop exception occurred:'
                         '{}: {}'.format(err.__class__.__name__, err))
        finally:
            self.die()
Esempio n. 2
0
    def server_loop(self):
        """
        Main server loop. As clients connect to the proxy, pass the
        connection on to the upstream server and bind it to a 'connection'.
        Start sniffing all packets as they fly by.

        :return:
        """
        (self._client_reader, self._client_writer) = \
            yield from asyncio.open_connection(self.config['upstream_host'],
                                               self.config['upstream_port'])
        self._client_loop_future = asyncio.ensure_future(self.client_loop())
        try:
            while True:
                packet = yield from read_packet(self._reader,
                                                Direction.TO_SERVER)
                # Break in case of emergencies:
                # if packet['type'] not in [17, 40, 41, 43, 48, 51]:
                #    logger.debug('c->s  {}'.format(packet['type']))

                if (yield from self.check_plugins(packet)):
                    yield from self.write_client(packet)
        except asyncio.IncompleteReadError:
            # Pass on these errors. These occur when a player disconnects badly
            pass
        except asyncio.CancelledError:
            logger.warning("Connection ended abruptly.")
        except Exception as err:
            logger.error("Server loop exception occurred:"
                         "{}: {}".format(err.__class__.__name__, err))
        finally:
            self.die()
Esempio n. 3
0
 def client_loop(self):
     try:
         while True:
             packet = yield from read_packet(self._client_reader, "Server")
             send_flag = yield from self.check_plugins(packet)
             if send_flag:
                 yield from self.write(packet)
     finally:
         self.die()
Esempio n. 4
0
 def client_loop(self):
     try:
         while True:
             packet = yield from read_packet(self._client_reader,
                                             Direction.TO_STARBOUND_CLIENT)
             send_flag = yield from self.check_plugins(packet)
             if send_flag:
                 yield from self.write(packet)
     finally:
         self.die()
Esempio n. 5
0
 def client_loop(self):
     try:
         while True:
             packet = yield from read_packet(self._client_reader,
                                             Direction.TO_STARBOUND_CLIENT)
             send_flag = yield from self.check_plugins(packet)
             if send_flag:
                 yield from self.write(packet)
     finally:
         self.die()
Esempio n. 6
0
 def server_loop(self):
     (self._client_reader,
      self._client_writer) = yield from asyncio.open_connection("127.0.0.1",
                                                                21024)
     self._client_loop_future = asyncio.Task(self.client_loop())
     try:
         while True:
             packet = yield from read_packet(self._reader, "Client")
             if (yield from self.check_plugins(packet)):
                 yield from self.write_client(packet)
     finally:
         self.die()
Esempio n. 7
0
    def client_loop(self):
        """
        Main client loop. Sniff packets originating from the server and bound
        for the clients.

        :return:
        """
        try:
            while True:
                packet = yield from read_packet(self._client_reader,
                                                Direction.TO_CLIENT)
                # Break in case of emergencies:
                # if packet['type'] not in [7, 17, 23, 27, 43, 49, 51]:
                #     logger.debug('s->c  {}'.format(packet['type']))

                send_flag = yield from self.check_plugins(packet)
                if send_flag:
                    yield from self.write(packet)
        finally:
            self.die()
Esempio n. 8
0
    def listen_server_side_aux_router(self):

        received_message = check.socket_recv(
            self.socket_server_side,
            self.router_id
        )

        if(received_message is not None and len(received_message) > 0):

            parsed_message = utils.read_packet(received_message)

            msg = " ".join(["message received from:", self.server_ip])
            utils.show_status(self.router_id, msg)
            utils.report(
                self.router_id,
                parsed_message,
                "reading packet received"
            )

            self.handle_message_server_side(parsed_message)
Esempio n. 9
0
    def listen_packets(self):
        received_message = check.socket_recv(self.client_connection,
                                             self.client_id)

        if (received_message is not None and len(received_message) > 0):
            parsed_message = utils.read_packet(received_message)
            time.sleep(2)  # give time to router to show its status
            msg = " ".join(
                ["message received from:", parsed_message["source_ip"]])
            utils.show_status(self.client_id, msg)
            utils.report(self.client_id, parsed_message,
                         "reading received packet")

            if (parsed_message["destination_mac"] == BROADCAST_MAC):
                msg = " ".join([
                    "received an ARP request from", parsed_message["source_ip"]
                ])
                utils.show_status(self.client_id, msg)

                self.send_message(parsed_message.get("source_ip"),
                                  "{ARP reply}")
Esempio n. 10
0
    def client_loop(self):
        """
        Main client loop. Sniff packets originating from the server and bound
        for the clients.

        :return:
        """
        try:
            while True:
                packet = yield from read_packet(self._client_reader,
                                                Direction.TO_CLIENT)
                # Break in case of emergencies:
                # if packet['type'] not in [7, 17, 23, 27, 31, 43, 49, 51]:
                #     logger.debug('s->c  {}'.format(packet['type']))

                send_flag = yield from self.check_plugins(packet)
                if send_flag:
                    yield from self.write(packet)
        except asyncio.IncompleteReadError:
            logger.error("IncompleteReadError: Connection ended abruptly.")
        finally:
            self.die()