R.Focardi Laboratorio di Ingegneria del Software 6. 1



Похожие документы
Socket & RMI Ingegneria del Software - San Pietro

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_ Stefano Millozzi

Architettura Client-Server

Programmare con le Socket

Programmare con le Socket TCP in java. 2: Application Layer 1

Programmare con le Socket TCP

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Corso di Reti di Calcolatori

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Telematica II 12. Esercitazione/Laboratorio 4

Corso di Reti di Calcolatori. Datagrammi

Applicazioni web. Parte 5 Socket

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Corso di Reti di Calcolatori L-A

Corso sul linguaggio Java

Reti di Calcolatori:

appunti delle lezioni Architetture client/server: applicazioni client

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel , dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Programmazione dei socket con TCP #2

Esercitazione n 4. Obiettivi

Applicazioni distribuite

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Altri tipi di connessione

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Parte II: Reti di calcolatori Lezione 10

Java Socket LSO 2008

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Appunti di Informatica 1

Introduzione alle applicazioni di rete

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

Networking. Mauro Migliardi Ph. D.

Transmission Control Protocol

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Nuovo server E-Shop: Guida alla installazione di Microsoft SQL Server

Cenni di programmazione distribuita in C++ Mauro Piccolo

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Manuale NetSupport v Liceo G. Cotta Marco Bolzon

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

appunti delle lezioni Architetture client/server: applicazioni server

Laboratorio di reti I: Il pacchetto java.net

Esercitazione 4 JDBC

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Creare connessioni cifrate con stunnel

Dal protocollo IP ai livelli superiori

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

Inizializzazione degli Host. BOOTP e DHCP

Programmare in Java. Olga Scotti

I Socket. Laboratorio Software M. Grotto R. Farina

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

19. LA PROGRAMMAZIONE LATO SERVER

Sockets in Java. Lorenzo Gallucci

Configurazione WAN (accesso internet)

Eclipse. Avviare un progetto e compilare un semplice programma

Esercizi (1-2): da: TCP/IP Sockets in C (Donahoo-Calvert)

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

Esercitazione 05. Sommario. Packet Filtering [ ICMP ] Esercitazione Descrizione generale. Angelo Di Iorio (Paolo Marinelli)

Esercizio 2. Client e server comunicano attraverso socket TCP

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

20 - Input/Output su File

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Zeroshell: VPN Lan-to-Lan. Il sistema operativo multifunzionale. creato da

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

Client - Server. Client Web: il BROWSER

Reti di Telecomunicazione Lezione 7

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Installazione del software Fiery per Windows e Macintosh

2015 PERIODO D IMPOSTA

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

Java: la libreria delle classi

1. Manuale d uso per l utilizzo della WebMail PEC e del client di posta tradizionale

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Registratori di Cassa

ARP (Address Resolution Protocol)

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

Progetto di Ingegneria del Software 2. SWIMv2

MANUALE CONFIGURAZIONE ED UTILIZZO GATEWAY MBUS-MODBUS (RTU/TCP) MODELLO PiiGAB M900

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Zeroshell: VPN Host-to-Lan. Il sistema operativo multifunzionale. creato da

RMI: metodi equals e hashcode

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Il Web Server e il protocollo HTTP

Programmazione distribuita in Java. Socket & Client-Server

IMPORTANTE PER ESEGUIRE QUESTA INSTALLAZIONE NEI SISTEMI OPERATIVI NT-2000-XP, BISOGNA AVERE I PRIVILEGI AMMINISTRATIVI.

Introduzione JDBC interfaccia java.sql driver caricare i driver

Транскрипт:

Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream sockets un processo stabilisce una comunicazione con un altro processo (stream continuo), usando come protocollo TCP (Transmission Control Protocol) Datagram sockets vengono trasmessi pacchetti di informazione, usano il protocollo UDP (User Datagram Protocol) La libreria di riferimento è il package java.net R.Focardi Laboratorio di Ingegneria del Software 6. 1 Connessione Un socket mantiene due flussi: input e output. Un processo invia dei dati ad un altro processo attraverso la rete semplicemente scrivendo nel flusso di output associato al socket Un processo riceve dei dati scritti da un altro processo leggendo il flusso di input associato al socket Per stabilire una connessione una macchina deve far girare un programma che è in attesa di connessione, e un altra macchina deve cercare di connettersi con essa, in modo analogo alla trasmissione di un fax bisogna conoscere l indirizzo della macchina con cui ci si vuole connettere bisogna conoscere un numero di porta (in TCP/IP un numero tra 1025 e 65535). Sia il client che il server devono convenire sul numero di porta da usare R.Focardi Laboratorio di Ingegneria del Software 6. 2 Page 1

Connessione TCP/IP Server ServerSocket(porta, maxconness) stabilisce la porta in cui si aspetta una connessione con al più maxconness clients Client ServerSocket.accept() restituisce un oggetto di tipo Socket quando si stabilisce la connessione OutputStream Socket(host, porta) tenta di connettersi OutputStream InputStream InputStream SocketClose() SocketClose() R.Focardi Laboratorio di Ingegneria del Software 6. 3 Server TCP/IP // Inizializza un server che riceverà una connessione da un client, manderà // una stringa al client, ne ricevera una, e chiuderà la connessione import java.io.*; import java.net.*; import java.awt.*; public class Server extends Frame { private TextArea display; public Server(){ super( "Server" ); display = new TextArea( "", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY ); add( display, BorderLayout.CENTER ); setsize( 300, 150 ); setvisible( true ); public static void main( String args[] ){ Server s = new Server(); s.addwindowlistener( new CloseWindowAndExit() ); s.runserver(); public void runserver(){ ServerSocket server; Socket connection; DataOutputStream output; DataInputStream input; int counter = 1; // da implementare R.Focardi Laboratorio di Ingegneria del Software 6. 4 Page 2

try { // Passo 1 Crea un ServerSocket server = new ServerSocket( 5000, 100 ); while ( true ) { // Passo 2 Resta in attesa di una connessione connection = server.accept(); display.append( Connessione " + counter + " richiesta da : " + connection.getinetaddress().gethostname() ); // Passo 3: Inizializza i flussi di input e output input = new DataInputStream( connection.getinputstream() ); output = new DataOutputStream( connection.getoutputstream() ); display.append( "\ni Flussi di I/O sono a posto\n" ); // Passo 4: Comandi durante la connessione. display.append( Mando il messaggio \ Connessione perfetta!\"\n" ); output.writeutf( Connessione perfetta!" ); display.append( Messaggio del client: " + input.readutf() ); // invia // riceve // Passo 5: Chiude la connessione. display.append( "\ntrasmissione finita " + Chiudo il socket.\n\n" ); connection.close(); ++counter; catch ( IOException e ) { e.printstacktrace(); // nb: UTF=Unicode Text Format R.Focardi Laboratorio di Ingegneria del Software 6. 5 Client TCP/IP // Inizializza un Client che leggerà l informazione spedita dal // Server e la mostrerà sul display. import java.io.*; import java.net.*; import java.awt.*; public class Client extends Frame { private TextArea display; public Client(){ super( "Client" ); display = new TextArea( "", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY ); add( display, BorderLayout.CENTER ); setsize( 300, 150 ); setvisible( true ); public static void main( String args[] ){ Client c = new Client(); c.addwindowlistener( new CloseWindowAndExit() ); c.runclient(); // da implementare R.Focardi Laboratorio di Ingegneria del Software 6. 6 Page 3

public void runclient(){ Socket client; DataInputStream input; DataOutputStream output; try { // Passo 1: Crea un Socket per entrare in connessione. client = new Socket( InetAddress.getLocalHost(), 5000 ); display.append( Connessione con: " + client.getinetaddress().gethostname()); // Passo 2: Inizializza i flussi di input e di output. input = new DataInputStream( client.getinputstream() ); output = new DataOutputStream( client.getoutputstream() ); display.append( "\ni Flussi di I/O sono a posto\n" ); // Passo 3: Processi durante la connessione display.append( Messaggio del server: " + input.readutf() ); // riceve display.append( "Invio il messaggio \ Grazie mille.\"\n" ); output.writeutf( Grazie mille." ); // invia // Passo 4: Chiude la connessione. display.append( Trasmissione completata. " + Chiudo la connessione.\n" ); client.close(); catch ( IOException e ) { e.printstacktrace(); R.Focardi Laboratorio di Ingegneria del Software 6. 7 La classe Socket Socket (InetAddress indirizzo, int porta) Crea uno stream socket e lo connette alla porta e all indirizzo specificato Socket (String indirizzo, int porta) Come sopra ma l indirizzo è dato come stringa getinetaddress() Ritorna l indirizzo al quale il socket è connesso getinputstream() e getoutputstream() Ritornano l input e l output stream per un socket getlocaladdress() Ritorna l indirizzo locale al quale il socket è connesso (nota: un host potrebbe avere piu indirizzi ) R.Focardi Laboratorio di Ingegneria del Software 6. 8 Page 4

Esecuzione socket TCP SERVER Connessione 1 richiesta da : ihoh I Flussi di I/O sono a posto Mando il messaggio "Connessione perfetta!" CLIENT Connessione con: ihoh I Flussi di I/O sono a posto Messaggio del server: Connessione perfetta! Invio il messaggio "Grazie mille." Messaggio del client: Grazie mille. Trasmissione finita Chiudo il socket. Trasmissione completata. Chiudo la connessione. R.Focardi Laboratorio di Ingegneria del Software 6. 9 Socket UDP UDP: protocollo che non richiede comunicazione sincrona (TCP : telefono / UDP : posta). La comunicazione avviene per pacchetti. DatagramPacket ha due costruttori uno per ricevere dati DatagramPacket(byte[] riceve, int lungh) uno per inviare dati DatagramPacket(byte[] invia, int lungh, InetAddress indirizzo, int porta) DatagramSocket ha tre costruttori DatagramSocket() ogni porta sul local host DatagramSocket(int porta) porta specificata sul local host DatagramSocket(int porta, inetaddress indirizzo) porta specificata sull indirizzo specificato R.Focardi Laboratorio di Ingegneria del Software 6. 10 Page 5

UDP Server import java.io.*; import java.net.*; import java.awt.*; public class Server extends Frame { private TextArea display; private DatagramPacket sendpacket, receivepacket; private DatagramSocket socket; public Server(){ super( "Server" ); display = new TextArea(); add( display, BorderLayout.CENTER ); setsize( 400, 300 ); setvisible( true ); try { socket = new DatagramSocket( 5000 ); catch( SocketException se ) { se.printstacktrace(); System.exit( 1 ); public static void main( String args[] ){ Server s = new Server(); s.addwindowlistener( new CloseWindowAndExit() ); // da implementare s.waitforpackets(); R.Focardi Laboratorio di Ingegneria del Software 6. 11 public void waitforpackets(){ while ( true ) { try { // inizializza un pacchetto byte data[] = new byte[ 100 ]; receivepacket = new DatagramPacket( data, data.length ); // aspetta un pacchetto socket.receive( receivepacket ); // riceve // processa il pacchetto display.append( "\npacket received:" + "\nfrom host: " + receivepacket.getaddress() + "\nhost port: " + receivepacket.getport() + "\nlength: " + receivepacket.getlength() + "\ncontaining:\n\t" + new String( receivepacket.getdata() ) ); // risponde al client facendo echo delle informazioni sul pacchetto display.append( "\n\necho data to client..."); sendpacket = new DatagramPacket( receivepacket.getdata(), receivepacket.getlength(), receivepacket.getaddress(), receivepacket.getport() ); socket.send( sendpacket ); // invia display.append( "Packet sent\n" ); catch( IOException io ) { display.append( io.tostring() + "\n" ); io.printstacktrace(); R.Focardi Laboratorio di Ingegneria del Software 6. 12 Page 6

UDP Client import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; public class Client extends Frame implements ActionListener { private TextField enter; private TextArea display; private DatagramPacket sendpacket, receivepacket; private DatagramSocket socket; public Client(){ super( "Client" ); enter = new TextField( "Type message here" ); enter.addactionlistener( this ); add( enter, BorderLayout.NORTH ); display = new TextArea(); add( display, BorderLayout.CENTER ); setsize( 400, 300 ); setvisible( true ); try { socket = new DatagramSocket(); catch( SocketException se ) { se.printstacktrace(); System.exit( 1 ); R.Focardi Laboratorio di Ingegneria del Software 6. 13 public void waitforpackets(){ while ( true ) { try { // set up packet byte data[] = new byte[ 100 ]; receivepacket = new DatagramPacket( data, data.length ); // wait for packet socket.receive( receivepacket ); // process packet display.append( "\npacket received:" + "\nfrom host: " + receivepacket.getaddress() + "\nhost port: " + receivepacket.getport() + "\nlength: " + receivepacket.getlength() + "\ncontaining:\n\t" + new String( receivepacket.getdata() ) ); catch( IOException exception ) { display.append( exception.tostring() + "\n" ); exception.printstacktrace(); R.Focardi Laboratorio di Ingegneria del Software 6. 14 Page 7

public void actionperformed( ActionEvent e ) { try { display.append( "\nsending packet containing: " + e.getactioncommand() + "\n" ); String s = e.getactioncommand(); byte data[] = s.getbytes(); sendpacket = new DatagramPacket( data, data.length, InetAddress.getLocalHost(), 5000 ); socket.send( sendpacket ); display.append( "Packet sent\n" ); catch ( IOException exception ) { display.append( exception.tostring() + "\n" ); exception.printstacktrace(); public static void main( String args[] ) { Client c = new Client(); c.addwindowlistener( new CloseWindowAndExit() ); // da implementare c.waitforpackets(); R.Focardi Laboratorio di Ingegneria del Software 6. 15 Esecuzione socket UDP SERVER Packet received: From host: sally/157.138.20.104 Host port: 1031 Length: 28 Containing: ciao!! CLIENT Sending packet containing: ciao!! Packet sent Sending packet containing: questa e una seconda prova di trasmissione Packet sent Echo data to client...packet sent Packet received: From host: sally/157.138.20.104 Host port: 1031 Length: 33 Containing: questa e una seconda prova di trasmissione Echo data to client...packet sent From host: sally/157.138.20.104 Host port: 5000 Length: 28 Containing: ciao!! Packet received: From host: sally/157.138.20.104 Host port: 5000 Length: 33 Containing: questa e una seconda prova di trasmissione R.Focardi Laboratorio di Ingegneria del Software 6. 16 Page 8

Sicurezza in Java 1.2 Problema: limitare l accesso alle risorse di sistema da parte di codice scaricato dalla rete e quindi potenzialmente insicuro (untrusted) JDK 1.2 migliora notevolmente la gestione della sicurezza rispetto alle versioni precedenti: controllo degli accessi policy-based, facilmente configurabile e fine-grained nuove classi e interfacce per crittografia, gestione dei certificati e delle chiavi tre nuovi tool per la gestione della sicurezza Vediamo un po di storia R.Focardi Laboratorio di Ingegneria del Software 6. 17 Sicurezza in JDK 1.0: Sandbox Il primo modello di Java era piuttosto restrittivo e si basava sul concetto di Sandbox La Sandbox rappresenta un ambiente isolato in cui eseguire il codice non sicuro (untrusted) scaricato dalla rete Security Manager garantisce che: il codice locale ha accesso completo alle risorse del sistema, mentre il codice scaricato dalla rete puo essere eseguito solo all interno della Sandbox R.Focardi Laboratorio di Ingegneria del Software 6. 18 Page 9

Modello di sicurezza in JDK 1.0 R.Focardi Laboratorio di Ingegneria del Software 6. 19 Sicurezza in JDK 1.1 JDK 1.1 ha introdotto il concetto di applet firmata Le applet firmate sono trattate come codice locale (trusted) ed hanno quindi accesso a tutte le risorse Una applet e firmata correttamente se la chiave publica usata per verificarne la firma e affidabile (trusted) Una applet non firmata viene eseguita ancora nella Sandbox R.Focardi Laboratorio di Ingegneria del Software 6. 20 Page 10

Modello di sicurezza in JDK 1.1 R.Focardi Laboratorio di Ingegneria del Software 6. 21 Sicurezza in JDK 1.2 Migliora molto la gestione della sicurezza! tutto il codice (trusted e untrusted) puo essere gestito tramite una politica di sicurezza La politica di sicurezza stabilisce i privilegi di accesso del codice in base a vari parametri: indirizzo di rete di provenienza firma (chi ha firmato l applet) Specifica in dettaglio quali sono gli accessi a quali risorse Esempio: read/write su una particolare directory Esempio: connect access a un certo host su una certa porta R.Focardi Laboratorio di Ingegneria del Software 6. 22 Page 11

JDK 1.2: i Domini Il codice e organizzato in domini Ogni dominio include un insieme di classi; le istanze delle classi di uno stesso dominio hanno gli stessi privilegi di accesso Naturalmente, un dominio puo essere configurato come una Sandbox: la politica JDK 1.0 e quindi ancora realizzabile come sottocaso Le applicazioni locali per default hanno completo accesso alle risorse ma ora e anche possibile filtrarle tramite una politica di sicurezza R.Focardi Laboratorio di Ingegneria del Software 6. 23 Modello di sicurezza in JDK 1.2 Dominio Dominio con con accesso accesso totale totale alle alle risorse risorse Domini Domini con con accessi accessi intermedi intermedi Dominio Dominio con con accesso accesso equivalente equivalente a a Sandbox Sandbox R.Focardi Laboratorio di Ingegneria del Software 6. 24 Page 12

Esempio: osservare le restrizioni Provare ad eseguire un applet che cerca di creare un nuovo file writetest nella directory corrente Dal sito javasoft: appletviewer http://java.sun.com/docs/books/tutorial/ security1.2/tour1/example-1dot2/writefile.html Il visualizzatore di applet (o il browser) mostra un messaggio riguardante una exception di sicurezza R.Focardi Laboratorio di Ingegneria del Software 6. 25 Exception di sicurezza R.Focardi Laboratorio di Ingegneria del Software 6. 26 Page 13

Esempio: osservare le restrizioni R.Focardi Laboratorio di Ingegneria del Software 6. 27 Creare una Politica di Sicurezza Si deve generare un policy file (Nota: il nome di questo file dipende dal sistema operativo!) Si puo scrivere con un qualsiasi editor Si puo utilizzare il Policy Tool; basta lanciare policytool dal prompt Evita errori nella generazione del file! Quando viene lanciato cerca di caricare la politica di sicurezza esistente; se non la trova mostra una schermata bianca R.Focardi Laboratorio di Ingegneria del Software 6. 28 Page 14

Policy Tool: schermata iniziale R.Focardi Laboratorio di Ingegneria del Software 6. 29 Bottone Add Policy R.Focardi Laboratorio di Ingegneria del Software 6. 30 Page 15

Creare una politica di sicurezza CodeBase: indica la locazione di provenienza del codice; vengono garantiti accessi solo al codice che proviene da CodeBase Inserire: http://java.sun.com/docs/books/tutorial/ security1.2/tour1/example-1dot2/ Attenzione: Se lasciato vuoto concede gli accessi a qualsiasi locazione Per dare accesso a tutta una gerarchia di directory ( - indica tutte le sotto-directory): http://java.sun.com/docs/books/tutorial/ security1.2/- R.Focardi Laboratorio di Ingegneria del Software 6. 31 Creare una politica di sicurezza SignedBy: indica un alias di un certificato per una particolare chiave pubblica; garantisce gli accessi solo al codice firmato con la corrispondente chiave privata Se lasciato vuoto non richiede nessuna firma In questo esempio lo lasciamo vuoto! Premendo Add Permission si passa alla schermata successiva dove e possibile inserire il tipo di Permission (I/O), il target (nome file) e l azione (write) R.Focardi Laboratorio di Ingegneria del Software 6. 32 Page 16

Aggiungere un privilegio R.Focardi Laboratorio di Ingegneria del Software 6. 33 Salvare il file dal menu Save As R.Focardi Laboratorio di Ingegneria del Software 6. 34 Page 17

Come usare una politica Deve essere specificata nel security properties file : Windows: java.home\lib\security\java.security Unix: java.home/lib/security/java.security Le entry sono della forma (n e un numero): policy.url.<n>=file:/test/mypolicy oppure esplicitamente: appletviewer -J-Djava.security.policy=mypolicy http://java.sun.com/docs/books/tutorial/security1.2/tour1/ example-1dot2/writefile.html Ora il file verra scritto correttamente dall applet! R.Focardi Laboratorio di Ingegneria del Software 6. 35 Page 18