Journal intercepter le html a la volé

Posté par  .
Étiquettes : aucune
0
4
avr.
2004
Bonjour cher journal,
Mon projet de chat avance toujours un peu plus chaque jour.
Aujourd'hui, j'ai implémenter une fonction fait-maison pour recuperer l'adresse de mon serveur, pour que les clients, quelque soit leur lieu, trouve mon serveur tout seul comme des grands.

ma fonction se résume a un truc de ce genre :

system("echo `lynx -dump -accept_all_cookies http://membres.lycos.fr/****/index.php(...) | grep albert` | cut -d' ' -f2 > /tmp/chat.tmp");

Voilà, ensuite le client va chercher dans le fichier l'adresse et s'y connecte.

Bon comme vous pouvez le constater, ca nécéssite lynx, et ca nécéssite aussi un appel a la commande system, que j'affectionne pas trop.

Donc je voulais savoir s'il etait possible de se connecter a la page web directement via sys/socket.h afin de recuper le code html et de le manipuler ensuite a sa guise, et si quelqu'un avait déjà réussi la manoeuvre (sans passer par des bibliotheques spéciales, j'aimerai beaucoup rester dans la manipulation de socket.h)

Voilà, si quelqu'un s'ennuit et veut bien m'aider un ti peu :-)

Merci d'avance
  • # Re: intercepter le html a la volé

    Posté par  (site web personnel) . Évalué à 1.

    Quel est l'interet de faire ca en C ? Tu te doutes bien que si tu dois faire tout ca sans bibliotheques, en C, ca va etre long, fastidieux, et pas du tout passionnant...
    • [^] # Re: intercepter le html a la volé

      Posté par  . Évalué à 1.

      Bah mon projet de fin d'année doit etre fait en C.

      C'est un chat, qui pour l'instant marche très bien, mais dans lequel il subsite cette instruction system que je souhaite remplacer, de maniere a pouvoir arriver au meme resultat, meme lorsque la machine cliente n'aura pas lynx d'installé.

      Voilà tout.

      Pour ce qui est du long, fastidieux, et pas du tout passionnant, bah je prend le risque quand meme :-)
  • # Re: intercepter le html a la volé

    Posté par  . Évalué à 1.

    Quel est donc le problème ?
    Tu sais manipuler des sockets ?

    C'est le protocole HTTP(/1.1) qui t'effraie ?
    Tout est là : http://www.faqs.org/rfcs/rfc2616.html(...)

    Tu n'attends pas de nous qu'on te code tout quand même ? :p
    • [^] # Re: intercepter le html a la volé

      Posté par  . Évalué à 1.


      Tu n'attends pas de nous qu'on te code tout quand même ? :p


      Bah puisque t'en parles :-D


      Non plus serieusement, j'ai essayé de voir comment réagissait les serveurs web quand on se connectait a eux, et qu'on affichait de maniere brute toutes les infos recues.

      Je pensais un peu naivement car j'y connais rien, que les serveurs web se contentait d'envoyer a chaque client la totalité des pages demandées de maniere brut (a savoir le code html), et que c'etait donc au client de gerer ensuite ce qu'il en faisait.

      Mais si je me connecte a un serveur web tel que google.fr, il ne se passe strictement rien, donc que dois je faire pour qu'il m'envoi le code source de la page ? une commande précise ?
      • [^] # Re: intercepter le html a la volé

        Posté par  . Évalué à 1.

        essaye la commande GET /page.html HTTP/1.1 suivit d'une ligne vide

        Ex :
        telnet google.com 80
        [..]
        GET /index.html HTTP/1.1

        HTTP/1.1 302 Found
        Location: http://www.google.fr/cxfer?c=PREF%3D:TM%3D1081092580:S%3DP0zZrduOm-(...)
        Set-Cookie: PREF=ID=0ce68c2b345ed450:CR=1:TM=1081092580:LM=1081092580:S=VTKuDv01uQmwp7pF; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
        Content-Type: text/html
        Server: GWS/2.1
        Content-length: 203
        Date: Sun, 04 Apr 2004 15:29:40 GMT

        302 Moved
        302 Moved
        The document has moved
        here.
        • [^] # Re: intercepter le html a la volé

          Posté par  . Évalué à 1.

          C'est incomplet.

          GET /... HTTP/1.1
          Host: www.google.com


          Sinon si tu es sur un serveur avec des vhosts ça marchera pas. C'est le stricte minimum, ça.
      • [^] # Re: intercepter le html a la volé

        Posté par  . Évalué à 1.

        GET / HTTP/1.1 (deux retour à la ligne)


        tu es sûr que tu as cherché?
        tu es sûr que c'est une bonne idée??
        pkoi tu ne fous pas ta config dans un fichier texte???

        Je trolle dès quand ça parle business, sécurité et sciences sociales

      • [^] # Re: intercepter le html a la volé

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        je suppose que tu sais etablir un connexion avec socket pour une adresse et un port donné :

        bon admettons que tu veuilles le contenu de la page html http://www.google.fr/about.html(...)

        tu fais une connection à l'hote www.google.fr sur le port 80 (port classique pour http)

        si tu veux faire un essai tu fais : "telnet www.google.fr 80"
        ensuite il te dit :

        Trying 64.233.167.99...
        Connected to www.google.fr.
        Escape character is '^]'.

        ensuite tu tapes : "GET /about.html HTTP/1.1" suivi de 2 retours chariot

        il t'affiche donc le contenu de : http://www.google.fr/about.html(...)



        HTTP/1.1 200 OK
        Content-Type: text/html
        Last-Modified: Fri, 02 Apr 2004 01:20:24 GMT
        Set-Cookie: PREF=ID=33ddff4717cdd806:TM=1081092848:LM=1081092848:S=sWfOpzwO3ucQAG6s; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
        Server: GWS/2.1
        Content-length: 9938
        Date: Sun, 04 Apr 2004 15:34:08 GMT



        <HTML>
        <HEAD>
        <TITLE>About Google</TITLE>
        <style>
        <!--
        body,td,font,p,a{font-family:arial,sans-serif}
        //-->
        </style>

        [ coupure ]


        Google <a href="privacy.html">Privacy Policy</a> - <a href="terms_of_service.html">Terms
        of Service</a></font> </td>
        </tr>
        </table>
        </center>
        </body>
        </HTML>



        tu remarqueras en début de réponse les entêtes http... puis le contenu qui suit...


        maintenant comment faire ça en C :

        // tu crées le/la socket pour se connecter sur l'hôte www.google.fr sur le port 80...
        soc = socket( structure qui va bien, tous ça, tous ça)

        // ensuite tu ecrit ta requete sur le/la socket
        write(soc, "GET /about.html HTTP/1.1\r\n", taille_en_octets__de("GET /about.html HTTP/1.1\r\n")

        // t'attends de lire la réponse :
        read(soc, buffer, taille_que_tu_veux)

        a tous ça s'ajoute les controles d'erreurs, dans ce que tu recois du dois séparer les entêtes du contenu a priori séparér par deux "\n\n" consécutifs mais vaut mieux jeter un coup d'oeil à la RFC du protocole.....
        dans les entetes se trouvent aussi la tailles du "contenu html" à lire .....


        voila, voila ....


        M.
        • [^] # Re: intercepter le html a la volé

          Posté par  (site web personnel, Mastodon) . Évalué à 1.

          je rajouterai que la fonction system est à eviter voir la page man pour ça ....

          M.
        • [^] # Re: intercepter le html a la volé

          Posté par  . Évalué à 1.

          Merci beaucoup a toi et aux autres qui ont répondu :-)

          C'est vrai que je connaissai pas trop le protocole html, mais quand on le connait, c'est tout de suite beaucoup plus simple !!


          Donc Merci(bis) a toi et aux autres pour votre aide :-)
          • [^] # Re: intercepter le html a la volé

            Posté par  . Évalué à 1.

            En fait après divers essais et lecture de la rfc, l'acces a ma page nécéssitait une autre commande : Host

            Pour pouvoir la voir sans me faire jetter, je dois tapper :

            telnet membres.lycos.fr 80
            GET /mon_compte/ma_page.php HTTP/1.1
            Host; membres.lycos.fr



            Je ne sais pas pourquoi pour le test google c'etait OK mais sans hostname alors que pour ma page je dois le préciser. Bref si quelqu'un le sait, pour ma culture personnelle je veux bien savoir :-)
            • [^] # Re: intercepter le html a la volé

              Posté par  . Évalué à 1.

              peut etre que le serveur membres.lycos.fr est mutualisé, dans ce cas apache prend le header Host pour trouver quelle site web virtuel tu cherche à atteindre, sinon il prend le site par default, et si celui-ci n'est pas membres.lycos.fr il ne trouve pas forcement le /mon_compte/ma_page.php. Voila, j'espere que c'est a peu pres clair :)
        • [^] # Re: intercepter le html a la volé

          Posté par  (site web personnel) . Évalué à 1.

          >ensuite tu tapes : "GET /about.html HTTP/1.1" suivi de 2 retours chariot

          Ca fait deja au moins 2 posts qui disent "2 retours chariot". Et la je proteste ! :-)

          Soit on fait du HTTP/1.0 et alors les 2 retours chariots sont corrects.
          Soit on fait du HTTP/1.1 et on doit obligatoirement mettre une ligne Host: server.com.

          Voir chapitre 14.23 Host du document http://www.faqs.org/rfcs/rfc2616.html.(...)
          Quote:

          A client MUST include a Host header field in all HTTP/1.1 request messages .
          • [^] # Re: intercepter le html a la volé

            Posté par  . Évalué à 1.

            De plus les retours chariots sont à la sauce internet, à savoir \r\n (et non pas un simple \n). C'est ok dans le bout de code plus haut, mais personne ne l'a signalé...
  • # Re: intercepter le html a la volé

    Posté par  (site web personnel) . Évalué à 1.

    Aujourd'hui, j'ai implémenter une fonction fait-maison pour recuperer l'adresse de mon serveur, pour que les clients, quelque soit leur lieu, trouve mon serveur tout seul comme des grands.

    Ce problème a été résolu depuis longtemps, on a créé tout un système pour ça, qui s'appelle le DNS (Domain Name Service ou System, je sais plus). Donc tu met l'adresse IP de ton serveur en face d'un nom bien à toi, et tes clients n'ont plus qu'à utiliser le nom. ;-)

    Bien sûr, tu vas me dire que ton IP change tout le temps, et qu'un nom de domaine c'est cher. Réponse : http://www.dyndns.org/(...) pour récupérer un nom de domaine gratuit (enfin, pas un nom complet, un nom de type blablabla.dyndns.org ou blablabla.homelinux.org, bref tu as le choix du début, et une petite liste de choix pour le milieu et la fin). Comment mettre le nom de domaine à jour dès que ton IP change ? Réponse : http://ez-ipupdate.com/(...) .

    Il y a deux ans je faisais comme toi (adresse IP stockée dans un fichier sur un compte Free), ça a été rigolo à coder, mais c'était quand même lourd. Je me sers de ce service depuis cette époque, j'en suis super content. :-)
    • [^] # Re: intercepter le html a la volé

      Posté par  . Évalué à 1.

      Oui oui j'suis au courant moi aussi pour dyndns :-)

      Mais ceci dit, pour mon projet j'voulais un truc plus interessant, donc comme mon programme utilise plein pot les sockets jvoulais rester dans le meme domaine, et pas me contenter d'une simple redirection :-)

      Et sinon pour info, mon nouveau bout de code marche très bien, et il me trouve l'ip en 0.2 seconde, ca va beaucoup plus vite que d'ouvrir lynx :), donc j'suis content !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.