Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1
Datagrammi Le applicazioni che comunicano tramite socket possiedono un canale di comunicazione dedicato. Per comunicare, un client ed un server stabiliscono una connessione, trasmettono dati, quindi chiudono la connessione. Tutti i dati inviati sul canale sono ricevuti nello stesso ordine in cui sono stati inviati. Le applicazioni che comunicano tramite datagrammi inviano e ricevono pacchetti di informazione completamente indipendenti tra loro. Queste applicazioni non dispongono e non necessitano di un canale di comunicazione punto-a-punto. La consegna dei datagrammi alla loro destinazione non è garantita, e neppure l ordine del loro arrivo. Il package java.net fornisce tre classi che consentono di scrivere applicazioni che usano datagrammi per inviare e ricevere pacchetti sulla rete: DatagramSocket, DatagramPacket e MulticastSocket. Una applicazione può inviare e ricevere DatagramPacket tramite un DatagramSocket. Inoltre, i DatagramPacket possono essere inviati in broadcast a più destinatari che sono in ascolto su un MulticastSocket. NOTA: MulticastSocket estende DatagramSocket 2
java.net.datagramsocket DatagramSocket (int port) Crea un DatagramSocket e lo collega alla porta specificata sulla macchina locale. void receive (DatagramPacket p) Riceve un DatagramPacket da questo socket. void send (DatagramPacket p) Invia un DatagramPacket su questo socket. void close () Chiude questo DatagramSocket. 3
java.net.datagrampacket DatagramPacket (byte[] buf, int length) Crea un DatagramPacket per ricevere pacchetti di lunghezza length. DatagramPacket (byte[] buf, int length, InetAddress address, int port) Crea un DatagramPacket per inviare pacchetti di lunghezza length all host ed alla porta specificati. InetAddress getaddress () Restituisce l indirizzo IP della macchina alla quale questo DatagramPacket deve essere inviato o da cui è stato ricevuto. int getport () Restituisce la porta della macchina alla quale questo DatagramPacket deve essere inviato o da cui è stato ricevuto. 4
TimeServer (1) import java.io.*; import java.net.*; import java.util.*; public class TimeServer { public static void main(string[] args) { DatagramSocket socket = null; try { socket = new DatagramSocket(3575); int n = 1; while (n <= 10) { byte[] buf = new byte[256]; // riceve la richiesta DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); // produce la risposta String dstring = new Date().toString(); buf = dstring.getbytes(); 5
TimeServer (2) // invia la risposta al client InetAddress address = packet.getaddress(); int port = packet.getport(); packet = new DatagramPacket(buf, buf.length, address, port); socket.send(packet); n++; socket.close(); catch (IOException e) { e.printstacktrace(); socket.close(); 6
TimeClient (1) import java.io.*; import java.net.*; import java.util.*; public class TimeClient { public static void main(string[] args) throws IOException { String hostname = "localhost"; DatagramSocket socket = new DatagramSocket(); // invia la richiesta byte[] buf = new byte[256]; InetAddress address = InetAddress.getByName(hostname); DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 3575); socket.send(packet); 7
TimeClient (2) // riceve la risposta packet = new DatagramPacket(buf, buf.length); socket.receive(packet); // visualizza la risposta String received = new String(packet.getData()); System.out.println("Response: " + received); socket.close(); 8
java.net.multicastsocket MulticastSocket (int port) Crea un MulticastSocket e lo collega alla porta specificata sulla macchina locale. void joingroup (InetAddress mcastaddr) Si collega ad un multicast group. void leavegroup (InetAddress mcastaddr) Abbandona un multicast group. void receive (DatagramPacket p) Riceve un DatagramPacket da questo socket. void send (DatagramPacket p) Riceve un DatagramPacket da questo socket. void close () Chiude questo MulticastSocket. 9
MulticastTimeServer (1) import java.io.*; import java.net.*; import java.util.*; public class MulticastTimeServer { public static void main(string[] args) { MulticastSocket socket = null; try { socket = new MulticastSocket(3575); int n = 1; while (n <= 100) { byte[] buf = new byte[256]; // non aspetta la richiesta String dstring = new Date().toString(); buf = dstring.getbytes(); 10
MulticastTimeServer (2) // invia il messaggio in broadcast InetAddress group = InetAddress.getByName("230.0.0.1"); DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 3575); socket.send(packet); System.out.println ("Broadcasting: "+dstring); Thread.sleep(1000); n++; socket.close(); catch (Exception e) { e.printstacktrace(); socket.close(); 11
MulticastTimeClient import java.io.*; import java.net.*; import java.util.*; public class MulticastTimeClient { public static void main(string[] args) throws IOException { MulticastSocket socket = new MulticastSocket(3575); InetAddress group = InetAddress.getByName("230.0.0.1"); socket.joingroup(group); DatagramPacket packet; for (int i = 0; i < 100; i++) { byte[] buf = new byte[256]; packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String received = new String(packet.getData()); System.out.println("Time: " + received); socket.leavegroup(group); socket.close(); 12
ping (1) Invia una successione di pacchetti all'host specificato, per verificare l'integrità e la qualità della connessione. Sintassi Windows: ping [-t] [-n conteggio] [-w timeout] hostname Opzioni: -t Effettua un ping sull'host specificato finché non viene interrotto. Per interrompere digitare Ctrl-C. -n conteggio Numero di richieste di eco da inviare. -w timeout Timeout in millisecondi per ogni risposta. 13
ping (2) C:\>ping java.sun.com Esecuzione di Ping java.sun.com [192.18.97.71] con 32 byte di dati: Risposta da 192.18.97.71: byte=32 durata=210ms TTL=241 Risposta da 192.18.97.71: byte=32 durata=201ms TTL=241 Risposta da 192.18.97.71: byte=32 durata=200ms TTL=241 Risposta da 192.18.97.71: byte=32 durata=201ms TTL=241 Statistiche Ping per 192.18.97.71: Pacchetti: Trasmessi = 4, Ricevuti = 4, Persi = 0 (0% persi), Tempo approssimativo percorsi andata/ritorno in millisecondi: Minimo = 200ms, Massimo = 210ms, Medio = 203ms 14
host (1) Effettua la risoluzione (diretta ed inversa) dell host specificato Sintassi Linux (non disponibile sotto Windows): host hostname [server] Opzioni: server è il nome del server DNS da utilizzare (se non specificato usa il DNS di default) 15
host (2) # host java.sun.com java.sun.com. has address 192.18.97.71 # host www.deis.unical.it www.deis.unical.it. is an alias for haldo.deis.unical.it. haldo.deis.unical.it. has address 160.97.27.7 # host 192.18.97.71 71.97.18.192.in-addr.arpa. domain name pointer flres.java.sun.com. 16
nslookup Effettua la risoluzione (diretta ed inversa) dell host specificato. C:\>nslookup java.sun.com Server: dns.isi.cs.cnr.it Address: 194.119.198.151 Nome: java.sun.com Address: 192.18.97.71 C:\>nslookup 192.18.97.71 Server: dns.isi.cs.cnr.it Address: 194.119.198.151 Nome: flres.java.sun.com Address: 192.18.97.71 17
traceroute (1) Mostra tutti i router che un pacchetto attraversa per raggiungere l host di destinazione Sintassi Windows: tracert [-d] [-h max_salti] [-w timeout] hostname Opzioni: -d Non risolve gli indirizzi in nome host. -h max_salti Numero massimo di punti di passaggio per ricercare la destinazione. -w timeout Timeout in millisecondi per ogni risposta. 18
traceroute (2) C:\>tracert java.sun.com Rilevazione instradamento verso java.sun.com [192.18.97.71] su un massimo di 30 punti di passaggio: 1 <10 ms <10 ms <10 ms 194.119.198.129 2 <10 ms 30 ms 10 ms 10.0.0.134 3 40 ms 30 ms 40 ms rc-cnrcs.na.garr.net [193.206.130.125] 4 20 ms 60 ms 60 ms rt-rc-1.na.garr.net [193.206.134.169] 5 30 ms 30 ms 40 ms mi-na.garr.net [193.206.134.9] 6 40 ms 41 ms 30 ms rtg-rt.mi.garr.net [193.206.134.206] 7 30 ms 40 ms 40 ms rm-mi-g.garr.net [193.206.134.14] 8 40 ms 50 ms 40 ms mno-vcn-i1-pos0-2.telia.net [213.248.79.125] 12 190 ms 190 ms 211 ms nyk-bb1-pos1-0-0.telia.net [213.248.80.13] 13 200 ms 190 ms 201 ms sl-gw9-nyc-7-2.sprintlink.net [144.232.169.61] 18 230 ms 231 ms 220 ms sl-gw14-che-8-0.sprintlink.net [144.232.15.162] 19 220 ms 211 ms 210 ms sl-internap-26-0-0.sprintlink.net [160.81.54.46] 20 230 ms 220 ms 211 ms border3.ge3-0-bbnet2.den.pnap.net [216.52.40.71] 21 201 ms 210 ms 220 ms sun-1.border3.den.pnap.net [216.52.42.42] 22 210 ms 211 ms 220 ms flres.java.sun.com [192.18.97.71] Rilevazione completata. 19
netstat Visualizza statistiche su protocollo e connessioni di rete TCP/IP Sintassi: netstat [-a] Opzioni: -a Visualizza tutte le connessioni e le porte di ascolto C:\>netstat Connessioni attive Proto Indirizzo locale Indirizzo remoto Stato TCP host1:22 host2 ESTABLISHED TCP host1:1408 host3 TIME_WAIT 20