Exemple #1
0
    def _on_packet_action(self, packet):
        """ Function that we'll execute to examine the packets we're receiving 
        The proxy will only receive packets from legacy devices, so he can keep his own database 
        of devices """

        # Get the mac address
        mac_address = packet[Ether].src
        # Añadir comprobación de si está en la red

        # If the mac address is not in macs but the ip is in our network
        # that means that the sender is one of the legacy devices
        if packet[IP].src in self.network and mac_address not in self.macs:
            packet.summary()
            # Add it to our mac address set
            self.macs.add(mac_address)
            print('Added', mac_address, 'to the list of addresses')

            # Create a new account using mac as password
            account_num = self.w3.personal.newAccount(mac_address)
            ip_addr = packet[IP].src
            print('Cuenta del cliente', account_num)

            # Unlock account forever
            self.w3.personal.unlockAccount(account_num, mac_address, 0)
            print('Account unlocked')

            # Create a new client
            # Since the client won't even know that we're in an
            # ethereum environment, we have to set the proxy's w3 as the client's
            # so we can do transactions quickly
            new_client = Client(account=account_num,
                                w3=self.w3,
                                ip_address=ip_addr,
                                mac_address=mac_address)
            # Register the client
            print('Registering client with address:', account_num)
            print('Proxy address', self.account)
            print('Default Account:', new_client.w3.eth.defaultAccount)

            # Register the new client
            new_client.register()
            print('Registered new client')

            # Set the dictionary so we relate mac_addresses to the clients' interface
            self.clients[mac_address] = new_client
            print('New dictionary:', self.clients)

            # Add it to the database
            with self.conn as conn:
                command = """
                INSERT INTO devices(account, mac_address, ip_address) values ('{}','{}','{}')
                """.format(account_num, mac_address, ip_addr)
                conn.execute(command)
def main():

    print('Instantiating ContractInterface')
    client = ContractInterface()

    print('Registering...')
    client.register()
    '''
    print("Transfering 50 IoT's")
    client.transfer(client.w3.eth.accounts[2], 50)'''

    # Request 5 GB. This one should be accepted
    print('Request 5 GB (even)')
    client.request_storage(5000)

    input('Press enter for freeing')
    id, _ = client.remoteStorage.popitem()
    client.free_storage(id)
def register_client(client: ContractInterface):
    client.register()