Tout ce que vous avez toujours voulu savoir sur le Web...

Il existe tout un ensemble de confusions qui sont faites sur Internet, le Web, HTML, etc... Le but de ce document est donc de tenter d'éclaircir un paysage souvent confus... Bien entendu, il est impossible de ne pas faire certaines simplifications. J'ai cependant essayé de rester aussi proche que possible de la réalité en tentant de ne pas être trop technique. Ce document est un extrait du cours que je fais chaque année à l'ENAC.

Le réseau Internet

Le réseau Internet repose sur le protocole dit IP, ou Internet Protocol. Ce protocole est relativement ancien, puisqu'il remonte dans sa première définition à 1980 (rfc760), avec de nombreuses modifications et mises à jour ( rfc1123 par exemple). Chaque machine sur le réseau Internet dispose d'une adresse logique qui l'identifie de façon unique au niveau mondial (en principe, en tous cas). L'adresse de la machine sur laquelle vous lisez ce document est par exemple 195.220.158.66. C'est cette adresse qui est placée dans les trames des paquets IP qui voyagent sur le réseau. Les routeurs, qui sont des machines spécialisées disposées aux noeuds du réseau, savent en fonction de l'adresse où il faut envoyer le paquet. De la même façon, chaque machine possède des tables de routage qui lui indiquent en fonction de l'adresse de chaque paquet à quel routeur elle doit l'envoyer. Sur un réseau local, il existe en général un routeur unique qui sert d'interface avec le reste du monde.

Il existe un deuxième type d'adresse, la notation par domaine, qui est celle que la plupart des gens connaissent à travers les spots publicitaires à la télévision. Ainsi, si nous reprenons l'exemple de la machine sur laquelle vous lisez ce document, son adresse par domaine est www.recherche.enac.fr. Cette notation pointée doit toujours être lue à l'envers. Ainsi, cette machine appartient au domaine France(fr), qui contient le domaine de l'ENAC(enac), qui contient lui même le domaine de la recherche(recherche), qui contient lui même une machine nommée www.
Les noms des "sur-domaines" (comme fr) sont historiques. Les américains étant les premiers utilisateurs de l'Internet, ils se sont historiquement réservés un certain nombre de "sur-domaines" qui étaient com (pour les entreprises), edu (pour les universités), mil (pour les institutions militaires), etc... Certains de ces sur-domaines sont devenus internationaux (il existe des entreprises françaises dans le domaine com), d'autres sont restés strictement américains. Les noms de domaines ont longtemps été vendus par une organisation américaine (Internic). La règle étant "premier arrivé, premier servi", et le prix de l'achat d'un nom de domaine étant particulièrement peu élevé (quelques centaines de francs), certains individus achètent volontairement des domaines dans la zone .com portant le nom d'entreprises célèbres qui ont commis l'erreur de ne pas arriver sur le net en temps et en heure. Ces entreprises n'ont plus alors qu'à racheter ces noms au prix fort cette fois-ci. En France, l'attribution d'un nom de domaine dans .fr est plus réglementé.
La traduction de cette notation par domaine dans la notation classique est faite par des programmes nommés DNS, ou Domain Name Server. Lorsqu'une machine souhaite en contacter une autre, elle contacte son DNS local : il y a un DNS par domaine. Ainsi, à l'ENAC, il y a un DNS pour le domaine de la recherche, un pour le domaine enseignement, etc... Ces DNS ne possèdent que les informations relatives à leur domaine. Ils sont donc incapables de fournir une information dès qu'on leur demande de contacter une machine qui ne se trouve pas dans celui-ci. On utilise alors un mécanisme de transfert de la demande : le DNS local contacte le DNS de niveau supérieur, qui lui même va contacter le DNS de niveau supérieur etc...
Si, par exemple, je souhaite contacter depuis la machine rouge.recherche.enac.fr la machine prep.ai.mit.edu (machine du domaine universitaire américain, situé au MIT, dans le département AI, de nom prep), le mécanisme va être le suivant (dans le principe) :

Il existe heureusement quelques mécanismes accélérateurs... Il existe aussi des cas particuliers, dont un particulièrement fréquent, celui des providers de services internet.
Lorsque vous vous connectez au réseau internet à travers votre modem et votre provider de service, il vous est affecté une adresse IP de façon dynamique . Au moment de la connexion, le serveur de votre provider fournit à votre machine une adresse IP (en général le protocole de negociation et de connexion est PPP (Point to Point Protocol). Cette adresse change à chaque connexion, mais reste constante durant toute une session. Elle est alors connue sur tout l'Internet par cette adresse IP, et ce durant toute la durée de la session. Ce mécanisme permet au provider de service d'utiliser un "pool" plus réduit d'adresses que s'il devait affecter de façon permanente une adresse à chaque abonné. Là, une adresse n'est utilisée que pendant la durée d'une connexion (c'est le contraire des adresses "physiques" MAC des cartes ethernet qui sont elles permanentes, voir paragraphe suivant). Une des raisons de l'emploi de cette technique est le petit nombre d'adresses Internet disponibles dans le protocole IP actuellement utilisée (IPv4).

Il ne faut en aucun cas confondre le protocole IP avec les protocoles "physiques" qui sont destinés à assurer son transport sur les réseaux. Ainsi, si les machines du réseau local sont reliées entre elles par un réseau éthernet ( attention internet <> éthernet ! ), ce qui est le cas de beaucoup de réseaux de PC dans les entreprises, cela signifie que les trames "logiques" IP seront "encapsulées" dans les trames "physiques" éthernet qui vont transiter d'une carte éthernet de PC à une autre carte éthernet de PC (les mots logiques et physiques étant à prendre avec de sérieux guillemets, une définition correcte reviendrait à reprendre la classification du modèle OSI). Mais les trames IP pourraient aussi bien, par exemple, transiter sur un réseau Token Ring, ou plus simplement sur une ligne téléphonique puis à travers votre modem, encapsulées dans le protocole PPP. De la même façon, il ne faut pas confondre les adresses MAC, qui sont les adresses éthernet des cartes éthernet, avec les adresses internet. L'adresse MAC est gravée (en principe) dans la carte par le fabriquant, l'adresse Internet est attribuée logiciellement à la machine. Ethernet est un des protocoles de transport d'internet, il n'a rien d'autre à voir avec lui.

Les services et les protocoles

Les trames IP qui transitent se subdivisent en deux grandes catégories : les trames de type udp (User Datagram Protocol) et les trames de type tcp (Transfer Control Protocol). Nous ne parlerons que des trames de type tcp.

Une transmission de type tcp est une transmission point à point ; un canal de communication est ouvert entre deux machines qui décident de discuter entre elles. Mais les machines doivent d'abord décider de quoi elles vont parler et dans quel langage : c'est la notion de service et de protocole.
Il existe de nombreux (très nombreux) services/protocoles disponibles sur internet. Les deux plus connus des profanes sont ftp (File Transfer Protocol) et http (HyperText Transfer Protocol). Supposons par exemple que notre machine rouge.recherche.enac.fr souhaite récupérer le fichier toto.txt sur la machine prep.ai.mit.edu par le protocole ftp. Elle va d'abord utiliser le Domain Name Server comme décrit au dessus pour obtenir l'adresse de prep.ai.mit.edu . Elle enverra ensuite un paquet IP à cette machine en indiquant un numéro de port qui correspond au type du service demandé. Ainsi, pour ftp, la trame du paquet tcp/ip contiendra l'adresse de port 21, qui est l'adresse du service ftp.
Sur la machine prep.ai.mit.edu , le paquet va être reçu, la trame va être décodée par le système d'exploitation, et aiguillée en fonction du numéro de port. Pour que la machine prep puisse répondre à la requête, un programme doit être déjà lancé sur prep et doit être attaché au port 21 de cette machine. Une autre alternative est parfois employée : le système d'exploitation lorsqu'un paquet arrive pour le port 21, va lancer un programme particulier pour le traiter. Ces programmes spéciaux qui s'attachent aux ports sont appelés en général des serveurs , puisqu'ils répondent à des requêtes de service, ou des démons , parce qu'ils jaillissent de leur boite quand on a besoin d'eux (enfin pas tout à fait... Démons vient de l'anglais daemons, qui est l'acronyme de Disk And Execution Monitor, mais l'acronyme n'a pas été choisi au hasard). Le programme qui fait la requête est quant à lui connu sous le nom de client.

Il existe une façon de désigner simplement et l'adresse et le service : c'est l'URL (rfc1808) (Uniform Resource Locator). L'URL sera de la forme ftp://prep.ai.mit.edu/toto.txt pour l'exemple précédent (protocole ftp sur la machine prep.ai.mit.edu pour récupérer le fichier toto.txt). Les URL les plus rencontrés sont ceux qui mettent en jeu le protocole http, comme par exemple http://www.dgac.fr qui vous mettra, en rapport avec le serveur http de la DGAC.

Une fois la communication établie, le client et le serveur doivent échanger des informations en utilisant un protocole de communication. Le protocole porte le même nom que le service. Nous ne nous appesantirons pas sur les définitions des protocoles, que l'on peut aisément consulter ( rfc1945 et suivantes). Le protocole http décrit essentiellement le type de document qui est transporté (image, texte), etc... Il permet de faire certaines acrobaties intéressantes, comme le passage d'argument à l'intérieur même de l'URL à des programmes situés sur la machine distante. Il y a ici l'URL http://www.recherche.enac.fr/opti/papers/author.html?todo=author&type=Alliot qui permet d'interroger un programme en lui passant les arguments todo=author et type=Alliot, qui permettront de construire dynamiquement une liste de publications qui sera retournée au client. C'est la technique généralement employée par les grands moteurs de recherche pour récupérer les mots clés fournis par l'utilisateur.

Il faut clairement distinguer la part du travail faite par le client et le serveur dans une communication http. Les clients (navigateurs) les plus connus sont Netscape, ou Internet Explorer ; peu de gens connaissent les noms des serveurs (Apache par exemple).
Le travail du serveur est "relativement" simple. Il doit retourner au client les documents que celui-ci lui demande en respectant le protocole de communication (http). Le travail du client a deux aspects : d'une part, envoyer les requêtes correctes au serveur, d'autre part interpréter les documents qui lui sont retournés. Ainsi, un navigateur doit être capable d'interpréter différents types de documents, comme des images (en divers formats), du texte, ou des documents au format HTML, dont nous allons reparler.

Qu'est ce que HTML ?

HTML signifie Hyper Text Markup Language. C'est le langage dans lequel la plupart des documents qui circulent sur Internet, véhiculés par le protocole http, sont écrits (et en particulier celui que vous êtes en train de lire). Pour comprendre HTML, il faut avant tout parler de SGML, qui signifie Standard Generalized Markup Language, dont la définition est fixée par le standard ISO-8879. SGML est le résultat d'une longue évolution, dont le principal ancêtre directe est le langage d'IBM GML, et dont l'ancêtre indirect (mais toujours bien vivant) est TeX de Donald Knuth. Le standard SGML a été fixé à la fin des années 80, mais l'idée était en gestation depuis longtemps.

L'idée qui se trouve derrière les langages à balisage (c'est ainsi que l'on traduit généralement Markup Language) est une forme de réaction contre le WYSIWYG (What You See Is What You Get). Plutôt que de représenter la forme d'un document directement sur l'écran, on le décrit par des balises, qui vont indiquer les débuts de chapitre, de paragraphe, les énumérations, etc, mais on ne se préoccupe jamais de la façon dont le document lui-même sera représenté. Ainsi, lorsque j'ai tapé le texte que vous êtes en train de lire, je n'avais aucune idée de la façon précise dont votre navigateur va vous le représenter. Celui-ci peut modifier la longueur des lignes, la hauteur du texte, la taille des fontes, etc... La façon dont il interprétera un début de paragraphe, une énumération dépend de lui et de lui seul. Ainsi, le même document lu avec Netscape ou avec Internet Explorer n'aura jamais la même représentation. Soit l'énumération suivante que vous voyez ainsi:

Elle s'écrit en fait : <UL> <LI> Internet Explorer </LI> <LI> Netscape </LI> <LI> Et les autres </LI> </UL> Il est toujours possible de visualiser le code source de la page que vous êtes en train de regarder en utilisant l'option de votre navigateur qui vous permet de le visualiser. Vous pouvez essayer, vous aurez peut-être des surprises...
La syntaxe générale du fichier est définie par la norme SGML : par exemple, les noms des balises doivent toujours être contenues entre des crochets < >. En revanche, les noms des balises et la syntaxe qu'elles doivent respecter sont définis pour le type du document que l'on est en train de traiter à travers un document de définition appelée le DTD, ou Definition Type Document. HTML est en fait un DTD, c'est à dire un document de définition de balises et de la syntaxe associée, que les navigateurs doivent ensuite interpréter.
HTML a été conçu au début comme un langage destiné avant tout à faire de l'hypertexte ; il est possible à partir de n'importe quel document de faire référence à un autre document disponible sur Internet en plaçant son URL à l'intérieur des balises adaptées. Ainsi, si je veux référencer ici la page d'accueil du laboratoire, je vais inclure dans le texte: <A HREF="http://www.recherche.enac.fr/opti/index.html"> ici </A> Le navigateur inclut dans le texte le mot ici dans une représentation généralement souligné (ou de couleur différente), et le fait de cliquer dessus enverra directement au document http://www.recherche.enac.fr/opti/index.html

Historiquement, la première référence à la notion d'hypertexte apparaît chez Vanevar Bush qui décrivit en 1945 une machine opto-électrique capable de créer et de suivre des liens sur microfiches (article original ici).
En 1960, Doug Engelbart développera un prototype nommé NLS (oNLineSystem), qui contient déjà la plupart des idées pour l'édition, la lecture d'hypertexte. Il invente d'ailleurs la souris pour ce système.
En 1980, Tim Berners-Lee écrit le programme "Enquire-Within-Upon-Everything" alors qu'il est consultant au CERN. Ce programme permet la création de noeuds et les liens d'un noeud à l'autre.
En 1989, le document "Information Management: a proposal" écrit par Tim Berners-Lee (toujours au CERN) pose les fondements de ce qui allait devenir le World Wide Web, et qu'il appelait à l'époque le "Mesh". Le premier navigateur écrit pour un système graphique (X-Windows System, sous Unix) sera Viola en 1992. En 1993, le premier grand navigateur fait son apparition : c'est Mosaic, développé par Marc Andreessen (encore sous UNIX et X). En 1994, Marc Andreessen monte sa société, "Mosaic Communications Corp", devenue depuis "Netscape". La même année, le CERN, qui était à l'origine du développement du Web, abandonne son rôle de principal développeur pour se reconcentrer sur ses métiers d'origine (les accélérateurs de particule), et l'INRIA reprend le flambeau avec l'accord de la commission européenne.
Microsoft a manqué le grand démarrage du Web et a tenté de rattraper son retard en développant son propre navigateur, en l'installant automatiquement avec Windows, et en ne livrant aucun programme permettant de le désinstaller. Ce sera le début des procès accusant Microsoft de violer la loi anti-trust, procès qui menacent aujourd'hui de faire exploser le géant américain.

L'influence de SGML est encore plus marqué dans la nouvelle direction prise actuellement par le consortium W3 qui définit les standards HTML (nous en sommes à la version 4.0). Le nouveau futur langage de définition de document Web s'appelle XML et est presque une copie de SGML. Comme SGML, il laisse la définition des balises libres, permettant le développement facile d'extension. Toutes les informations se trouvent sur le site du consortium W3.

JavaScript, Java et le reste

La définition de HTML était rapidement apparue trop limitative. Le langage a donc connu rapidement des extensions, dont certaines sont quelques peu sauvages... Le langage JavaScript est un langage de programmation que l'on peut inclure directement dans les pages Web. L'inconvénient est qu'il doit donc être compris par votre navigateur, ce qui n'est pas toujours le cas. En effet, JavaScript a été réalisé essentiellement par les développeurs de Netscape, et les fonctionnalités les plus récentes du langage ne sont pas disponibles sous Internet Explorer. L'incompatibilité des deux navigateurs principaux du Web devient d'ailleurs un sérieux problème. C'est ainsi que vous rencontrerez sur certains sites un petit texte qui vous explique que tel ou telle page a été développée spécifiquement pour un navigateur particulier. Il est cependant possible de tester dans une page Web si le navigateur qui la lit est ou n'est pas compatible. C'est ce qui est fait ici et je peux ainsi vous dire que . Vous pouvez regarder le code source de cette page pour voir comment faire.
Le code Javascript peut-être visualisé en regardant le source de la page en question. Bien entendu, ce code ne fonctionnera que pour des navigateurs compatibles.
Ce type d'extension (il y en a d'autres) est généralement regroupé sous le vocable de DHTML, ou Dynamic HTML. C'est pour lutter contre cette prolifération que le consortium W3 tente de promouvoir XML.

Le langage JAVA est différent dans son principe. Il ne s'agit plus d'inclure dans une page Web quelques lignes de script, mais bien d'inclure un véritable programme exécutable qui se téléchargera et s'exécutera sur la machine du client. JAVA est un vrai langage de programmation, proche de C et C++, basé sur la programmation objet, développé par SUN Microsystems. Un programme JAVA placé dans une page Web pour y être téléchargé s'appelle une applet. Un exemple de page contenant une applet JAVA se trouve ici. Le code téléchargé n'est pas véritablement du code exécutable (il serait impossible d'exécuter le même code sur des machines possédant des processeurs et des systèmes d'exploitation différents). JAVA emploie une technologie (déjà ancienne dans son principe) appelée pseudo-code. Dans un tel système, le source du programme est compilé dans un langage intermédiaire très simple, le pseudo-code JAVA. C'est ce pseudo-code qui est téléchargé par le navigateur, et est ensuite exécuté localement par le navigateur grâce à un programme spécial, généralement appelé machine JAVA. L'inconvénient de cette méthode est la relative lenteur (comparé aux langages classiques : C, C++, etc) de JAVA.
Il ne devrait pas y avoir en principe de problème de compatibilité entre les navigateurs, la machine JAVA étant sous licence (gratuite) de SUN. Mais hélas, Microsoft a là aussi rajouté son grain de sel, en introduisant des extensions propriétaires Microsoft dans le langage JAVA. C'est le sujet d'un autre procès intenté par SUN à Microsoft, pour violation de la licence JAVA. Pour une opinion particulièrement critique, et passablement juste, sur l'attitude de Microsoft en général, jetez donc un coup d'oeil ici.

Coupe-feu, proxy et piratage

Le problème de la sécurité des machines en réseau est extrêmement ancien. Lorsque les réseaux n'existaient pas, on ne pouvait guère pirater que les machines auxquelles on avait physiquement accès. Il est maintenant possible de s'attaquer via Internet à n'importe quelle machine visible sur le réseau.

Les types d'attaque se subdivisent en fait en plusieurs catégories :

Pourquoi tant de problèmes? Les raisons sont multiples.
D'une part, les fameux démons si souvent attaqués par les pirates sont souvent écrits en C ou en C++, deux des langages les plus courants aujourd'hui. Ces langages présentent de graves lacunes quant au contrôle de l'emploi de la mémoire. Il est possible d'exploiter ces lacunes lorsqu'on les connaît bien; on peut par exemple envoyer sur le port où est attaché le programme un paquet de données plus long que ne l'autorise le protocole. Si le programme est mal conçu, il ne vérifiera pas la longueur du paquet et va s'auto-modifier en lisant trop de données. Ainsi certains octets vont se trouver là où ils n'auraient jamais du être. Le démon se met alors à exécuter des instructions fournies par le pirate. Une solution consiste soit à "blinder" ces programmes en vérifiant systématiquement tous les fragments de code à risque, soit à les réécrire dans des langages mieux conçus.
Les attaques de type "ping de la mort" sont liées à la trop grande permissivité des protocoles et des routeurs. Ces problèmes commencent à être corrigés par l'introduction de routeurs intelligents qui, placés aux noeuds des réseaux, peuvent aider à la détection et/ou l'élimination de ces attaques.
Les vols de données, soit directement sur le médium physique, soit logiciellement, sont de plus en plus combattus par le cryptage des données. Les données ne circulent alors plus en clair sur le réseau, mais sont "brouillées" à l'émission et seul le véritable destinataire dispose des objets nécessaires à son décryptage. Il existe à l'heure actuelle deux grands protocoles de cryptage; le système RSA (du nom de ses inventeurs Rivest, Shamir et Adleman), est fondé sur une propriété simple : l'impossibilité de retrouver rapidement les facteurs d'un grand nombre qui est le produit de deux nombres premiers. C'est le système utilisé lorsque l'on transmet le numéro de sa carte bleue pour un achat sur internet. Le cryptage elliptique (basé sur la théorie des courbes elliptiques sur des corps finis) est plus récent et plus lent à se mettre en place, mais il promet des performances supérieures.

Il ne faut cependant pas se leurrer, le seul moyen d'avoir un système sûr, est qu'il ne soit relié à aucun réseau. C'est en partant de cette idée que sont apparus les notions de coupe-feu (firewall) et de proxy. Pour faire simplement, un coupe-feu est une machine possédant deux cartes réseau. La première est connectée au réseau internet mondial, la seconde au réseau internet local de l'entreprise. Le coupe feu fait alors office de filtre: tout paquet devant passer de l'extérieur vers l'intérieur (ou inversement) sera capturé par un programme d'inspection qui, en fonction de certains critères le laissera où ne le laissera pas passer.
Dans certains cas, on va même plus loin en interdisant purement et simplement que les machines du réseau intérieur soient visibles ou puissent communiquer directement avec l'extérieur. On place alors sur la machine coupe-feu un programme particulier, appelé serveur proxy. Sur les machines du réseau local, on paramètre les logiciels de communication (netscape, internet explorer, ftp, etc) en leur indiquant de ne plus s'adresser directement à l'extérieur mais de s'adresser systématiquement au serveur proxy local. Celui ci récupérera la requête et la retransmettra vers l'extérieur comme si elle venait de la machine coupe-feu et non plus comme si elle venait de la machine située à l'intérieur du réseau. Le serveur proxy fera le travail à l'envers quand la réponse arrivera de l'extérieur.
Il existe des serveurs proxy spécialisés par protocole (un pour http, un pour ftp, etc) et des serveurs proxy capables d'encoder des requêtes de presque tous les types de protocole (proxy socks par exemple).

Ces méthodes sont elles complètement sûres ? Il est clair que non. On a simplement déplacé le problème de la sécurité d'un ensemble de machine à la sécurité d'une seule machine, le coupe-feu. Cependant, si l'administrateur du réseau est compétent, il est probable qu'il administrera au mieux cette seule machine la rendant aussi peu vulnérable que possible aux différentes attaques. Il sera aussi aidé par tout un ensemble de programmes de surveillance et d'inspection. Ceci étant dit, si vous voulez être certain d'être à l'abri, coupez les fils !

Le Web pratique

On dit souvent que l'on peut trouver sur le Web tout et n'importe quoi. Tout est sans doute excessif, n'importe quoi est en revanche vrai...Il est souvent extrêmement difficile de trouver exactement ce que l'on cherche, et l'on peut errer de sites en sites, sans jamais obtenir l'information souhaitée. Une récente étude américaine semble montrer que, en moyenne, sur n'importe quel site que vous soyez, vous n'êtes jamais à plus de 7 clicks de n'importe quel autre site dans le monde. Encore faut-il trouver les bons...

Les premiers outils à connaître sur le Web sont les moteurs de recherche. Le moteur préféré de l'auteur de ces lignes est altavista, mais c'est une pure affaire de goût. Un moteur de recherche vous permet de rechercher des sites à partir de mots clés que vous allez lui fournir. Si vous essayez par exemple comme mots-clés "Air Traffic Control", vous allez avoir accès à un ensemble de 90000 liens vers les sites les plus variés (essayez-donc! La requête est toute prête ici.)

En fait le problème est double : d'une part, il est difficile de préciser les bons mots clés pour restreindre suffisamment la recherche et trouver ce que l'on souhaite. D'autre part, le processus de collecte d'informations réalisé par les moteurs de recherche est bien entendu automatique, et souffre de quelques limitations; le principe est le suivant : des programmes appelés robots, contactent les sites les uns après les autres en se promenant de liens en liens, et analysent les documents qui s'y trouvent pour trouver les mots clés du site et mettre à jour leur base de donnée. Pour accélérer le processus, les créateurs de sites peuvent placer directement sur le site des informations que ces robots vont d'abord lire et qui leur fournit directement les mots-clés du site, sans avoir besoin de faire d'analyse.
Mais il y a des petits malins. Il existe sur le Web tout un ensemble de sites commerciaux dont le seul but est d'apparaître coûte que coûte. Ces gens peu scrupuleux placent sur leurs sites de fausses informations destinés aux robots, en indiquant des mots clés qui n'ont rien à voir avec le site, mais sont souvent recherchés par les utilisateurs du Web. C'est ainsi qu'en cherchant des informations sur Boeing, vous risquez d'aboutir sur un site pornographique...

Quelques sites utiles:


Last Update:
Ma page d'accueil
Me contacter