jeudi 29 mars 2012

Les sockets et le protocole HTTP

Bon, nous allons commencer par la base :D

Les sockets

Un socket est un flux de communication entre deux objets que nous nommerons "Client" et "Serveur" dans le cadre du projet. Le Client va demander un droit de créer un canal de communication avec le Serveur, puis, si celui ci accèpte, le Client et le Serveur pourront communiquer. En C++, C#, Java, etc... les fonctions sont quasi-identiques. Cela consiste :
  • Créer un objet Socket
  • Le paramétrer (TCP, Internet, etc... et le Host, le port)
  • Lancer la demande pour le client ou se mettre en "Listen" pour le serveur
  • Les fermer et les détruires
Le mode listen est le mode du Serveur qui consiste à attendre une demande de connection d'un Client. Celle ci est souvent bloquante bien que certaines alternatives avec CallBack ou Non bloquante existe. Le socket est la base d'internet comme du réseau local... Voici un Client - Serveur de chat simple sur Developpez.com :http://stephaneey.developpez.com/tutoriel/dotnet/sockets/

Le protocole HTTP

Le protocole HTTP, si vous passez outre la partie réseau s'avère assez simpliste. Voici une version du RFC de l'ancien salemioche.net : http://www.iprelax.fr/http/1945tm.php En quoi consiste la petite partie du protocole qui nous intéresse pour notre projet ? Voici ce que doit faire notre programme : Une fois connecté, lui envoyer une demande de page en envoyant tout simplement une string avec
GET NomDeLaPage HTTP/1.1  
host: alphablog.org    

(Double retour chariot pour finir)
et la réponse est du style
HTTP/1.1 200 OK
  Date: Thu, 20 Dec 2001 17:11:50 GMT
  Server: Apache/1.3.19 (Unix) PHP/4.0.6
  Last-Modified: Thu, 20 Dec 2001 16:36:22 GMT
  ETag: "2cb9e7-61c-3c221386"
  Accept-Ranges: bytes
  Content-Length: 1564
  Connection: close
  Content-Type: text/html
  X-Pad: avoid browser bug    <html><head>
  ...(Suite et fin)
Enfin nous récupérons le code renvoyé par le Serveur, nous le parsons et nous en extrayons les cookies, les sessions, les liens html etc... Je vous laisse le plaisir de découvrir les joies d'extraire tout ces petits champs et si le malheur s'abat sur vous, la chance de découvrir les "serveurs caches". Autre difficulté, trouver dans le RFC les "nomenclatures" de fin de paquet par exemple, de séparation entre paquet système et paquet utile (entre le "HTTP/1.1 200 OK..." et le "<html>...") et aussi la méthode d'envoie des paramètres POST et GET qui ne sont pas si compliqués.

Application a Ogame

But de la manoeuvre : faire croire a Ogame qu'on joue... Pour cela, rien de plus simple, on va : - Se connecter à lui - Récupérer des pages et envoyer des demandes pour : --- Simuler une identification et récupérer les Session générés par php --- Générer les paquets d'affichage des pages, les récupérer et les parser. - Fermer proprement la session et enfin le socket.

Outils utiles (indispensables)

Les plugins de firefox qui affichent/modifient les paquets ou un bon sniffer avec décryptage de paquet HTTP (gzip entre autre). Un peu de patiente. Si vous avez des questions, postez à la suite une question consise et complète et je tacherais d'y répondre.

Original article available at http://www.alphablog.org

Aucun commentaire:

Enregistrer un commentaire