Rappels programma,on réseau Java- suite. C. Delporte M2- Internet Rappel Java 1



Similar documents
Socket UDP. H. Fauconnier 1-1. M2-Internet Java

TP1 : Correction. Rappels : Stream, Thread et Socket TCP

Socket Programming in Java

CISC 4700 L01 Network & Client- Server Programming Spring Harold, Chapter 8: Sockets for Clients

NETWORK PROGRAMMING IN JAVA USING SOCKETS

Creating a Simple, Multithreaded Chat System with Java

Network Communication

Transport layer protocols. Message destination: Socket +Port. Asynchronous vs. Synchronous. Operations of Request-Reply. Sockets

SSC - Communication and Networking Java Socket Programming (II)

Java Programming: Sockets in Java

Socket-based Network Communication in J2SE and J2ME

Lesson: All About Sockets

Division of Informatics, University of Edinburgh

Network Programming using sockets

Data Communication & Networks G

Network-based Applications. Pavani Diwanji David Brown JavaSoft

ExempleRMI.java. // Fichier de defintion des droits et proprietes // System.setProperty("java.security.policy","../server.java.

Abhijit A. Sawant, Dr. B. B. Meshram Department of Computer Technology, Veermata Jijabai Technological Institute

Socket Programming. A er learning the contents of this chapter, the reader will be able to:

The difference between TCP/IP, UDP/IP and Multicast sockets. How servers and clients communicate over sockets

Socket Programming. Announcement. Lectures moved to

Langages Orientés Objet Java

Accessing PostgreSQL through JDBC via a Java SSL tunnel

Liste d'adresses URL

Socket programming. Socket Programming. Languages and Platforms. Sockets. Rohan Murty Hitesh Ballani. Last Modified: 2/8/2004 8:30:45 AM

Java Network. Slides prepared by : Farzana Rahman

CHAPTER 6. Transmission Control Protocol. 6.1 Overview

Abstract Stream Socket Service

DNS: Domain Names. DNS: Domain Name System. DNS: Root name servers. DNS name servers

Application Development with TCP/IP. Brian S. Mitchell Drexel University

Remote Method Invocation

Network/Socket Programming in Java. Rajkumar Buyya

TP N 10 : Gestion des fichiers Langage JAVA

Licence Informatique Année Exceptions

Brazil + JDBC Juin 2001, douin@cnam.fr

Question1-part2 What undesirable consequences might there be in having too long a DNS cache entry lifetime?

Sockets. Programação de Sockets em Java. Socket Abstractions. Camada de Transporte

Learning Outcomes. Networking. Sockets. TCP/IP Networks. Hostnames and DNS TCP/IP

CRYPTOGRAPHY 456 ANDROID SECURE FILE TRANSFER W/ SSL

Java Network Programming. The java.net package contains the Socket class. This class speaks TCP (connection-oriented protocol).

Introduction to Java. Module 12: Networking (Java Sockets) Prepared by Costantinos Costa for EPL 233. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

13 File Output and Input

Capario B2B EDI Transaction Connection. Technical Specification for B2B Clients

NAT & Secure Sockets SSL/ TLS. ICW: Lecture 6 Tom Chothia

Mail User Agent Project

Note concernant votre accord de souscription au service «Trusted Certificate Service» (TCS)

Advanced Network Programming Lab using Java. Angelos Stavrou

POB-JAVA Documentation

Brest. Backup : copy flash:ppe_brest1 running-config

Application Note 704 Asynchronous Serial-to-Ethernet Device Servers

Transport Layer Services Mul9plexing/Demul9plexing. Transport Layer Services

Preface. Intended Audience

Assignment 4 Solutions

Building a Multi-Threaded Web Server

Personnalisez votre intérieur avec les revêtements imprimés ALYOS design

Introduction. GEAL Bibliothèque Java pour écrire des algorithmes évolutionnaires. Objectifs. Simplicité Evolution et coévolution Parallélisme

IPv6 Workshop: Location Date Security Trainer Name

Communicating with a Barco projector over network. Technical note

String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.

Tanenbaum, Computer Networks (extraits) Adaptation par J.Bétréma. DNS The Domain Name System

!"# $ %!&' # &! ())*!$

JAVA Program For Processing SMS Messages

Java Management Extensions SNMP Manager API

RLC/MAC Uplink Transfer

A Tutorial on Socket Programming in Java

Annexe - OAuth Introduction. Xavier de Rochefort xderoche@labri.fr - labri.fr/~xderoche 15 mai 2014

An Android-based Instant Message Application

TP : Configuration de routeurs CISCO

Chapter 11. User Datagram Protocol (UDP)

Java SSL - sslecho SSL socket communication with client certificate

Interfaces de programmation pour les composants de la solution LiveCycle ES (juillet 2008)

Memory Eye SSTIC Yoann Guillot. Sogeti / ESEC R&D yoann.guillot(at)sogeti.com

Introduction ToIP/Asterisk Quelques applications Trixbox/FOP Autres distributions Conclusion. Asterisk et la ToIP. Projet tuteuré

Start Here. Installation and Documentation Reference. Sun StorEdgeTM 6120 Array

8. Java Network Programming

Sun Enterprise Optional Power Sequencer Installation Guide


Corso di Reti di Calcolatori. java.net.inetaddress

Bluetooth Low Energy

How To Write A Program In Java (Programming) On A Microsoft Macbook Or Ipad (For Pc) Or Ipa (For Mac) (For Microsoft) (Programmer) (Or Mac) Or Macbook (For

ATP Co C pyr y ight 2013 B l B ue C o C at S y S s y tems I nc. All R i R ghts R e R serve v d. 1

Introduction Les failles les plus courantes Les injections SQL. Failles Web. Maxime Arthaud. net7. Jeudi 03 avril 2014.

Enterprise Informa/on Modeling: An Integrated Way to Track and Measure Asset Performance

AgroMarketDay. Research Application Summary pp: Abstract

! "# $%&'( ) * ).) "%&' 1* ( %&' ! "%&'2 (! ""$ 1! ""3($

CS255 Programming Project 2

Solaris Bandwidth Manager

Qu est-ce que le Cloud? Quels sont ses points forts? Pourquoi l'adopter? Hugues De Pra Data Center Lead Cisco Belgium & Luxemburg

Introduction au BIM. ESEB Seyssinet-Pariset Economie de la construction contact@eseb.fr

CASifier une application

BILL C-665 PROJET DE LOI C-665 C-665 C-665 HOUSE OF COMMONS OF CANADA CHAMBRE DES COMMUNES DU CANADA

Les fragments. Programmation Mobile Android Master CCI. Une application avec deux fragments. Premier layout : le formulaire

Installation troubleshooting guide

Transcription:

Rappels programma,on réseau Java- suite C. Delporte M2- Internet Rappel Java 1

Socket programming Two socket types for two transport services: UDP: unreliable datagram TCP: reliable, byte stream-oriented C. Delporte M2-Internet Rappel Java 2-2

Socket UDP Socket SSL C. Delporte M2- Internet Rappel Java 3

Classes java.net.datagrampacket java.net.datagramsocket java.net.mul1castsocket java.net.serversocket javax.net.ssl.sslserversocket java.net.socket javax.net.ssl.sslsocket C. Delporte M2- Internet Rappel Java 4

Socket UDP C. Delporte M2-Internet Rappel Java 1-5

UDP C. Delporte M2-Internet Rappel Java 6

DatagramPacket q Un paquet contient au plus 65,507 bytes q Pour construire les paquets v public DatagramPacket(byte[] buffer, int length) v public DatagramPacket(byte[] buffer, int offset, int length) q Pour construire et envoyer v public DatagramPacket(byte[] data, int length, InetAddress destination, int port) v public DatagramPacket(byte[] data, int offset, int length, InetAddress destination, int port) v public DatagramPacket(byte[] data, int length, SocketAddress destination, int port) v public DatagramPacket(byte[] data, int offset, int length, SocketAddress destination, int port) C. Delporte M2-Internet Rappel Java 7

Exemple String s = "On essaie "; byte[] data = s.getbytes("ascii"); try { InetAddress ia = InetAddress.getByName("www.liafa.univ-parisdiderot.fr"); int port = 7;// existe-t-il? DatagramPacket dp = new DatagramPacket(data, data.length, ia, port); catch (IOException ex) C. Delporte M2-Internet Rappel Java 8

Méthodes q Adresses v public InetAddress getaddress( ) v public int getport( ) v public SocketAddress getsocketaddress( ) v public void setaddress(inetaddress remote) v public void setport(int port) v public void setaddress(socketaddress remote) C. Delporte M2-Internet Rappel Java 9

Méthodes (suite) q Manipulation des données: v public byte[] getdata( ) v public int getlength( ) v public int getoffset( ) v public void setdata(byte[] data) v public void setdata(byte[] data, int offset, int length ) v public void setlength(int length) C. Delporte M2-Internet Rappel Java 10

Exemple import java.net.*; public class DatagramExample { public static void main(string[] args) { String s = "Essayons."; byte[] data = s.getbytes( ); try { InetAddress ia = InetAddress.getByName("www.liafa.univ-parisdiderot.fr"); int port =7; DatagramPacket dp = new DatagramPacket(data, data.length, ia, port); System.out.println(" Un packet pour" + dp.getaddress( ) + " port " + dp.getport( )); System.out.println("il y a " + dp.getlength( ) + " bytes dans le packet"); System.out.println( new String(dp.getData( ), dp.getoffset( ), dp.getlength( ))); catch (UnknownHostException e) { System.err.println(e); C. Delporte M2-Internet Rappel Java 11

DatagramSocket q Constructeurs v public DatagramSocket( ) throws SocketException v public DatagramSocket(int port) throws SocketException v public DatagramSocket(int port, InetAddress interface) throws SocketException v public DatagramSocket(SocketAddress interface) throws SocketException v (protected DatagramSocket(DatagramSocketImpl impl) throws SocketException) C. Delporte M2-Internet Rappel Java 12

Exemple java.net.*; public class UDPPortScanner { public static void main(string[] args) { for (int port = 1024; port <= 65535; port++) { try { // exception si utilisé DatagramSocket server = new DatagramSocket(port); server.close( ); catch (SocketException ex) { System.out.println("Port occupé" + port + "."); // end try // end for C. Delporte M2-Internet Rappel Java 13

Envoyer et recevoir q public void send(datagrampacket dp) throws IOException q public void receive(datagrampacket dp) throws IOException C. Delporte M2-Internet Rappel Java 14

Un exemple: Echo q UDPServeur v UDPEchoServeur q UDPEchoClient SenderThread ReceiverThread C. Delporte M2-Internet Rappel Java 15

Echo: UDPServeur import java.net.*; import java.io.*; public abstract class UDPServeur extends Thread { private int buffersize; protected DatagramSocket sock; public UDPServeur(int port, int buffersize) throws SocketException { this.buffersize = buffersize; this.sock = new DatagramSocket(port); public UDPServeur(int port) throws SocketException { this(port, 8192); public void run() { byte[] buffer = new byte[buffersize]; while (true) { DatagramPacket incoming = new DatagramPacket(buffer, buffer.length); try { sock.receive(incoming); this.respond(incoming); catch (IOException e) { System.err.println(e); // end while public abstract void respond(datagrampacket request); C. Delporte M2-Internet Rappel Java 16

UDPEchoServeur public class UDPEchoServeur extends UDPServeur { public final static int DEFAULT_PORT = 2222; public UDPEchoServeur() throws SocketException { super(default_port); public void respond(datagrampacket packet) { try { byte[] data = new byte[packet.getlength()]; System.arraycopy(packet.getData(), 0, data, 0, packet.getlength()); try { String s = new String(data, "8859_1"); System.out.println(packet.getAddress() + " port " + packet.getport() + " reçu " + s); catch (java.io.unsupportedencodingexception ex) { DatagramPacket outgoing = new DatagramPacket(packet.getData(), packet.getlength(), packet.getaddress(), packet.getport()); sock.send(outgoing); catch (IOException ex) { System.err.println(ex); C. Delporte M2-Internet Rappel Java 17

Client: UDPEchoClient public class UDPEchoClient { public static void lancer(string hostname, int port) { try { InetAddress ia = InetAddress.getByName(hostname); SenderThread sender = new SenderThread(ia, port); sender.start(); Thread receiver = new ReceiverThread(sender.getSocket()); receiver.start(); catch (UnknownHostException ex) { System.err.println(ex); catch (SocketException ex) { System.err.println(ex); // end lancer C. Delporte M2-Internet Rappel Java 18

ReceiverThread class ReceiverThread extends Thread { DatagramSocket socket; private boolean stopped = false; public ReceiverThread(DatagramSocket ds) throws SocketException { this.socket = ds; public void halt() { this.stopped = true; public DatagramSocket getsocket(){ return socket; public void run() { byte[] buffer = new byte[65507]; while (true) { if (stopped) return; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); try { socket.receive(dp); String s = new String(dp.getData(), 0, dp.getlength()); System.out.println(s); Thread.yield(); catch (IOException ex) {System.err.println(ex); C. Delporte M2-Internet Rappel Java 19

SenderThread public class SenderThread extends Thread { private InetAddress server; private DatagramSocket socket; private boolean stopped = false; private int port; public SenderThread(InetAddress address, int port) throws SocketException { this.server = address; this.port = port; this.socket = new DatagramSocket(); this.socket.connect(server, port); public void halt() { this.stopped = true; // C. Delporte M2-Internet Rappel Java 20

SenderThread // public DatagramSocket getsocket() { return this.socket; public void run() { try { BufferedReader userinput = new BufferedReader(new InputStreamReader(System.in)); while (true) { if (stopped) return; String theline = userinput.readline(); if (theline.equals(".")) break; byte[] data = theline.getbytes(); DatagramPacket output = new DatagramPacket(data, data.length, server, port); socket.send(output); Thread.yield(); // end try catch (IOException ex) {System.err.println(ex); // end run C. Delporte M2-Internet Rappel Java 21

Autres méthodes q public void close( ) q public int getlocalport( ) q public InetAddress getlocaladdress( ) q public SocketAddress getlocalsocketaddress( ) q public void connect(inetaddress host, int port) q public void disconnect( ) q public int getport( ) q public InetAddress getinetaddress( ) q public InetAddress getremotesocketaddress( ) C. Delporte M2-Internet Rappel Java 22

Options q SO_TIMEOUT v public synchronized void setsotimeout(int timeout) throws SocketException v public synchronized int getsotimeout( ) throws IOException q SO_RCVBUF v public void setreceivebuffersize(int size) throws SocketException v public int getreceivebuffersize( ) throws SocketException q SO_SNDBUF v public void setsendbuffersize(int size) throws SocketException v int getsendbuffersize( ) throws SocketException q SO_REUSEADDR (plusieurs sockets sur la même adresse) v public void setreuseaddress(boolean on) throws SocketException v boolean getreuseaddress( ) throws SocketException q SO_BROADCAST v public void setbroadcast(boolean on) throws SocketException v public boolean getbroadcast( ) throws SocketException C. Delporte M2-Internet Rappel Java 23

Multicast socket (UDP) C. Delporte M2-Internet Rappel Java 1-24

public class Mul1castSocket extends DatagramSocket Constructeur: Mul,castSocket() Mul,castSocket(int port) C. Delporte M2- Internet Rappel Java 25

Groupe formé sur une adresse IP de classe D Classe D: entre 224.0.0.0 et 255.255.255.255) Adresse 224.0.0.0 réservée Méthodes ges,on groupe void joingroup(inetaddress mcastaddr) void leavegroup(inetaddress mcastaddr) C. Delporte M2- Internet Rappel Java 26

Exemple InetAddress mul,castaddress ; // Une adresse IP speciale Mul,castSocket socket ; /* crea,on: */ socket = new Mul,castSocket (port) ; /* Adresse IP mul,cast pour envoyer dans le reseau local : */ mul,castaddress = InetAddress.getByName ("230.1.1.66") ; /* Indiquer qu'on veut recevoir les paquets a des,na,on de ce]e adresse de groupe : */ socket.joingroup (mul,castaddress) ; C. Delporte M2-Internet Rappel Java 1-2

Exemple ( suite) ByteBuffer b = ByteBuffer.allocate(1400) ; String msg = "envoi" ; b.put (msg.getbytes()) ; b.flip () ; /* limit devient la posi,on courante et posi,on est mis a 0 */ /* Le paquet : Une adresse IP, un port et des octets... */ DatagramPacket datagram = new DatagramPacket (b.array(), b.limit()) ; SocketAddress dest = new InetSocketAddress (mul,castaddress, port) ; datagram.setsocketaddress (dest) ; try { socket.send (datagram) ; catch (IOExcep,on e) { System.err.println (e) ; C. Delporte M2-Internet Rappel Java 1-2

Secure Socket Layer (SSLSocket) Package javax.net.ssl.*; C. Delporte M2-Internet Rappel Java 1-29

public abstract class SSLSocket extends Socket Stream sockets Fournit des services de sécurité: Authen,fica,on : le serveur est authen,fié, le client peut l être Confiden,alité: le message transmis est encrypté Intégrité: le message n est pas altéré C. Delporte M2- Internet Rappel Java 30

q Ces protections sont specifiées dans une «cypher suite» q Mécanisme de poignée de mains(handshake)pour se mettre d accord sur le chiffrage utilisé ( si pas de chiffrage commun pas de données échangées). Le but de ce processus est d établir une session C. Delporte M2-Internet Rappel Java 1-31

q Initiation du handshake: v StartHandshake() v Tout read ou write v getsession() q Mais pas à la création de la socket : permet de choisir une «cypher suite» autre que le défaut C. Delporte M2-Internet Rappel Java 1-3

U,lise un système : de cryptographie asymétrique ( type RSA) pour l authen,fica,on et l obten,on de clef de cryptage symétrique de cryptographie symétrique ( type DES) pour la communica,on C. Delporte M2- Internet Rappel Java 33

Coté serveur Une paire de clefs cryptographique (clef public, clef privée) Ces clefs sont stockées dans un «magasin» ( keystore) dans une structure de données protégée par un mot de passe keytool est un ou,l de ges,on de cer,ficats et de clefs C. Delporte M2- Internet Rappel Java 34

Coté client Il faut un «magasin» de clef en qui on a confiance ( truststore) contenant le cer,ficat correspondant à la clef public du serveur keytool permet d extraire le cer,ficat du magasin serveur et de l importer dans le magasin du client C. Delporte M2- Internet Rappel Java 35

Cer,ficat Coté serveur: Créa,on d une clef privée/public pour le serveur keytool - genkey - keystore server.jks - alias server - keyalg RSA (demande un mot de passe et autres infos) Extrac,on de la clef public keytool - export - keystore server.jks - alias server - file server.crt C. Delporte M2- Internet Rappel Java 36

Cer,ficat Cote client ( qui dispose de server.crt) keytool - import - alias server - file server.crt - keystore client.jsk C. Delporte M2- Internet Rappel Java 37

Coté serveur System.setProperty("javax.net.ssl.keyStore", "server.jsk"); System.setProperty("javax.net.ssl.keyStorePassword ", "123456"); (123456 mot de passe) Ou java -Djavax.net.ssl.keyStore=server.jsk - Djavax.net.ssl.keyStorePassword=123456 SecureServer C. Delporte M2-Internet Rappel Java 1-3

Coté client System.setProperty("javax.net.ssl.trustStore", "client.jsk"); System.setProperty("javax.net.ssl.trustStorePasswo rd", "123456"); ( 123456 mot de passe) Ou java -Djavax.net.ssl.trustStore=client.jsk -Djavax.net.ssl.trustStorePassword=123456 SecureClient C. Delporte M2-Internet Rappel Java 1-3

1. Client Hello à 2. ß Serveur Hello 3. ß Cer,ficate 4. ß 5. ß Server Hello done C. Delporte M2- Internet Rappel Java 40

1. Client Key exchange à 2.. à 3. Finished à 4. Encrypted Data ß à 5. Close Messages ß à C. Delporte M2- Internet Rappel Java 41

Création socket q Coté serveur SSLServerSocketFactory socketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); SSLServerSocket serversocket = (SSLServerSocket) socketfactory.createserversocket(port); q Coté Client SSLSocketFactory socketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket)socketFactory.createSocket(site, port); C. Delporte M2-Internet Rappel Java 1-4

SecureClient.java (echo) import java.io.*; import javax.net.ssl.*; class SecureClient { public static void main(string args[]) { System.setProperty("javax.net.ssl.trustStore", "moncertif"); System.setProperty("javax.net.ssl.trustStorePassword", "123456"); try { SSLSocketFactory socketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket) socketfactory.createsocket("localhost", 1664); PrintWriter output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); String camarche = "ca marche! "; output.println(camarche); output.flush(); BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); String response = input.readline(); System.out.println(response); output.close(); input.close(); socket.close(); catch (IOException ioexception) {System.out.println(" SecureClient IOException "); finally {System.exit(0); C. Delporte M2-Internet Rappel Java 1-4

SecureServer.java import java.io.*; import javax.net.ssl.*; class SecureServer { private SSLServerSocket serversocket; public SecureServer() throws Exception { System.setProperty("javax.net.ssl.keyStore", "server.jsk"); System.setProperty("javax.net.ssl.keyStorePassword", "123456"); SSLServerSocketFactory socketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); serversocket = (SSLServerSocket) socketfactory.createserversocket(1664); C. Delporte M2-Internet Rappel Java 1-4

SecureServer.java private void runserver() { while (true) { try { System.err.println(" Waiting for connection "); SSLSocket socket = (SSLSocket) serversocket.accept(); BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); String a=input.readline(); System.out.println("le serveur a eu "+a); output.println(" C est bon, " + a); output.close(); input.close(); socket.close(); catch (IOException ioexception) { public static void main(string args[]) throws Exception { System.err.println(" main for connection "); SecureServer server = new SecureServer(); server.runserver(); ; C. Delporte M2-Internet Rappel Java 1-4