Serial Socket, un atelier pour étudier HTTP et internet (cookies...)
Quelques Rappels...
Internet est principalement connu par le biais de sa déclinaison HTTP ou plus exactement par le biais de la "navigation" sur les différents sites (ex : http://www.artoflog.com) au moyen d'un browser (ex : internet explorer). Il existe d'autres protocoles (http est un protocole) qui utilisent Internet parmi lesquels la lecture du courrier électronique (pop3) ; l'envoi de message électronique (SMTP) ; la lecture et l'envoi de messages dans les newsgroup (NNTP) ; le transfert de fichier (ftp)... Il est même possible de mettre en place notre propre protocole pour faire communiquer deux programmes par le biais d'Internet.
Tous ces protocoles utilisent un seul et même objet appelé socket. Une socket est un "connecteur" sur internet. Une sorte de prise téléphonique (logicielle) sur laquelle vous allez pouvoir brancher un téléphone, un fax ou un minitel... Aujourd"hui, il n'est pas nécessaire de connaître en profondeur le contenu et le fonctionnement d'une socket. On peut très bien (et c'est là d'ailleurs la finalité des sockets) se placer au niveau d'abstraction le plus haut (lociciel utilisateur) et développer un programme qui communique via internet ; exactement comme on fabriquerait un robot ménager qui se brancherait sur une prise de courant dont on aurait une vague idée de la manière dont l'électricité est produite et amenée jusqu'à la prise (on sait que le courant arrivant est du 220 v alternatif et qu'il faut faire une boucle fermée avec un minimum de résistance = utilisation du courant ; pour que le robot fonctionne et que les plombs ne fondent pas).
Ainsi, quelque soit votre navigateur internet, quelque soit votre outil de courrier électronique, quelque soit votre fournisseur internet, quelque soit le site sur lequel vous vous rendez... Vous aurez au final le schéma suivant :

Pour reproduire en interne (sans avoir à se connecter à internet) cette architecture, il suffit d'installer et de démarrer sur une machine locale un serveur HTTP communément appelé serveur internet. S'il n'est pas difficile d'en développer un minimal avec Delphi, en réaliser un complètement fonctionnel représente un certain labeur. On s'orientera donc vers les nombreux serveurs freewares. Parmi ceux-ci, on trouve l'incontournale apache (un peu difficile à paramétrer pour le non initié), PWS (Personal Web Server) fourni avec certaines versions de windows (qui n'est autre d'ailleurs qu'une versoin bridée de IIS) et sambar qui est gratuit pour une utilisation non commerciale et a été retenu pour notre exemple.
Installez sambar de manière habituelle. Concernant son fonctionnement et les détails de sa mise en oeuvre, referez-vous aux nombreux sites internet sur le sujet. Pour résumer, on pourrait dire qu'il suffit de lancer le programme server.exe pour démarrer sur votre machine un serveur internet HTTP exactement comme celui de http://www.microsoft.com ou autre.

Votre site internet à vous (l'équivalent de microsoft.com) est localhost. Si donc vous démarrez votre browser (ex : Internet Explorer) et que vous allez sur le site http://localhost, vous devez obtenir le site par défaut du serveur sambar.

Si vous n'êtes pas connecté à un réseau ou à internet, l'adresse IP de votre poste (localhost) est par défaut 127.0.0.1 Ainsi, si dans votre browser (ex IE) vous saisissez http://127.0.0.1, vous devez obtenir le même résultat que précédemment. L'adresse IP est l'équivalent d'un numéro de téléphone. Lorsque par exemple vous appelez monsieur Dupont au téléphone, vous regardez dans le bottin téléphonique son numéro de téléphone, puis vous composez par exemple le 04-72-26-56-12. Internet fonctionne exactement sur le même principe sachant que l'équivalent du bottin téléphonique (bases de données whois) est accessible automatiquement par votre browser qui se charge de trouver le bon numéro, ici l'adresse IP.
Le premier "bottin" qui sera consulté pour trouver la correspondance entre le nom et l'adresse IP est le fichier windows/system32/driver/etc/host qui par défaut contient :
# Copyright (c) 1993-1999 Microsoft Corp. # # Ceci est un exemple de fichier HOSTS utilisé par Microsoft TCP/IP # pour Windows. # # Ce fichier contient les correspondances des adresses IP aux noms d'hôtes. # Chaque entrée doit être sur une ligne propre. L'adresse IP doit être placée # dans la première colonne, suivie par le nom d'hôte correspondant. L'adresse # IP et le nom d'hôte doivent être séparés par au moins un espace. # # De plus, des commentaires (tels que celui-ci) peuvent être insérés sur des # lignes propres ou après le nom d'ordinateur. Ils sont indiqué par le # symbole '#'. # # Par exemple : # # 102.54.94.97 rhino.acme.com # serveur source # 38.25.63.10 x.acme.com # hôte client x 127.0.0.1 localhost
Si le nom n'est pas trouvé dans ce premier bottin (ex : microsoft.com), les autres "bottins" présents sur Internet seront consultés (une fois la connexion à Internet effectuée... )...
Dans notre cas, le navigateur trouve l'adresse IP à "composer" (127.0.0.1) et appelle alors le serveur (en réalité la socket) sur le port correspondant au protocole HTTP, c'est à dire le port 80.
Concrètement donc, de
manière standard, un ordinateur est identifié par une adresse IP exactement
comme vous possédez un numéro de téléphone ou une adresse ou un numéro de
sécurité sociale. Il est possible de se brancher sur un ordinateur au moyen de
"connecteurs virtuels" appelés sockets. Chaque socket utilise un port
identifié par un numéro pour communiquer. Deux ordinateurs voulant communiquer
devront donc se mettre d'accord sur le port à utiliser. Par convention,
certains numéros sont réservés et attribués à des services (ou protocoles
définis). Ainsi, http (la navigation sur les différents sites internet)
utilise le numéro 80.
Cette notion de port bien que très courante (ex canal dans le milieu de la CB)
est un peu plus difficile à appréhender. Prenons cette fois une analogie entre
le réseau internet et un réseau ferroviaire. Un premier train part de
Marseille et a pour destination Paris via Lyon. Un deuxième train part de
Marseille et a pour destination Lyon. Tous les deux partent de la même gare
(équivalent ordinateur), mais sur des quais différents (équivalent port).
Dans leur trajet jusqu'à Lyon, chacun utilise le même réseau ferroviaire à
un instant différent (équivalent du transport physique sur le réseau
Internet) . Tous deux arrivent à la même gare (ordinateur), mais la
destination (inscrite par exemple sur la locomotive :-) ) implique que chacun va
se diriger sur un quai différent (port) convenu à l'avance pour que les
voyageurs qui vont à Paris ne montent pas dans le train dont le terminus est
Lyon... On pourrait explorer encore plus loin l'analogie entre un réseau
ferroviaire et le réseau Internet, mais ce n'est pas le propos de cet atelier.
Par la suite, nous considérerons que les mécanismes de base sur les sockets et internet sont acquis...
Revenons à notre atelier...
Les navigateurs Internet (et la plupart des programmes utilisant internet ex : client ftp) autorisent aujourd'hui l'utilisation d'un outil appelé "serveur proxy". Un serveur proxy est "une sorte" de serveur internet intermédiaire. Son rôle est de partager une connexion internet et éventuellement de stocker dans un cache les dernières données (ex contenu d'un site internet) rapatriées d'internet pour ne pas les redemander.
Notre premier schéma de connexion devient alors :

Le premier intérêt d'un serveur proxy est de partager une connexion internet (ex : on branche plusieurs utilisateurs simultanément à internet en les branchant en réalité sur le serveur proxy qui lui est relié à internet).

Notre serveur proxy n'est ni plus ni moins qu'une sorte de "socket intermédiaire" que l'on place entre la socket du navigateur (ex IE) et la socket du serveur internet.
La plupart des serveurs HTTP (apache, sambar...) peuvent jouer le rôle de serveur proxy ; la programmation d'un serveur proxy est en effet très similaire à celle d'un serveur internet.
Dans le cas de sambar, après avoir démarré le serveur, on lance http://localhost dans internet explorer, la page de gestion du serveur s'affiche et on y sélectionne system administration (user : admin pass : ).


Dans l'écran suivant sélectionner serveur configuration

Dans l'écran suivant, sélectionner HTTP Proxy (enabled) dans
la partie de gauche pour le faire basculer à "running".
Puis sélectionner dans la partie de gauche All proxies
"configuration" pour faire afficher les options du serveur proxy dans
la partie de droite. Vérifiez que la rubrique "Act as HTTP Proxy Server"
est bien positionnée sur Yes.
En cas de problème ou pour aborder plus en détail les différentes options du
proxy sambar, référez vous à l'aide.

Redémarrer le serveur.
A ce stade, nous avons notre serveur proxy et notre serveur internet local prêts à fonctionner.
Il ne reste plus qu'à indiquer à internet explorer qu'il doit passer par notre serveur proxy pour se connecter à internet. Pour commencer, nous entendrons par internet l'adresse localhost, c'est à dire notre serveur sambar.
Pour qu'Internet Explorer utilise un proxy, il faut lui spécifier dans le menu "Outils/Options internet", onglet "connexions" ; sélectionner "Paramètres réseaux"

Dans l'écran suivant, cocher serveur proxy, spécifier l'adresse 127.0.0.1, le port 80

Après avoir validé, relancer http://localhost dans le navigateur internet. Vous devez retrouver la même page de sambar, mais si vous regardez de plus près dans la fenêtre de log de sambar vous apercevrez le passage par le proxy avant de passer vers le serveur.

Et notre atelier...
Ainsi donc, il est possible de faire passer la communication entre un navigateur internet et un serveur internet par un endroit centralisé (le proxy). Sur ce même principe, on peut ajouter en série autant de serveur proxy que l'on veut (c'est d'ailleurs une des techniques utilisée par les "bidouilleurs" pour brouiller les pistes lorsqu'ils ne veulent pas qu'un lien entre un serveur et un client soit retracé facilement). Dans notre cas, nous allons utiliser cette possibilité pour placer notre propre socket en série qui aura pour fonction de nous afficher le trafic afin d'étudier le fonctionnement d'internet et de voir les informations que notre navigateur internet envoie avec ou sans notre consentement.
Du côté de Delphi...
Delphi comporte deux composants. TclientSocket et TServerSocket

Ces deux composants contiennent la gestion complète d'une socket. En simplifiant, on peut dire que le composant TClientSocket est l'équivalent du coeur d'internet explorer (ou netscape, ou outlook express), tandis que le composant TServerSocket est lui le coeur de Sambar (ou apache ou IIS). Pour réaliser notre "serial socket", nous utiliserons les deux.

Un véritable proxy doit analyser les requêtes qu'il reçoit pour ensuite les envoyer au bon serveur Internet. Dès lors sa réalisation est vraiment très proche de celle d'un véritable serveur internet. C'est pourquoi d'ailleurs la plupart des serveurs Internet peuvent également jouer le rôle de serveur proxy. Dans notre cas, la finalité de notre programme est vraiment de "monitorer" le trafic http, en se plaçant au niveau d'abstraction le plus haut (niveau logiciel utilisateur). Notre outils se chainera sur un véritable proxy (sambar dans notre exemple) qui lui traitera les requêtes.

La réalisation complète de "serial socket" en Delphi est traîtée dans nos formations.
Vous pouvez
également télécharger "serial socket"