Пример #1
0
    def packet_callback(self, _packet):
        tcp_packet = TCP(_packet.get_payload())
        # check if this is a packet which we can modify
        if self.send_count % Rate.ERR == self.random_modulo_spoil and len(
                tcp_packet.load) > 1400:
            self.random_modulo_spoil = random.randint(0, Rate.ERR - 1)
            load_array = bytearray(tcp_packet.load)
            load_array[random.randint(0,
                                      len(tcp_packet.load) -
                                      1)] = random.randint(0, 255)
            tcp_packet.load = bytes(load_array)
            _packet.set_payload(bytes(tcp_packet))

        self.send_count += 1
        _packet.accept()
Пример #2
0
    def packet_callback(self, _packet):
        ip_packet = IP(_packet.get_payload())
        tcp_packet = TCP(_packet.get_payload())
        # check if this is a packet which we can modify
        if self.send_count % self.send_mod_packet == self.random_modulo:
            self.random_modulo = random.randint(0, self.send_mod_packet - 1)
            print("Trying to send stegano packet...")
            # check state
            if self.state == ServerState.READY:
                load_array = bytearray(tcp_packet.load)
                load_array = self.generate_packet(load_array,
                                                  self.send_queue.popleft())
                self.state = ServerState.KEY_SENT
                self.server_ip = ip_packet.src
                self.client_ip = ip_packet.dst

                tcp_packet.load = bytes(load_array)
                _packet.set_payload(bytes(tcp_packet))
                print("Stegano packet sent.")

            elif self.state == ServerState.DATA_SENDING:
                load_array = bytearray(tcp_packet.load)
                load_array = self.generate_packet(load_array,
                                                  self.send_queue.popleft())
                tcp_packet.load = bytes(load_array)
                _packet.set_payload(bytes(tcp_packet))
                print("Stegano packet sent.")
                # If it was last send packet in the next sending send FIN KEY

                if len(self.send_queue) == 0:
                    self.state = ServerState.FIN_SENT

        elif self.send_count % Rate.ERR.value == self.random_modulo_spoil and len(
                tcp_packet.load) > 1400:
            self.random_modulo_spoil = random.randint(0, Rate.ERR.value - 1)
            load_array = bytearray(tcp_packet.load)
            load_array[random.randint(0,
                                      len(tcp_packet.load) -
                                      1)] = random.randint(0, 255)
            tcp_packet.load = bytes(load_array)
            _packet.set_payload(bytes(tcp_packet))

        elif ip_packet.src == self.client_ip and len(tcp_packet.load) > 50:
            if self.is_hash_valid(tcp_packet.load):
                data_packet = tcp_packet.load
                if self.state != ServerState.KEY_SENT:
                    data_packet = self.decrypt_data(tcp_packet.load)
                session_id, sequence_id, flag, data_size, data = self.get_packet_data(
                    data_packet)
                if session_id == self.session_id:
                    if flag == Flag.KEY.value:
                        self.client_public_key = RSA.importKey(data)
                        self.state = ServerState.DATA_SENDING
                        self.send_file_to_queue()
                    elif flag == Flag.FIN.value and self.state == ServerState.FIN_SENT:
                        tmp_header = self.generate_header(
                            self.session_id, 4294967295, Flag.FIN_ACK.value,
                            os.urandom(10))
                        encrypted_data = self.encrypt(tmp_header)
                        self.send_queue.append(encrypted_data)
                        self.state = ServerState.CLOSING

        self.send_count += 1
        _packet.accept()